[Uebersetzterbau 1] exitcode bei syscall

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

[Uebersetzterbau 1] exitcode bei syscall
Hi,

beim fast fertigen Compiler habe ich noch ein Problem:

Startroutine:

  4 _start:
  5         call main
  6         movl %eax, %ebx # exit code == main return value (in eax)
  7         movl $1, %eax   # syscall id 1
  8         int $0x80

ganz einfach, ruft main auf, syscall 1 exit, exit code in ebx…
nur leider bekomme ich nicht den richtigen wert als exitcode raus.
Debuggen Zeigt, dass der richtige Wert (hier 123456) in ebx steht, dann endet das Programm aber mit 64 (0100)…

Vielleicht war ich heute schon zu lange drangesessen, aber das ist doch merkwuerdig oder? :smiley:

Breakpoint 1, 0x0804805a in main ()
(gdb) info registers
eax            0x0	0
ecx            0x0	0
edx            0x0	0
ebx            0x0	0
esp            0xffffdb78	0xffffdb78
ebp            0xffffdb78	0xffffdb78
esi            0x0	0
edi            0x0	0
eip            0x804805a	0x804805a <main+6>
eflags         0x286	[ PF SF IF ]
cs             0x23	35
ss             0x2b	43
ds             0x2b	43
es             0x2b	43
fs             0x0	0
gs             0x0	0
(gdb) s
Single stepping until exit from function main,
which has no line number information.
_start () at ./i386/startup.s:6
6		movl %eax, %ebx # exit code == main return value (in eax)
(gdb) 
7		movl $1, %eax   # syscall id 1
(gdb) info registers
eax            0x1e240	123456
ecx            0x0	0
edx            0x0	0
ebx            0x1e240	123456
esp            0xffffdb80	0xffffdb80
ebp            0x0	0x0
esi            0x0	0
edi            0x0	0
eip            0x804806b	0x804806b <_start+7>
eflags         0x286	[ PF SF IF ]
cs             0x23	35
ss             0x2b	43
ds             0x2b	43
es             0x2b	43
fs             0x0	0
gs             0x0	0
(gdb) s 
8		int $0x80
(gdb) info registers
eax            0x1	1
ecx            0x0	0
edx            0x0	0
ebx            0x1e240	123456
esp            0xffffdb80	0xffffdb80
ebp            0x0	0x0
esi            0x0	0
edi            0x0	0
eip            0x8048070	0x8048070 <_start+12>
eflags         0x286	[ PF SF IF ]
cs             0x23	35
ss             0x2b	43
ds             0x2b	43
es             0x2b	43
fs             0x0	0
gs             0x0	0
(gdb) s 
[Inferior 1 (process 16695) exited with code 0100]

Wenn ich mich nicht irre, dann ist der Exitcode auf maximal 255 beschränkt und alles, was darüber hinaus geht wird modulo 256 genommen, wodurch man auch auf die 64 kommt (123456 % 256).


ahhhhhhhhh :slight_smile: ja dann passts ja, danke