将NASM程序集源代码拆分到库中

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

我想将nasm代码分割成几个文件,以便可以分别处理不同的代码。但是,我发现的唯一方法是使用nasm %include宏。例如。 main.asm文件看起来像这样,

; ---- main.asm ----
%include "./header.asm"

section .text
    global _start
_start:

    call dummy_func

    mov rax, 0x3c
    mov rdx, 0x0
    syscall

header.asm仅包含

section .text
dummy_func:
        ret

我听说过在链接过程中执行此操作的方法。我对此很感兴趣,但是找不到合适的东西。真的有可能吗?如果是这样,可以用ld完成吗?还有什么其他方法可以包含静态库? (可能还有更多的宏。但是,我不确定“宏”是否是正确的词)

nasm ld yasm
1个回答
0
投票

不需要静态库-您可以将函数声明为外部函数。在您的情况下,main.asm看起来像:

; ---- main.asm ----
section .text
    global _start
    extern dummy_func
_start:

    call dummy_func

    mov rax, 0x3c
    mov rdx, 0x0
    syscall

然后将源文件编译为目标文件:

nasm main.asm -o main.o
nasm header.asm -o header.o

然后您最终可以使用ld将2个目标文件链接到一个可执行文件中:

ld -o [desired executable name] main.o header.o

extern关键字基本上意味着函数dummy_func位于不同的目标文件中,并且包含dummy_func的目标文件必须最后链接到可执行文件中。与使用%include相比,这是一种更好的处理方式。

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