сборка — возврат C / C ++ из кода x86

В настоящее время я работаю над использованием ASM в C / C ++

У меня есть следующее

__declspec(naked) unsigned long
someFunction( unsigned long inputDWord )
{
__asm
{
}
}

как, в asm, я бы вернул неподписанный длинный?

Нужно ли что-то помещать в стек, а затем вызывать ret?
Я не использовал Asm в течение долгого времени, и никогда раньше не работал в C ++.

Спасибо!

0

Решение

РЕДАКТИРОВАТЬ: Благодаря @Matteo Italia я исправил использование ret,

Положить ретваль в eax зарегистрироваться, это в соответствии с __cdecl а также __stdcall конвенций.

Затем, в зависимости от соглашения о вызовах, вы должны использовать соответствующий вариант ret инструкция:

  • В случае __cdecl соглашение (или подобное) — использование ret, На уровне машины это означает pop-ing адрес возврата из стека и jmp к этому. Вызывающая сторона отвечает за удаление всех параметров функции из стека.
  • В случае __stdcall соглашение (или подобное) — использование ret X, в то время как X это размер всех аргументов функции.
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector