Я внедряю DLL-библиотеку c ++ в игру, и я хотел бы привязать функцию к своему коду. Поскольку DLL каждый раз отображается в другое место, было бы проще выполнять прямые переходы и вызовы. Кроме того, поскольку это ловушка, я не хочу менять стек или регистры, когда возвращаюсь к функции.
Я объявляю char * для хранения Asm, чтобы у меня был указатель на него (char * asm = "\ x00";)
Если бы вы могли предоставить hex, это сэкономило бы мне время.
Я пытался использовать FF и EA для вызовов и прыжков, но, думаю, я просто не понимаю, как они работают. Когда я их использовал, я заметил, что теперь у меня двоеточие в операции.
JMP FAR FWORD PTR DS:[00000000]
Это не сработало и не сработало после того, как я попытался использовать указатель на место перехода.
Вот сборка, которую я использовал до того, как начал пробовать разные методы:
01270000 50 PUSH EAX
01270001 57 PUSH EDI
01270002 E8 E9CC1BFF CALL fwound.0042CCF0
01270007 5F POP EDI
01270008 58 POP EAX
01270009 50 PUSH EAX //replacements
0127000A 8D4C24 7C LEA ECX,DWORD PTR SS:[ESP+7C] //
0127000E - E9 36D11BFF JMP fwound.0042D149
Я сделал этот блок, используя Олли, поэтому он знал, какие соответствующие переходы / вызовы необходимы в то время.
После того, как этот Asm находится в памяти, мне нужно переписать две операции (которые заменяются) в функции, чтобы перейти к этому месту.
Итак, как я могу исправить свой блок Asm, чтобы использовать прямые переходы и вызовы?