Bas*_*emm 4 x86 assembly opcode
我仍在学习汇编并尝试将指令与其操作码连接起来.通过https://code.google.com/p/corkami/wiki/PE101?show=content阅读pdf
它只是剖析一个简单程序的PE文件,在windows中显示消息框,代码是"删除所有不相关的条目"
push 0
push Title + DATADELTA
push Caption + DATADELTA
push 0
call [__imp__MessageBoxA]
Run Code Online (Sandbox Code Playgroud)
当试图查看生成的exe文件".text"部分时,最后一次调用表示操作码"FF15",检查英特尔手册还有操作码列表http://ref.x86asm.net/coder32.html
你会发现"call"指令操作码只是"FF",那么"15"是指或来自哪个?
看看这个问题:操作码FF350E204000有什么作用?
它解释说,说明整个组FF开始:INC,DEC,CALLN,CALLF,JMPN,JMPF,PUSH.
通过查看ModR/M字节的第5位到第3位来确定该指令(例如,如果您想避免使用官方的英特尔手册,请参见此处),在您的情况下0x15(后面的字节FF).
它0x15是0001 0101二进制的,第5-3位是:( 010最左边的位是第7位,最右边的位是第0位,把它想象成一个数组).
010 在二进制中是2,这意味着你必须从列表中选择第三个元素(INC是elem no 0)[INC,DEC,CALLN,CALLF,JMPN,JMPF,PUSH].
这给你"CALLN".
所以你知道你FF 15的CALLN指令.N代表附近(而不是F/FAR)
| 归档时间: |
|
| 查看次数: |
2808 次 |
| 最近记录: |