我试图在编译时从main()返回一个没有GLIBC的值,但它不起作用。让我在网上找到的这个例子:
[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)
最佳答案
因为您没有向main()
提供_exit()
的返回值。
如果你这样做:
.globl _start
_start:
call main
movl %eax, %ebx
movl $1, %eax
int $0x80
您将返回值从
eax
保存到ebx
,其中期望退出代码。