c - C 是否标准化了链接器符号命名?

标签 c x86 x86-64

当我查看 Visual C++ 链接器为 C 函数创建的符号时,它总是以下划线开头。例如 int example(int) 的符号采用 _example 形式。

我想知道这是否在 C 标准中指定?如果没有,那么我想知道这是由任何针对 x86/x64 的 C ABI 指定的吗?

我希望有人能启发我一点。

编辑:我对此感兴趣的原因是我发现下划线前缀至少在 x86 平台下非常常见。这感觉很奇怪,这会是巧合,所以我想知道是否有一些 Intel x86 ABI 或类似的东西正在定义这个?

最佳答案

正如 H2CO3 所说,标准并未指定它,但是某些调用约定在特定平台上或多或少是一致的。对于 X86,x86 Disassembly Wikibook: Calling Conventions 中有一篇不错的文章,但是这些不受标准监管(它甚至说编译器“经常”修饰函数名称,并且您应该始终检查特定编译器如何实现调用约定)。

关于c - C 是否标准化了链接器符号命名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19468573/

相关文章:

c - 使用 LD_PRELOAD 指定多个文件

linux - 使用 mmap 函数创建数组。汇编器 x86_64 AT&T

c - 编译 [警告] 多字符字符常量 [-Wmultichar] 时出错

python - SOL_有什么用?

x86 - 我如何加载所有 1's into a mmx register? Why doesn' t 这个工作?

assembly - AT&T GAS 汇编中的数组寻址。 RIP 的寄存器偏移不起作用

assembly - "There is no need to deallocate the stack at the end of the function when the inner-stack frame isn' t modified”,但在这种情况下正在修改

c - 不同文件中的相同静态变量

c - 为什么/*comment*/inserted randomly inside C code 只在某些地方有效,而不是在所有地方?

c - 为什么 "movl $1, %edx"而不是 "movl $0, %edx"