Most binaries have jump and control flow instructions that are relative to other locations in the binary. For example: if I modify an instruction around 0x12341232
, and there is an instruction somewhere in the code that would do jmp 0x12341234
, that 0x12341234
location will not be the same.
So,
# Original
0x12341232: mov eax, ebx
0x12341234: call sym.hello
...
0x13371337: jmp 0x12341234 # points to correct instruction
--------
# Modified
0x12341232: call 0x3232
0x12341237: call sym.hello
...
0x13371337: jmp 0x12341234 # points to incorrect instruction
AFAIK, ARM's ISA would have a lot less trouble handling this issue since it has fixed-length instructions. x86 would have a big issue with this.
My question is: Is there a framework or research paper that tackles this issue?
Many thanks