首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Binutils LD创建大型文件

Binutils LD创建大型文件
EN

Stack Overflow用户
提问于 2016-04-15 14:10:54
回答 1查看 538关注 0票数 3

我试着创造尽可能小的ELF。我创建了这样一个测试文件(NASM语法):

代码语言:javascript
复制
SECTION .text
dd 0xdeadbeef

使用此链接器脚本:

代码语言:javascript
复制
SECTIONS {
    .text : {
        *(.text)
    }
}

然后,我检查了平面二进制文件的大小,ELF构建了两种方法:

代码语言:javascript
复制
nasm -f bin -o test test.asm

它是平面二进制,所以是4个字节。

代码语言:javascript
复制
nasm -f elf -o test.o test.asm
i686-elf-ld -Tlinker.ld test.o -o test

我期望有大约500个字节的最大值,但是结果文件是4396字节长!不过,有一个选项,名为

代码语言:javascript
复制
i686-elf-ld -Tlinker.ld test.o -o test --strip-all

4244字节还是很大。

为什么LD生成这么大的文件?有办法让它变小吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-15 16:34:30

链接器是将文本部分与最近的页面边界对齐,以便可以使用需求寻呼

代码语言:javascript
复制
$ objdump --headers -f test

test:     file format elf32-i386
architecture: i386, flags 0x00000102:
EXEC_P, D_PAGED
start address 0x00000000

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000004  00000000  00000000  00001000  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE

注意,文本部分的“对齐”列设置为4KB。由于对齐设置为4Kb,并且正在使用需求分页(D_PAGED),所以.text部分位于文件中4Kb。您的文本部分只有4个字节长。

链接到-n以禁用需求分页:

代码语言:javascript
复制
$ ld -Tlinker.ld test.o -o test --strip-all -n
$ objdump --headers -f test

test:     file format elf32-i386
architecture: i386, flags 0x00000002:
EXEC_P
start address 0x00000000

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000004  00000000  00000000  00000060  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
$ ls -l test
-rwxrwxr-x 1 mikel mikel 240 Apr 15 12:31 test
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36649501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档