我试图在没有GLIBC的情况下编译时从main()返回一个值,但它不起作用。让我在互联网上找到这个例子:
[niko@localhost tests]$ cat stubstart.S
.globl _start
_start:
call main
movl $1, %eax
xorl %ebx, %ebx
int $0x80
[niko@localhost tests]$ cat m.c
int main(int argc,char **argv) {
return(90);
}
[niko@localhost tests]$ gcc -nostdlib stubstart.S -o m m.c
[niko@localhost tests]$ ./m
[niko@localhost tests]$ echo $?
0
[niko@localhost tests]$
现在,如果我用GLIBC编译,我得到的返回值就好了:
[niko@localhost tests]$ gcc -o mglibc m.c
[niko@localhost tests]$ ./mglibc
[niko@localhost tests]$ echo $?
90
[niko@localhost tests]$
所以,很明显,在stubstart.S中没有正确地完成返回,我该怎么做呢? (仅限Linux)
答案 0 :(得分:4)
因为您没有向main()
提供_exit()
的返回值。
如果你这样做:
.globl _start
_start:
call main
movl %eax, %ebx
movl $1, %eax
int $0x80
您将返回值从eax
保存到ebx
,其中包含预期退出代码。