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?
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 ja dann passts ja, danke