扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
我们可以注意到 e_type: ET_EXEC,这就是 ELF 档中对於执行档所定义的档案属性。
动态连结 VS 静态联结
在 Linux 中,执行档我们可以编程成静态联结以及动态连结,以下我们举一个简短的程序作为例子:
|
若我们执行 :
|
所产生出来的执行档 test,预设为使用动态函式库,所以我们可以用以下的指令 :
|
来得知目前该执行档共用了哪些动态函式库,以我们所举的 test 执行档来说,共用了两个动态函式库,分别为 libc.so.6 与 ld-linux.so.2。我们还可以透过下面的 file 指令,来得知该执行档的相关属性,如下:
|
not stripped 表示这个执行档还没有透过 strip 指令来把执行时用不到的符号、以及相关除错的资讯删除,举个例子来说,目前这个test 执行档大小约为 11694 bytes:
|
经过strip後,则变为 3004 bytes:
|
不过读者必须注意到一点,经过 strip 过的执行档,就无法透过其它的除错软件从里面取得函式在编程时所附的相关资讯,这些资讯对我们在除错软件时,可以提供不少的帮助,各位在应用上请自行注意。
相对於编程出来使用动态函式库的执行档 test,我们也可以做出静态联结的执行档 test:
|
透过指令 ldd,我们可以确定执行档 test 并没有使用到动态函式库:
|
再透过指令 file,可以注意到 test 目前为 statically linked,且亦尚未经过 strip:
|
相信大夥都会好奇,使用静态联结,且又没有经过 strip 删去不必要的符号的执行档的大小会是多少,透过 ls -l来看,我们发现大小变成 932358 bytes 比起静态联结的执行档大了相当多:
|
若再经过 strip,则档案大小变为 215364 bytes:
|
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者