나는 게임에 C++ DLL을 주입하고 있으며, 필자의 일부 코드에 함수를 연결하고 싶습니다. DLL은 매번 다른 위치에 매핑되기 때문에 직접 점프와 호출이 더 쉬울 것입니다. 또한 이것은 후크이기 때문에 함수로 돌아갈 때 스택이나 레지스터를 변경하고 싶지 않습니다.관련성 (x86)을 사용하지 않고 ASM에서 직접 호출/점프
포인터를 가질 수 있도록 Asm을 저장하는 char *을 선언합니다. (char * asm = "\ x00";) 16 진수를 제공 할 수 있으면 시간이 절약됩니다.
필자는 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 블록을 수정하려면 어떻게해야합니까? 나는 사물의 종류를 해본 적이