我试图在编译时从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,其中期望退出代码。

07-24 09:33