Будьте осторожны с инструкцией CALL, она зависит от позиции. Это закодировано как:
E8 XX XX XX XX
Где X - это расстояние от адреса памяти следующей инструкции до адреса вызываемой функции. Это расстояние также известно как дельта-смещение .
Если вы не можете знать, где ваш код будет в памяти, чтобы выполнить вычисление, вы можете вместо этого загрузить адрес в регистр:
mov eax, 774a7fdch
call eax
Это было бы 7 байтов вместо 5, хотя.
Кроме того, как отметил другой пользователь, жесткое кодирование адресов функций, вероятно, является плохой идеей, поскольку они могут перемещаться.
Я не знаю, решает ли это вашу проблему или нет, потому что я не уверен, что вы подразумеваете под "не работает".