gpt4 book ai didi

c - 如何覆盖每个符号 NASM 中的 `--prefix` 选项?

转载 作者:行者123 更新时间:2023-11-30 14:56:52 26 4
gpt4 key购买 nike

我正在 Windows 上使用 GCC 编译 C 代码并使用 NASM 组装一些 x86 代码。

现在,GCC 默认情况下(我无法找到更改此设置的选项)在所有外部符号名称(和预期名称)前面添加下划线 _

我需要这个汇编代码才能在 Windows 和 Linux 上与 GCC 一起使用,并希望尽可能避免黑客攻击(以及代码重复;我在 Windows/Linux 上有单独的 .s 文件,位于首先)。

我发现(并使用)了 NASM 中的 --prefix 标志。现在,对于某些符号,我希望 NASM 将它们视为不带前导下划线(现在的确切情况是我需要引用链接器脚本中不带前导下划线的入口点)。因此,这里的问题是如何覆盖每个符号的 NASM 的 --prefix/--postfix 标志。

请随意将此视为 XY 问题。例如,如果有一种方法可以为 C 设置 GCC 的修改方案,那就太好了。

最佳答案

我偶然发现了同样的问题。我创建了一个包含文件,其中包含很多定义,例如

%define printf  _printf
%define puts _puts
%define scanf _scanf

还有其他一些东西。

该文件(libc_win32.in)包含在“主”包含文件(libc.inc)中:

%ifndef LIBC_INC
%define LIBC_INC

%ifdef win32
%include 'libc_win32.inc'
%elifdef win64
%include 'libc_win64.inc'
%elifdef elf32
%include 'libc_elf32.inc'
%elifdef elf64
%include 'libc_elf64.inc'
%else
; %error "libc.inc"
%endif

%endif

我设置符号并在命令行中包含文件:

nasm -fwin32 -dwin32 -plibc.inc ...

nasm -felf32 -delf32 -plibc.inc ...

有一个名为__OUTPUT_FORMAT__的预定义宏,但它仅在宏内部起作用,而不是在程序启动时起作用。

关于c - 如何覆盖每个符号 NASM 中的 `--prefix` 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44358292/

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