Соглашения о вызовах даны для каждой функции, а не для файла 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
вызывающая сторона удаляет аргументы из стека.