2010-09-15 3 views

ответ

0

Вызывающие условные обозначения для каждой функции - не PE-файл.

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

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

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

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

Edit: добавлен пример

Пример cdecl из the link:

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 возвращается, вызывающий очищает аргументы из стека.

+0

Как судить, какое соглашение используется при разборке? – Alan