use*_*989 4 x86 assembly reverse-engineering nasm
假设以下x86-32指令:
add ebx,1
Run Code Online (Sandbox Code Playgroud)
有(至少)两种方法来组装这个操作码:
81 c3 01 00 00 00
Run Code Online (Sandbox Code Playgroud)
要么
83 c3 01
Run Code Online (Sandbox Code Playgroud)
第一个保持1作为4字节dword,第二个保持1作为字节
是否有一个指令将1保持为2个字节?如果没有原因?
小智 12
你偶然发现了x86指令集的怪癖.英特尔在主干下包含一组指令83,其第一个操作数是类型Ev,第二个操作数是一个立即字节,被解释为与Ev操作数相同的大小.因此83 c3 01,它01被解释为32位值; 对于66 83 c3 01,01被解释为16位值(目标是16位ax寄存器).push在词干下编码的助记符在6A其单个操作数的大小方面表现相同.
对你的问题更广泛的答案是否定的,没有编码将16位常量解释为32位常量.
来源:我写了一个反汇编程序.