有没有一种更或多或少可靠的方法来判断内存中某个位置的数据是处理器指令的开头还是其他数据呢?
例如,
我知道这个问题听起来很傻,可能没有简单的方法,但也许指令集设计时就考虑了这个问题,也许一些简单的代码检查该位置周围的+-100个字节,可以得出一个非常可能正确的答案。
我想知道这个是因为我扫描程序的代码并用我的替换函数来取代所有调用某个函数的调用。到目前为止这样做是有效的,但不排除在我增加要替换的函数数量时,有些数据看起来恰好像是调用该地址的函数调用,并且将被替换,这将导致程序以最意外的方式崩溃。我想减少这种情况发生的概率。
例如,
E8 3F BD 6A 00
可能是相对偏移为0x6ABD3F
的 call
指令(E8
),也可能是属于另一条指令的三个字节的数据,后面跟着 push 0
(6A 00
)。我知道这个问题听起来很傻,可能没有简单的方法,但也许指令集设计时就考虑了这个问题,也许一些简单的代码检查该位置周围的+-100个字节,可以得出一个非常可能正确的答案。
我想知道这个是因为我扫描程序的代码并用我的替换函数来取代所有调用某个函数的调用。到目前为止这样做是有效的,但不排除在我增加要替换的函数数量时,有些数据看起来恰好像是调用该地址的函数调用,并且将被替换,这将导致程序以最意外的方式崩溃。我想减少这种情况发生的概率。