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.
# 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?