2014-01-03 3 views
0

Я знаю, когда функция вызывающего абонента вызывает функцию вызываемого абонента, функция вызывающего абонента выталкивает аргументы и адрес возврата, а затем создает фрейм стека для функции вызываемого абонента: push% ebp% ebx% edi% esi и нажать локальную переменную , но что произошло, когда возвращенная жертва?что произошло, когда функция возвращает

+0

Ну, что инверсия 'толчок()' операции? –

+4

(Предупредите, что то, что вы знаете, является только одним конкретным соглашением о вызове, многие данные могут и будут отличаться в других средах.) – delnan

+0

e, это соглашение о вызове по умолчанию в C/C++. – stamaimer

ответ

3

На самом деле C++ не имеет стандартного двоичного интерфейса приложения (ABI). C имеет, но программист может изменить его, применяя специальные соглашения о компиляторе. Обзор (машина x86) находится по адрес: http://en.wikipedia.org/wiki/X86_calling_conventions

0

Вызов возвращает возвращаемое значение в стек и возвращается.

0

функции вызываемой стороны выполняет следующие задачи

-> push the address of previous stack frame 
-> push the local variables 
-> performs computation 
-> restores previous stack frame 
-> store the function result 
-> jump to return address 
Смежные вопросы