链接器下——链接器实战
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,链接器实战1目标模拟嵌入式开发,编写一个"体积受限"的可执行程序,通过makefile 完成编译, 运行后打印"D.T.Software"传统的写法:test.c#include void main(
千家信息网最后更新 2026年11月01日链接器下——链接器实战
链接器实战
1目标
模拟嵌入式开发,编写一个"体积受限"的可执行程序,通过makefile 完成编译, 运行后打印"D.T.Software"
传统的写法:test.c
#include void main(){ print("D.T.Software\n"); return 0;} 今天我们采用全新的方法,达到体积最小的 目标。
2分析过程

3解决方案
1.通过内嵌汇编自定义打印函数和退出函数(INT 80H)
2.通过链接脚本自定入口函数(不依赖任何库和gcc内置功能)
3.删除可执行程序中的无用信息(无用段信息、调试信息、等)
4打印函数设计
void print(const char* s, int l){ asm volatile ( "movl $4, %%eax\n" "movl $1, %%ebx\n" "movl %0, %%ecx\n" "movl %1, %%edx\n" "int $0x80 \n" : : "r"(s), "r"(l) : "eax", "ebx", "ecx", "edx" );}5退出函数设计
void exit(int code){ asm volatile ( "movl $1, %%eax\n" "movl %0, %%ebx\n" "int $0x80 \n" : : "r"(code) : "eax", "ebx" );}6链接脚本设计
ENTRY(program)SECTIONS{ .text 0x08048000 + SIZEOF_HEADERS : { *(.text) *(.rodata) } /DISCARD/ : { *(*) }}7 makefie
CC := gccLD := ldRM := rm -frTARGET := program.outSRC := $(TARGET:.out=.c)OBJ := $(TARGET:.out=.o)LDS := $(TARGET:.out=.lds).PHONY : rebuild clean all$(TARGET) : $(OBJ) $(LDS) $(LD) -static -T $(LDS) -o $@ $< @echo "Target File ==> $@"$(OBJ) : $(SRC) $(CC) -fno-builtin -o $@ -c $^rebuild : clean allall : $(TARGET)clean : $(RM) $(TARGET) $(OBJ)最终的设计:
void print(const char* s, int l);void exit(int code);void program(){ print("D.T.Software\n", 13); exit(0);}void print(const char* s, int l){ asm volatile ( "movl $4, %%eax\n" "movl $1, %%ebx\n" "movl %0, %%ecx\n" "movl %1, %%edx\n" "int $0x80 \n" : : "r"(s), "r"(l) : "eax", "ebx", "ecx", "edx" );}void exit(int code){ asm volatile ( "movl $1, %%eax\n" "movl %0, %%ebx\n" "int $0x80 \n" : : "r"(code) : "eax", "ebx" );}编译后结果对比:(没有对比就没有伤害)
还可以使用strip命令进一步去除无用调试信息:
8指定链接选项
- -ld 命令 // GNU的链接器,将目标文件链接为可执行程序,GCC编译器集成中的一员,重要的幕后工作者
- -ld -static // 指定使用静态链接的方式来产生最终程序,而不是默认的动态链接方式。
- -gcc -fno-builtin //用于关闭GCC 内置函数的功能(GCC提供了很多内置函数(Built-in Function),它会将一些常用的C库函数替换为编译器的内置函数,以达到优化的目的)。
9总结
对于资源受限的嵌入式设备,需要考虑可执行程序的大小,通过内嵌汇编直接使用系统服务能够劈开相关库的使用可以通过如下方法控制可执行程序的体积大小。
1.最小化库的使用(必要情况下考虑自己实现相关函数)
2.自定义链接脚本,删除无用段信息
文章整理参考自狄泰课程。
函数
链接
程序
信息
编译
设计
体积
目标
脚本
最小
功能
命令
大小
嵌入式
方式
方法
编译器
实战
重要
必要
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司排名
湖北九亚互联网络科技有限公司
科技和互联网公司
互联网是不是新科技
北京互联网科技公司
唐信互联网科技
九亚互联网科技
朗涯互联网科技
互联网科技股有哪些
农村开互联网科技讲堂
浙江互联网科技研学营
南平创想时代互联网科技有限公司
辽宁互联网新科技
亳州好赞互联网科技有限公司
畅思互联网科技
科技互联网的核心竞争力
互联网金融科技公司的优势
广州富喜互联网络科技
互联网领先科技宣传片
2021世界互联网领先科技成果发布
咖啡豆
伟宏互联网科技
互联网科技工作委员会
互联网科技战争
广州互联网络科技有限公司
壹账通互联网科技
易通互联网络科技有限公司
猫创互联网科技
厦门比较好的科技互联网公司
互联网第三次科技革命特征