Запись активации для main () - PullRequest
0 голосов
/ 13 марта 2011

Я новичок в движении задним ходом. Мои извинения, если вопрос звучит для начинающих :) Я создал простой код в Visual Studio C ++ 2010 на XP SP3:

int main()
{
    return 0;
}

Всякий раз, когда я открываю его в Olly, он показывает следующее состояние стека с приостановленным выполнением:

0012FFC4   7C817077  RETURN to kernel32.7C817077
0012FFC8   7C910228  ntdll.7C910228
0012FFCC   FFFFFFFF
0012FFD0   7FFD5000
0012FFD4   80544CFD
0012FFD8   0012FFC8
0012FFDC   82537DA8
0012FFE0   FFFFFFFF  End of SEH chain
0012FFE4   7C839AD8  SE handler
0012FFE8   7C817080  kernel32.7C817080
0012FFEC   00000000
0012FFF0   00000000
0012FFF4   00000000
0012FFF8   004012A0  Reversin.<ModuleEntryPoint>
0012FFFC   00000000

Я вижу конец цепочки SEH и обработчик SE, остальное мне не имеет смысла. Я нашел следующий макет стека для функций с установленным обработчиком исключений:

Function_Local_Variables
Exception_Registration_Record
Exception_Handler
Callers_EBP
Return_Address_in_Caller
Function_Arguments

Кажется, это не относится к моему делу. Мне нужна помощь, чтобы понять, что хранится в стеке, пожалуйста.

Спасибо.

1 Ответ

0 голосов
/ 14 марта 2011

Если вы пытаетесь узнать соглашение о стеке, взглянув на шестнадцатеричный код в Olly, вам следует подумать о том, какому стеку соответствует ваш код.По умолчанию большая часть кода C ++ соответствует соглашению __cdecl.Проверьте эту ссылку: http://en.wikipedia.org/wiki/X86_calling_conventions#cdecl

...