我可能对asmx86还不够了解,所以如果有一个显而易见的答案,我将很高兴被呈现出来。我在谷歌上搜索了一下,但没有真正搜索到“这就是你的答案!”公平地说,这可能意味着我问错了问题..
在/ in /on(这三种架构中的一种) x86英特尔架构中,我发现在我的practice.exe文件的十六进制视图中定位jmps (任何类型的)是相当容易的。所有的7c,78,79等等(对我有帮助的链接:Intelx86 http://unixwiz.net/techtips/x86-jumps.html对我来说已经足够突出了,我可以很容易的拿起它们。
我似乎不明白的是十六进制视图隐藏了我的jmp位置。
它们总是在jmp命令之后设置吗?我是不是..我不知道,没有复制或修改足够的字节来使我的作业程序工作,或者曾经有过只有十六进制的jmp,我是否会在那里找不到一个明确的翻译或对特定short_loc的引用?
如有任何帮助、相关链接和/或参考资料,将不胜感激。
(不太确定'memory-management‘是否是一个准确的标签。如果不相关,将删除。)
发布于 2015-08-09 02:30:02
如果您只是查看十六进制转储,请注意并不是所有的7C、78、79等都是跳转,因为并不是所有的都是操作码。你需要正确地拆卸。对于跳转位置,使用到当前地址(实际上是下一条指令的地址)的偏移量对相对跳转进行编码。偏移量紧跟在操作码之后,但大小取决于指令。
像往常一样,请参考官方的英特尔指令集参考。
发布于 2015-08-12 02:56:03
在短跳(条件跳转也是短的)的操作码(以及某些指令上的子码)之后,有一个单字节指向相对位置。如果该字节小于128,则必须将其添加到jmp操作码位置以查找目地。否则,您必须减去二进制补码。
在跳转附近的操作码之后有一个绝对位置(16位在16位可执行文件中,32位在32位可执行文件中或64位在64位可执行文件中)。
https://stackoverflow.com/questions/31897112
复制相似问题