ASM, вызывая функции с asm - PullRequest
       1

ASM, вызывая функции с asm

2 голосов
/ 04 февраля 2012

Я хочу вызвать функцию с адресом 774a7fdch (функция kernel32.dll) с ASM внутри программы C ++

Я использую Visual Studio 2010.

как я могу это сделать?

call 774a7fdch

не работает, как я могу передать вызов функции?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 13 января 2013

Будьте осторожны с инструкцией CALL, она зависит от позиции. Это закодировано как:

E8 XX XX XX XX

Где X - это расстояние от адреса памяти следующей инструкции до адреса вызываемой функции. Это расстояние также известно как дельта-смещение .

Если вы не можете знать, где ваш код будет в памяти, чтобы выполнить вычисление, вы можете вместо этого загрузить адрес в регистр:

mov eax, 774a7fdch
call eax

Это было бы 7 байтов вместо 5, хотя.

Кроме того, как отметил другой пользователь, жесткое кодирование адресов функций, вероятно, является плохой идеей, поскольку они могут перемещаться.

Я не знаю, решает ли это вашу проблему или нет, потому что я не уверен, что вы подразумеваете под "не работает".

3 голосов
/ 13 января 2013

Я сталкивался с той же проблемой в VS2010 раньше.попробуйте позвонить [0x774a7fdc]

1 голос
/ 04 февраля 2012

Должен работать с

call dword ptr 0x774a7fdc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...