I have an address and I want to byte-patch it because there is a JMP that I want to block. But when I NOP it, the game just crash because it corrupt the function. So, I don't know what to do for block the JMP with a byte-patch.
There is a screen of the address below.
Thanks in advance !
2 Answers
Your problem is that you change the expected flow of the program - By patching the JMP
you completely change the flow - it's not a call
so the original flow doesn't get back to the push rdi
instruction, but after patching it does, so the behavior is not expected. Try to look for what happens in 7FFCAE2A0F13
, and maybe to patch inside.
There are two issues here. One, as macr0controller notes, is that the jump might be to essential code that runs before the routine.
The second is that the jump might not be a fixed address, meaning that there's a relocation item that points to it, so any NOPs that you write will be replaced with what becomes garbage instructions if you replace the 0xE9 instruction with a NOP as well.
Instead, you could change the 0xE9 (JMP) to an instruction of equivalent length such as 0x3D (CMP EAX, imm32) which alters no registers and will not be affected by the following values.
-
Hello ! Thanks for the answer. I tried 0x3D but the game still crash (cmp eax, 100) ... So, I've to patch inside the JMP or replace by something else than CMP EAX, imm32 ?– BeebeyFeb 4, 2020 at 16:08
5
bytes ofJMP
opcode?JMP
jumps to?