gpt4 book ai didi

c - 如何告诉 gcc 停止使用内置函数?

转载 作者:IT王子 更新时间:2023-10-29 00:53:46 32 4
gpt4 key购买 nike

我正在使用我自己修改过的 glibc。我在编译后的代码中看到,当我链接它时,编译器没有使用我的 glibc 中的许多标准库函数。然后我放上 -fno-builtin 标志。事情变得更好了,我可以看到许多不是从 glibc 中获取的函数现在从那里获取,例如 malloc

但是,对于许多函数,例如 mmap,编译器仍然使用一些内置代码。现在我如何要求编译器只使用 glibc 中的代码而不是使用它的内置函数?

在我的 x86-64 函数上,如果我对已编译的 glibc 执行 objdump,则生成的 mmap 函数如下。我在 glibc 源代码中找不到等效代码。

0000000000000000 <__mmap>:
0: 49 89 ca mov %rcx,%r10
3: b8 09 00 00 00 mov $0x9,%eax
8: 0f 05 syscall
a: 48 3d 01 f0 ff ff cmp $0xfffffffffffff001,%rax
10: 0f 83 00 00 00 00 jae 16 <__mmap+0x16>
16: c3 retq

最佳答案

您上面反汇编的包装器来自于 INLINE_SYSCALL 宏sysdeps/unix/sysv/linux/x86_64/sysdep.h。该宏是用于将普通函数调用转换为系统调用的“魔术胶”。

作为 glibc 构建过程的一部分,对于每个不在该体系结构的特殊异常列表中的已定义系统调用 foo,它都会生成一个函数 __foo它只包含一个 INLINE_SYSCALL 宏调用。 mmap 不在 x86_64 的异常列表中(在 sysdeps/unix/sysv/linux/x86_64/syscalls.list 中),因此它得到通用处理。

关于c - 如何告诉 gcc 停止使用内置函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10687174/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com