2

我正在尝试使用 yasm 构建一个简单的 ELF 程序。但是,我不知道如何让它以 .TEXT 部分为目标,以便它的 VMA 地址从 0x1000 开始,而不是 0。我尝试使用 START 和 ORG 指令,但这些仅在定位时似乎有效斌,不是精灵。这可以在yasm中做到吗?

4

1 回答 1

2

这通常在 ELF 对象中是不可能的。ELF 对象是可重定位的。这意味着,它们的加载地址尚未确定。通常,您使用称为链接器的单独程序 来解析重定位并修复加载地址。您可以配置链接器使用的加载地址以及使用链接器脚本放置节的顺序。 例如,GNU 链接器链接代码的这个简单链接器脚本适用于 COM 文件:

SECTIONS {
    . = 0x0100;

    .text : {
        *(.text.startup);
        *(.text);
    }

    .data : {
        *(.data);
        *(.rodata);
    }

    .bss : {
        *(.bss);
    }
}

. = 0x0100开头的行告诉链接器将以下部分放在 address 0x100。您可以使用类似的脚本将代码放置在地址0x1000中。阅读手册了解更多详情。

于 2017-11-26T21:50:21.090 回答