Assembly 退出系统调用不返回%ebx的内容?

Assembly 退出系统调用不返回%ebx的内容?,assembly,cpu-registers,Assembly,Cpu Registers,在Ubuntu Linux上,32位x86处理器,使用GAS编译 我遇到了一个非常奇怪的问题,%ebx寄存器的内容在我进行exit syscall时没有作为程序的状态代码返回。这是相关代码。下面是syscall之前的寄存器转储: eax 0x1 1 ecx 0x804a00c 134520844 edx 0xff 255 ebx 0x159 345 esp 0xbffff3bc

在Ubuntu Linux上,32位x86处理器,使用GAS编译

我遇到了一个非常奇怪的问题,%ebx寄存器的内容在我进行exit syscall时没有作为程序的状态代码返回。这是相关代码。下面是syscall之前的寄存器转储:

eax            0x1  1
ecx            0x804a00c  134520844
edx            0xff  255
ebx            0x159  345
esp            0xbffff3bc  0xbffff3bc
ebp            0xbffff3c0  0xbffff3c0
esi            0x0  0
edi            0x0  0
eip            0x80480c6  0x80480c6 <num_loop_end+5>
eflags         0x246  [ PF ZF IF ]
cs             0x73  115
ss             0x7b  123
ds             0x7b  123
es             0x7b  123
fs             0x0  0
gs             0x0  0
以及相关的组装代码:

   0x080480c1 <+0>:  mov    $0x1,%eax
=> 0x080480c6 <+5>:  int    $0x80

寄存器转储发生在上面的=>处。但是,我的程序没有返回345作为状态代码,而是以代码89或八进制的0131退出。这可能是什么原因造成的。请告诉我是否应该发布更多代码,尽管我不知道这会如何影响此问题。

这是完全正常的行为,请阅读手册页:

退出功能导致正常进程终止,并且 状态&0377返回到父级,请参阅wait2

0377是一个八进制值,它的等效十进制值是255。因此,任何大于255的值最终将小于按位AND运算得出的值:

345 AND 255 = 89

这就是值89的来源。

这是完全正常的行为,请阅读手册页了解:

退出功能导致正常进程终止,并且 状态&0377返回到父级,请参阅wait2

0377是一个八进制值,它的等效十进制值是255。因此,任何大于255的值最终将小于按位AND运算得出的值:

345 AND 255 = 89

这就是值89的来源。

啊,我忘了退出只返回一个字节。谢谢你纠正我的愚蠢。啊,我忘了退出只返回一个字节。谢谢你纠正我的愚蠢。