【发布时间】:2020-01-24 08:32:37
【问题描述】:
.plt :在 RE 能段中,蹦床在 plt[n] 除了 0 外,在 plt[0] 有 .got.plt 解析器链接
.got .got.plt : 在可读写的段中,只是地址
我从这篇文章中学到的: https://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/
问题
实际的 Linux shell 命令给了我不同的答案
$readelf -l /bin/bash
got.plt 不见了,02 段中的.plt.got 是什么?
我转储了两个部分(plt,plt.got)并得到了这个程序集
.plt 是 plt 我了解到的:
.plt.got ,这是干什么用的?
抱歉倾销不好,这是由
objcopy -O binary --only-section=.plt.got /bin/bash ./pltgot
objcopy -O binary --only-section=.plt /bin/bash ./plt
问题
- .plt 和 .plt.got 有什么区别
- 为什么会出现这种差异?
【问题讨论】:
-
不要发布文字图片。将您的 readelf 输出复制/粘贴到代码块中,最好只是相关部分。除此之外的好问题,但这是一个大问题。
-
感谢编辑,我担心只是感谢评论也违反规则,可能会杀死帖子。但是仍然没有答案,我认为帖子会淹没在stackoverflow中的深暗存储中。我的意思是……嗯……谢谢你的建议!我会尽量对stackoverflow编辑风格更友好。
-
现在用edit 解决您的问题还为时不晚。如果不是文字图片,我会赞成它。顺便说一句,您可以使用
objdump -d --section=.plt.got而不是先将其转储到平面二进制文件中。请参阅手册页中的-j选项。您还可以在一次调用中使用-j/--section两次来反汇编这两个部分。 -
顺便说一句,一些现代 Linux 系统(例如 Arch)使用
gcc -fno-plt编译软件包,因此在/bin/bash或其他二进制文件中没有.plt或.plt.got部分。
标签: matplotlib assembly x86-64 elf dynamic-linking