В настоящее время я работаю над использованием ASM в C / C ++
У меня есть следующее
__declspec(naked) unsigned long
someFunction( unsigned long inputDWord )
{
__asm
{
}
}
как, в asm, я бы вернул неподписанный длинный?
Нужно ли что-то помещать в стек, а затем вызывать ret?
Я не использовал Asm в течение долгого времени, и никогда раньше не работал в C ++.
Спасибо!
РЕДАКТИРОВАТЬ: Благодаря @Matteo Italia я исправил использование ret
,
Положить ретваль в eax
зарегистрироваться, это в соответствии с __cdecl
а также __stdcall
конвенций.
Затем, в зависимости от соглашения о вызовах, вы должны использовать соответствующий вариант ret
инструкция:
__cdecl
соглашение (или подобное) — использование ret
, На уровне машины это означает pop
-ing адрес возврата из стека и jmp
к этому. Вызывающая сторона отвечает за удаление всех параметров функции из стека.__stdcall
соглашение (или подобное) — использование ret X
, в то время как X
это размер всех аргументов функции.Других решений пока нет …