Linux下C程序符号延迟绑定
动态库使用方式分为:隐式链接(隐式加载),编译时通过编译选项指定动态库显式链接(显式加载),通过代码调用dlopen、dlsym、dlclose 指定动态库
动态库的符号解析分为:立即绑定延迟绑定
使用方法:
隐式链接+立即绑定
-Wl,-z,now
隐式链接+延迟绑定
默认行为
显式链接+立即绑定
RTLD_NOW
显式链接+延迟绑定
RTLD_LAZY
例子:#include //gcc -g -fcf-protection=none -o hello hello.c //gcc -g -no-pie -fcf-protection=none -Wl,-z,now -o hello hello.c void hello(void) { printf("Hello, World! "); } int main(int argc, char **argv) { hello(); return 0; }readelf -r hello.o readelf -r hello objdump -d -s -j .plt -j .got.plt hello重定位是连接符号引用与符号定义的过程(符号和地址的绑定).rel.text(链接时重定位) 重定位的地方在.text段内,以offset指定具体要定位位置。在连接时候由连接器完成。注意比 较.text段前后变化。指的是比较.o文件和最终的执行文件(或者动态库文件)。就是重定位前后比 较,以上是说明了具体比较对象而已。.rel.dyn(启动时重定位) 重定位的地方在.got段内。主要是针对外部数据变量符号。例如全局数据。重定位在程序运行时定 位,一般是在.init段内。定位过程:获得符号对应value后,根据rel.dyn表中对应的offset,修 改.got表对应位置的value。另外,.rel.dyn 含义是指和dyn有关,一般是指在程序运行时候,动态 加载。区别于rel.plt,rel.plt是指和plt相关,具体是指在某个函数被调用时候加载。.rel.plt(调用时重定位) 重定位的地方在.got.plt段内(注意也是.got内,具体区分而已)。 主要是针对外部函数符号。一般 是函数首次被调用时候重定位。可看汇编,理解其首次访问是如何重定位的,实际很简单,就是 初次重定位函数地址,然后把最终函数地址放到.got.plt内,以后读取该.got.plt就直接得到最终函 数地址(参考过程说明)。 所有外部函数调用都是经过一个对应桩函数,这些桩函数都在.plt段内。.got(Global Offset Table,全局偏移表) 是Linux ELF文件中用于定位全局变量和函数的一个表。GOT表前三项是特殊的:GOT[0]本ELF动态 段(.dynamic段)的装载地址;GOT[1]本ELF的link_map数据结构描述符地址(编译时填充 0);GOT[2]_dl_runtime_resolve函数的地址(编译时填充0)。GOT的其他表项为全局变量的地址 或者为不需要延迟绑定的函数的地址。.got.plt 用于存放需要延迟绑定的函数的地址。.plt(Procedure Linkage Table,过程链接表)(延迟绑定) 是Linux ELF文件中用于延迟绑定的表,即函数第一次被调用的时候才进行绑定。因此,第一次调 用函数时开销比较大,但是其后的每次调用都只会花费一条指令和一个间接的存储器引用。其中 PLT[0]是一个特殊的表项,它跳转到动态链接器中执行。.plt 关联 GOT 项是在 .rela.plt中。.plt.got(立即绑定) 非延迟绑定的plt。.plt.got 关联 GOT 项是在 .rela.dyn。.plt.sec 启用-fcf-protection编译选项时,原先属于.plt的现在属于.plt.sec。
生活是自己的,与他人无关我们在生活中往往不能忽略他人对我们的看法想法,以至有时我们会过于在意别人的看法,而活成了别人眼中的样子,却忘记了自己的初心。我们所有的理想也好,目标也罢,最终都应该以取悦自己为目的
我们每个人努力的付出,终会换取到属于自己的收获来自五湖四海的朋友,缘分让我们相聚头条。我们每个人都是独一无二的存在。头条创作者,也是阅读者。我们每个人努力的付出,终会换取到属于自己的收获。我们每个人都是独一无二的存在。我们每个
纳米涂层的工作原理1。纳米是什么意思?什么是纳米技术?它的用途是什么,适用于哪些行业?我们经常在说纳米,那么纳米是什么意思呢?纳米是一种非常小的单位,拿米来举例,一米是由十亿纳米组成。纳米技术是在无
励志语录只有努力过才懂得努力的意义励志语录Feb26(1)礼拜六只有努力过才懂得努力的意义别人看不到的坚持痛苦当你的野心配不上你的努力的时候一定要放下脚步一步一步慢慢来来一定会得到你想要的(2)年末倒计时天谈什么苦
迎春曲之拥抱晨曦2022。2。26今天是2022年2月26日星期六,农历正月二十六走出家门告别昨天敞开心扉与晨曦来个拥抱晨曦的美丽触角会让你感到温暖和美妙享受大自然的馈赠你会愉悦心情更能体会岁月静好告别冬日的严寒和
不慕深情竞芳研,柔情款款为己容银莲花银莲花是以色列的国花,又称为复活之花,花色多彩,美如罂粟,罂粟有毒,而此花却无!银莲花的花朵有多种花色,十分的漂亮,它的花语是失去希望渐渐淡薄的爱期待被抛弃。而不同颜色的花语,它代
30岁以后,请过低配的生活你好,我是七月的小雨滴。专注女性成长与情感干货,欢迎关注,我在这陪你到老。30岁,是一个经历阅历不错的年龄段,已经渐渐褪去了稚嫩的想法,渐渐变成熟,也渐渐知道自己想要什么样的生活。
恐龙是怎么灭绝的?你知道吗?第一可能,恐龙灭绝于小行星的撞击,6534。83万年前,小行星撞击地球,带来空气污染食物短缺疾病肆虐。第二种可能,气温骤变影响恐龙的卵,白垩纪末期,恐龙蛋蛋壳有变薄的趋势临近灭绝时
我国成功发射陆地探测一号01组B星新京报快讯(记者张建林)2月27日7时44分,我国在酒泉卫星发射中心采用长征四号丙遥三十运载火箭,成功发射陆地探测一号01组B星(L波段差分干涉合成孔径雷达卫星B星)。本次发射是长
距离地面几千公里的地底是什么样的呢?前苏联探地心计划人类自古以来就想着能上天入地,随着科技的发展,人们现在可以探访月球考察火星发射火箭建立太空空间站人类已经实现了上天,那么入地呢,可以探知吗?美国曾有一部科幻电影地心游记,是法国作家
中国成功发射陆地探测一号01组B星将与A星在轨组网中新社北京2月27日电(马帅莎何家玲于泽游)2月27日7时44分,中国在酒泉卫星发射中心采用长征四号丙遥三十运载火箭,成功发射陆地探测一号01组B星(又称L波段差分干涉合成孔径雷达