2014-09-24 143 views
0

我一直有最奇怪的问题。在x86汇编中,出于某种原因,32位寄存器(eax,ebx等)在256处溢出,表明它们实际上是8位。例如:32位寄存器作为8位寄存器

test.s:

section .data 
section .text 

global _start 
_start: 
    mov eax, 1 
    mov ebx, 256 
    int 80h 

如果我再与nasm -felf32 -g test.s && ld -m elf_i386 -s -o test test.s编译这段代码,并运行生成的可执行文件,则返回0。同样的问题发生了EAX,ECX,EDX等。

在任何情况下,为什么32位寄存器会像8位寄存器那样工作?

回答

5

这不是寄存器缠绕,这是exit系统调用,仅使用的ebx低8位的返回码。

exit手册页:

exit()使得正常的进程终止和status & 0377值返回给父(见wait(2))。

03770xff(二进制1111 1111)八进制当量,这意味着只低8位被使用。您从wait()(在父代中)获得的内容中的其他位用于诸如子进程是否已终止,如果使用了哪个信号,是否发生了核心转储等等。