Будьте осторожны с инструкцией CALL, это зависит от положения. Он кодируется как:
E8 XX XX XX XX
Где крестики являются расстояние от адреса памяти следующей команды на адрес функции вы звоните. Это расстояние также известно как delta offset.
Если вы не можете знать, где ваш код будет в памяти, чтобы сделать расчет, вы можете попытаться загрузить адрес в регистре вместо:
mov eax, 774a7fdch
call eax
Это будет 7 байт вместо 5 , хоть.
Кроме того, как указал другой пользователь, жесткая кодировка адресов функций, вероятно, является плохой идеей, так как они могут перемещаться.
Я не знаю, решает ли это вашу проблему или нет, потому что я не уверен, что вы подразумеваете под «не работает».
Он говорит: "Неправильный тип операнда" ...: S – Taru
@TaruStolovich MOV EBX, 0x774a7fdc вызов EBX работает? – farnsworth