博文

目前显示的是标签为“Linker”的博文

Linker Scripts

图片
Linker Scripts GNU ld 支持通过使用链接器脚本来配置链接过程。链接器脚本使用特定于 GNU ld 应用程序的专用脚本语言编写。虽然 ld 并不严格要求使用链接器脚本文件,但它提供了一种更易于维护的替代方法,可以替代在命令行上将复杂的配置选项指定为参数。 链接器脚本的主要用途是指定最终可执行二进制文件的格式和布局。这与操作系统开发特别相关,因为可执行二进制文件通常需要特定的文件布局才能被某些引导加载程序识别。GNU GRUB 就是这样一种引导加载程序。 调用 ld 应用程序时,通常通过使用 -T script.ld 命令行参数来调用链接器脚本。 Keywords 下面列出了链接器脚本中使用的一些重要关键字。 ENTRY ENTRY(main) ENTRY(MultibootEntry) ENTRY 关键字用于定义应用程序的入口点,即输出文件中的第一个可执行指令。 此关键字接受链接程序/内核入口点的符号名称作为单个参数。 提供的符号名称指向的代码将是 ELF 和 PE 二进制文件中 .text 部分的第一个字节。 OUTPUT_FORMAT OUTPUT_FORMAT(elf64-x86-64) OUTPUT_FORMAT("pe-i386") OUTPUT_FORMAT 指令采用单个参数。 它指定可执行文件的输出格式。 要找出系统的 binutils 和 GCC 支持哪些输出格式,可以使用 <code="bash">objdump -i 命令。 下面详细介绍了一些常用的格式: STARTUP STARTUP(Boot.o) STARTUP(crt0.o) STARTUP 接受一个参数。它是您想要链接到可执行文件最开始位置的文件。 对于用户空间程序,这通常是 crt0.o 或 crtbegin.o。 对于内核,它通常是包含您的汇编样板的文件,用于启动堆栈,在某些情况下启动 GDT 等,然后调用您的 kmain()。 SEARCH_DIR SEARCH_DIR(Directory) 这将向您的库搜索目录添加一个路径。 -nostdlib 标志将导致在此路径中找到的任何库都被忽略。我不确定为什么,这似乎是 ld 的工作方式。 它将链接器脚本指定的搜索目录视为标准目录,因此使用 -no-default-l...