我的初学者书籍 "Assembly Language Step-by-Step" 上的指令是 mov eax,0FFFFFFFFh
。在将程序新加载到调试器 'Insight' 中后,eax 的值开始为 0x0,但在执行 mov eax, 0FFFFFFFFh
指令后 ,'Insight' 窗口中的寄存器显示 eax 变成了 0xccffffff。
我进行了一个测试,指令是 mov eax,02Dh
,结果变成了 0xcc00002d。
我查阅了关于0xcc的信息,并发现了关于INT3的内容:https://en.wikipedia.org/wiki/INT_(x86_instruction)#INT3,但我的理解已经到达了极限。我只知道INT3的操作码是0xcc,并且与调试有关。我正在进行调试,但是这样处理0xFFFFFFFF的前两个字节0xFFH可能会导致问题,我希望NASM不会允许这样的情况发生。
我不确定是因为我正在运行x86-64还是与我的处理器有关。我的操作系统是Linux。
sandbox.asm
section .data
section .text
global _start
_start:
nop
mov eax,0FFFFFFFFh
mov ebx,02Dh
; !Reader - Important!
; !Examining values from this point!
; Not reading values past this point
dec ebx
inc eax
nop
section .bss
makefile
sandbox: sandbox.o
ld -o sandbox sandbox.o -melf_i386
sandbox.o: sandbox.asm
nasm -f elf -g -F stabs sandbox.asm
期望结果
按照本书的指示,执行该代码后,eax和ebx的显示应为:
eax 0xffffffff
ebx 0x2d
实际结果
eax 0xccffffff
ebx 0x2d