如何覆盖每个符号在NASM中的“--prefix”选项?

问题描述:

我使用GCC编译C代码,并在Windows上与NASM汇编一些x86代码。现在如何覆盖每个符号在NASM中的“--prefix”选项?

,GCC在默认情况下(我一直没能找到一个选项来改变这一点)前添加下划线_所有外部符号名(和预期的名称)。

我需要这个汇编代码来与Windows和Linux上的GCC一起工作,并希望尽可能避免黑客行为(和代码重复;我首先有单独的用于Windows/Linux的.s文件)。

我发现了(和使用)了NASM中的--prefix标志。现在对于一些符号,我希望NASM将它们当作,而不是,它是前导下划线(现在的确切情况是我需要在没有前导下划线的情况下引用链接描述文件中的入口点)。因此,这里的问题是如何覆盖每个符号,NASM的标志--prefix/--postfix

随意将此视为XY问题。例如,如果有一种方法可以为C设置GCC的改进方案。

+0

关于“随意将此视为XY问题”。基于一些细节,我很好奇你是否正在建立一个操作系统? –

+0

@MichaelPetch - 确实:D我正在与其他人一起完成[Little OS Book](http://littleosbook.github.io/),我们希望在Windows和Linux上都能编译相同的代码,因为尽我们所能。 – Noein

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

%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__预定义宏,但它只能内部Ø f宏,而不是在程序开始。