我遇到了一个奇怪的 x86-32 指令(操作码0x65
),解码为objdump
as gs
(不是%gs
但是gs
)。我是在对二进制 ( objdump -D
)进行完整线性扫描时发现的,因此解码肯定是不正确的。但是,仍然objdump
没有将其解码为(bad)
指令,因此这意味着可以遇到它,我想知道它是什么意思。
这是此指令的示例:
080484fc <_IO_stdin_used>:
80484fc: 01 00 add %eax,(%eax)
80484fe: 02 00 add (%eax),%al
8048500: 48 dec %eax
8048501: 65 gs <======================= Here!!!
8048502: 6c insb (%dx),%es:(%edi)
8048503: 6c insb (%dx),%es:(%edi)
8048504: 6f outsl %ds:(%esi),(%dx)
8048505: 20 57 6f and %dl,0x6f(%edi)
8048508: 72 6c jb 8048576 <_IO_stdin_used+0x7a>
804850a: 64 21 0a and %ecx,%fs:(%edx)
804850d: 00 44 6f 64 add %al,0x64(%edi,%ebp,2)
8048511: 67 65 20 54 68 and %dl,%gs:0x68(%si)
8048516: 69 .byte 0x69
8048517: 73 21 jae 804853a <_IO_stdin_used+0x3e>
请注意,由于%gs
寄存器屏蔽了所有其他可能的命中,因此在 Web 上搜索此指令非常困难。
那么,它是真正的“指令”还是由 产生的故障gas
?