静态 i386 Debian exe 崩溃

问题描述 投票:0回答:1

这个简单的测试用例:

#include <unistd.h>

void _start(void) {
        _exit(0);
}

在 Debian 12.6 i386 上运行时崩溃。

gcc -lc -nostdlib -static -Os
编译。请注意,这是在 i386 版本的 Debian 上。

在 gdb 中:

 0x804905b <_exit+59>                    call   *%gs:0x10  

$gs
为 0。

如果我删除对

_exit
的调用,它仍然会崩溃。

Debian i386 在没有 main 的情况下运行静态 exe 时会感到厌烦吗?我在 amd64 系统(带有 clang 的 FreeBSD 14.0 和 Fedora 39)上没有问题。当我有空的时候我会尝试一下 FreeBSD i386。

c debian static-linking
1个回答
0
投票

退出手册页按照以下步骤:

直到 glibc 2.3,_exit() 包装函数调用内核 同名的系统调用。 从 glibc 2.3 开始,包装函数 调用 exit_group(2),以终止 a 中的所有线程 过程。

_exit函数需要调用2.3版本glibc的库函数。我认为 debian 12.6 使用 glibc 2.3,而你提到的其他系统使用之前的版本。但是,我不确定如果是这种情况,您如何能够静态编译它。

© www.soinside.com 2019 - 2024. All rights reserved.