1

在没有 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)

4

1 回答 1

4

因为您不提供main()' 的返回值给_exit().

如果你这样做:

.globl _start

_start:
    call main
    movl %eax, %ebx
    movl $1, %eax
    int $0x80

您将返回值从eaxto保存到ebx预期的退出代码所在的位置。

于 2013-06-01T18:49:52.997 回答