是否有一种或多或少可靠的方法来判断内存中某些位置的数据是处理器指令或其他数据的开头?
例如,E8 3F BD 6A 00可能是具有相对偏移量的callinstruction(E8)0x6ABD3F,或者它可能是属于某个其他指令的三个字节的数据,后跟push 0(6A 00).
我知道这个问题听起来很愚蠢,并且可能没有简单的方法,但也许指令集的设计考虑到了这个问题,也许一些简单的代码检查位置周围的+ -100字节可以给出一个很可能正确的答案.
我想知道这一点,因为我扫描程序的代码,并通过调用替换函数替换所有对某些函数的调用.它正在发挥作用,但是在某些时候,当我增加我正在替换的函数数量时,一些数据看起来就像是对该确切地址的函数调用,并且将被替换,并且这将导致程序以一种最意想不到的方式打破.我想减少这种可能性.