静态链接与动态链接
文章平均质量分 91
来碗阳春面吧
爱健身,爱代码
展开
-
动态链接三:延时绑定
PLTPLT是一种表结构,能够帮助我们触发符号地址的计算以及跳转到正确的符号地址上,PLT一方面可以帮助我们借用jmp指令可以实现更远范围的跳转(邓凡平P67),在程序中如果使用条件判断跳转的话,跳转到外部函数的跳转范围可能会不够。另一方面可以帮助我们实现延时绑定。结合2.3章的内容我们来分析一下位置有关码,位置无关码,plt和got的情况。接着2.3中的反汇编代码来我们来看一下main是如何通过plt调用printf的绝对地址来实现延时绑定的:Disassembly of section .plt:原创 2021-05-21 15:07:36 · 637 阅读 · 0 评论 -
动态链接二:关于动态链接与静态链接
关于动态链接为什么要使用动态链接呢?因为静态链接对计算机的内存和磁盘的空间浪费非常严重,特别是多进程操作系统情况下,程序内部除了printf,scanf,strlen这样的公共库函数,还有其他的库函数和辅助数据结构。在linux系统中,一个普通c语言静态库至少会在1MB以上,如果机器中运行多个这样的程序,浪费的磁盘空间是非常大的。比如:程序program1和program2分别包含program1.o和progarm2.o,并且他们公用lib.o这个公共模块。在静态链接的情况下,因为progarm1和pr原创 2021-05-21 15:06:39 · 808 阅读 · 0 评论 -
动态链接一:ELF文件格式
ELF是Executable and Linkable Format的缩写,Linkable:可链接,表示ELF文件是链接工作的重要参与者,Excutable:可执行,表示ELF将参与程序的执行工作,包括二进制程序的运行和.so文件的加载。图1.1 ELF文件中的Linking View和Execution View示意图通常情况下我们常见的ELF文件有:c/c++文件编译后得到的.o文件,动态库.so文件,.o和.so文件链接后得到的二进制可执行文件也是ELF文件。Art生成的可执..原创 2021-05-21 15:04:51 · 325 阅读 · 0 评论