【发布时间】:2020-01-18 23:25:17
【问题描述】:
我的初学者书籍“Assembly Language Step-by-Step”中的说明有
线路:mov eax,0FFFFFFFFh。在将程序新加载到调试器 'Insight' 后,eax 的值开始为 0x0,但在行 mov eax, 0FFFFFFFFh eax 之后变为0xccffffff 如 Insight 中的 Registers 窗口所述。
作为测试,我尝试了mov eax,02Dh,它变成了 0xcc00002d。
我研究了0xcc,发现了关于INT3的信息: https://en.wikipedia.org/wiki/INT_(x86_instruction)#INT3 达到了我的理解极限。我所了解的是 INT3 的操作码是 0xCC ,它与调试有关。我正在调试,但这对 0xFFFFFFFF 的前两个 0xFFH 是不礼貌的,因此我当然希望 NASM 不会允许这样。
不确定是因为我运行的是 x86-64 还是特定于我的处理器的东西。我的操作系统是 Linux。
沙盒.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
制作文件
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
【问题讨论】: