2012-02-04 2 views
2

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

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

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

call 774a7fdch 

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

Спасибо!

ответ

3

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

1

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

call dword ptr 0x774a7fdc 
+0

Он говорит: "Неправильный тип операнда" ...: S – Taru

+0

@TaruStolovich MOV EBX, 0x774a7fdc вызов EBX работает? – farnsworth

4

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

E8 XX XX XX XX 

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

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

mov eax, 774a7fdch 
call eax 

Это будет 7 байт вместо 5 , хоть.

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

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

Смежные вопросы