在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
在八进制。可能是什么导致这一点。让我知道,如果我应该张贴更多的代码,虽然我不知道这可能会影响这个问题。
1条答案
按热度按时间bvjveswy1#
这是完全正常的行为,请阅读
exit
的手册页:exit()函数会导致正常的进程终止,并将状态值& 0377返回给父进程(参见wait(2))。
0377
是一个八进制值,它的等效十进制值是255。因此,任何大于255的值最终都会小于按位AND运算的值:字符串
这就是值89的来源。