linux - 关于 GNU 链接器编辑器 "ld"的问题?

标签 linux assembly gnu

我有 2 个用 GNU as 组装的 obj 文件,它们是:

  • a.o : 我的专业
  • b.o : 一些效用函数

a.o 没有入口点。最终链接的文件将被加载到内存中,执行将跳转到其最开始的加载地址,这是 a.o 的第一条指令。

现在我想用 GNU ld 将它们链接在一起。我想让 a.o 在最终文件中出现在 b.o 之前。我怎么能控制这个?我是否必须制作一个自定义部分并像这样在链接描述文件中编写:

SECTIONS
{
  . = 0x7c00;
  .text : { *(.text) }
  .my_custom_section : { *(.my_custom_section) }
  .data : { *(.data) }
  .bss  : { *(.bss) }
}

OUTPUT_FORMAT(binary)

更新

这个问题有问题吗?我发错了吗?如果是这样,请告诉我,伙计们。非常感谢。

目前,我发现输入文件的命令行顺序似乎是相关的。

如果我这样做:

ld a.o b.o -o final.bin

来自 a.o 的内容将出现在 b.o 之前。

如果我这样做:

ld b.o a.o -o final.bin

否则会是这样。

这样意味着被控制吗?

最佳答案

根据manual :

options which refer to files ... cause the file to be read at the point at which the option appears in the command line, relative to the object files and other file options

所以二进制文件中的文件顺序就是它们在命令行中出现的顺序。

因此,正如您在更新中提到的那样,意味着要受到控制。

关于linux - 关于 GNU 链接器编辑器 "ld"的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626697/

相关文章:

assembly - 无堆栈函数的跳转/跳转编译策略。 (手动使用链接注册而不是调用/返回)

c - 在哪里可以获取 gnu.org Simple Makefile 的源文件和头文件?

linux - ELF文件格式中的section和segment有什么区别

Linux cp 与变量

javascript - 找不到未定义的属性长度 - AWS EC2 实例上的 MEAN Stack Web 应用程序

winapi - 如何准备序言和结语汇编以拦截具有参数的函数?

c - 编码比不编码快多少?

c++ - g++ 既是 C++ 编译器又是链接器?

linux - 用于附加字符串元数据的自定义 ELF 部分

linux - 无法使用 extlinux (syslinux) 引导已安装的 RHEL 7.1