我仍在学习汇编并尝试将指令与其操作码连接起来。阅读 pdf 在https://code.google.com/p/corkami/wiki/PE101?show=content https://code.google.com/p/corkami/wiki/PE101?show=content
它只是剖析了一个在Windows中显示消息框的简单程序的PE文件,代码是“删除所有不相关的条目”
push 0
push Title + DATADELTA
push Caption + DATADELTA
push 0
call [__imp__MessageBoxA]
当尝试查看生成的 exe 文件“.text”部分时,最后一次调用用操作码“FF15”表示,请检查英特尔手册以及此处的操作码列表http://ref.x86asm.net/coder32.html http://ref.x86asm.net/coder32.html
你会发现“call”指令的操作码只是“FF”,那么“15”指的是或来自什么呢?
看看这个问题:操作码 FF350E204000 的作用是什么? https://stackoverflow.com/questions/15209993/what-does-opcode-ff350e204000-do?rq=1
它解释了整组指令以 FF 开头:INC
, DEC
, CALLN
, CALLF
, JMPN
, JMPF
, PUSH
.
该指令是通过查看 ModR/M 字节的位 5 到 3 来确定的(参见例如here http://wiki.osdev.org/X86-64_Instruction_Encoding#ModR.2FM如果你想避免官方英特尔手册),那就是你的情况,0x15
(后面的字节FF
).
The 0x15
is 0001 0101
以二进制表示,第 5-3 位是:010
(最左边的位是第 7 位,最右边的位是第 0 位,将其视为一个数组)。
010
二进制为 2,这意味着您必须从列表中选择第三个元素(INC 是 elem no 0)[INC、DEC、CALLN、CALLF、JMPN、JMPF、PUSH]。
这会给你“CALLN”。
所以你知道你的FF 15
is a CALLN
操作说明。 N 代表近(与 F / FAR 相反)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)