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

问题描述 投票:0回答:1

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

我遇到了一个非常奇怪的问题,其中当我进行退出系统调用时,

%ebx
寄存器的内容没有作为程序的状态代码返回。这是相关代码。这是系统调用之前的寄存器转储:

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
退出。可能是什么原因造成的。让我知道我是否应该发布更多代码,尽管我不知道这会如何影响这个问题。

linux assembly cpu-registers
1个回答
4
投票

这是完全正常的行为,请阅读

exit
的手册页:

exit()函数导致正常进程终止,并且值 status & 0377 返回给父级(参见 wait(2))。

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

345 AND 255 = 89

这就是值 89 的来源。

© www.soinside.com 2019 - 2024. All rights reserved.