Как исследовать соглашение о вызовах PE двоичного файла в Windows? - PullRequest
0 голосов
/ 15 сентября 2010

Есть ли инструмент, чтобы показать, является ли соглашение о вызовах _cdecl или _stdcall или еще?

1 Ответ

0 голосов
/ 20 сентября 2010

Соглашения о вызовах даны для каждой функции, а не для файла PE.

Библиотечные функции.по крайней мере, те, которые предоставляются MS, все _stdcall.Все остальное распространяется на другие соглашения о вызовах, большинство из которых _cdecl.

. Вы можете прочитать больше здесь .

Краткая версия:

  • cdecl функции не очищают свой аргумент из стека, разрешая аргументы переменного размера.Хорошим примером является printf(), который может иметь различное количество аргументов.
  • stdcall функции очищают аргументы из стека сами.Следовательно, аргументы переменного размера невозможны.

Редактировать: добавлен пример

Пример для cdecl из ссылка :

push c
push b
push a
call function_name
add esp, 12 ;Stack clearing, 3 arguments take 12 bytes of space (on 32bit)

Поэтому после возврата function_name вызывающая сторона удаляет аргументы из стека.

...