2014-12-24 5 views
0

Я знаю, как передавать параметры пользовательской функции и как создавать локальные переменные внутри такой функции. Но я хочу создать локальные переменные для основной функции.Как создать локальные переменные внутри основной функции?

Итак, основная функция - это первое, что выполняется при запуске программы, но каково начальное значение esp при запуске основного запуска? То есть, что находится поверх стека при запуске основного запуска, это аргументы командной строки?

Если я хочу создать локальные переменные внутри main, должен ли я сохранить значение esp в ebp, а затем увеличивать esp на то, сколько данных мне нужно, как я делаю внутри пользовательской функции?

ответ

2

Итак, основная функция - это первое, что выполняется при запуске программы, но каково начальное значение esp при запуске основного запуска? То есть, что находится поверх стека при запуске основного запуска, это аргументы командной строки?

main называется нормальной функцией, поэтому (с cdecl вызовом конвенции), верхние вещи, от верха до низа, (по желанию) указатель среды, то указатель на массив указателей аргументов строки , затем argc, затем обратный адрес main.

Если я хочу создать локальные переменные внутри main, должен ли я сохранить значение esp в ebp, а затем увеличивать esp на то, сколько данных мне нужно, как я делаю внутри пользовательской функции?

mainявляется функция пользователя. Она вызывается из crt0.o (название может отличаться в зависимости от операционной системы) из кода примерно так:

void 
_start(void) 
{ 
    /* initialisation skipped */ 
    int rv = main(newargc, newargv, environ); 
    do_global_dtors(); 
    exit(rv); 
    /* NOTREACHED */ 
} 

Итак, Т.Л., д-р: да.

(Обратите внимание, что даже _start имеет действительный указатель стека, но обычно не обратный адрес, поэтому он должен в конечном итоге вызвать exit системный вызов.)

+0

Обратите внимание, что даже для реальной точки входа, указатель стека действителен так что вы могут выделять местные жители точно так же. – Jester

 Смежные вопросы

  • Нет связанных вопросов^_^