2012-03-16 59 views
1

在Ubuntu Linux操作系統,32位x86處理器,配氣編譯退出系統調用不返回%ebx的內容?

我碰到一個很奇怪的問題,其中%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作爲狀態代碼,而是以八進制代碼890131退出。什麼可能導致這種情況。讓我知道我是否應該發佈更多的代碼,但我不知道這會如何影響這個問題。

回答

4

這是很正常的行爲,讀取exit手冊頁:

出口()函數使正常的進程終止和 狀態& 0377被返回給父值(見等待(2))。

0377是一個八進制的值,它是等效的十進制值是255。因此,任何值大於255將會從按位最終小於AND操作:

345 AND 255 = 89 

這也正是價值89來自。

+0

啊我忘了exit()只返回一個字節。感謝您糾正我的愚蠢。 – Jumhyn 2012-03-16 14:11:21