为什么调用指令操作码表示为FF15?
Why call instruction opcode is represented as FF15?
我仍在学习汇编并尝试将指令与其操作码联系起来。阅读 pdf 于
https://code.google.com/p/corkami/wiki/PE101?show=content
只是剖析了一个在windows中显示消息框的简单程序的PE文件,代码是"removing all unrelated entries"
push 0
push Title + DATADELTA
push Caption + DATADELTA
push 0
call [__imp__MessageBoxA]
当试图查看生成的 exe 文件“.text”部分时,最后一次调用是用操作码 "FF15" 表示的,检查英特尔手册也在此处列出操作码 http://ref.x86asm.net/coder32.html
您会发现 "call" 指令操作码只是 "FF",那么“15”指代或来自什么?
看看这个问题:what does opcode FF350E204000 do?
说明整组指令以FF开头:INC
、DEC
、CALLN
、CALLF
、JMPN
、JMPF
, PUSH
.
该指令是通过查看 ModR/M 字节的第 5 位到第 3 位来确定的(如果您想避免使用官方英特尔手册,请参见例如 here),在您的情况下,0x15
(FF
之后的字节)。
0x15
在二进制中是 0001 0101
并且第 5-3 位是: 010
(最左边的位是第 7 位,最右边的位是第 5 位0,把它想象成一个数组)。
010
在二进制中是 2,这意味着您必须从列表中选择第三个元素(INC 是第 0 个元素)[INC、DEC、CALLN、CALLF、JMPN、JMPF、PUSH]。
这给你 "CALLN".
所以你知道你的 FF 15
是一个 CALLN
指令。 N代表近(相对于F/FAR)
我仍在学习汇编并尝试将指令与其操作码联系起来。阅读 pdf 于 https://code.google.com/p/corkami/wiki/PE101?show=content
只是剖析了一个在windows中显示消息框的简单程序的PE文件,代码是"removing all unrelated entries"
push 0
push Title + DATADELTA
push Caption + DATADELTA
push 0
call [__imp__MessageBoxA]
当试图查看生成的 exe 文件“.text”部分时,最后一次调用是用操作码 "FF15" 表示的,检查英特尔手册也在此处列出操作码 http://ref.x86asm.net/coder32.html
您会发现 "call" 指令操作码只是 "FF",那么“15”指代或来自什么?
看看这个问题:what does opcode FF350E204000 do?
说明整组指令以FF开头:INC
、DEC
、CALLN
、CALLF
、JMPN
、JMPF
, PUSH
.
该指令是通过查看 ModR/M 字节的第 5 位到第 3 位来确定的(如果您想避免使用官方英特尔手册,请参见例如 here),在您的情况下,0x15
(FF
之后的字节)。
0x15
在二进制中是 0001 0101
并且第 5-3 位是: 010
(最左边的位是第 7 位,最右边的位是第 5 位0,把它想象成一个数组)。
010
在二进制中是 2,这意味着您必须从列表中选择第三个元素(INC 是第 0 个元素)[INC、DEC、CALLN、CALLF、JMPN、JMPF、PUSH]。
这给你 "CALLN".
所以你知道你的 FF 15
是一个 CALLN
指令。 N代表近(相对于F/FAR)