数据与ELF数据节-计算机系统基础题目

2023-12-24 16:36:32

????????实验内容:修改二进制可重定位目标文件“phase1.o”的数据(.data)节内容(不允许修改其他节),使其与main.o模块如下链接后运行时输出目标字符串“123456789”。

?????????实验步骤:

? ? ? ? ? ? ? ? 1. 使用objdump工具获得目标文件的汇编代码,使用readelf工具获得其重定位记录。

? ? ? ? ? ? ? ? 2.结合汇编代码和重定位信息,定位输出函数的调用参数在目标文件中的存储地址。

? ? ? ? ? ? ? ? 3.使用hexedit工具,对phase1.o模块中的数据节中相应字节进行修改。

?????????实验验证:

? ? ? ? 1.查看反汇编结果

objdump -d phase1.o > phase1.s
cat phase1.s

?? ? ? ? 2.查看可重定位信息

readelf -r phase1.o

?? ? ? ? 3.查看最终地址

? ? ? ? ? ? ? ? PC绝对地址重定位方式下,重定位后的引用符号 = 符号定义地址 -符号引用所在地址 + 重定位前引用处的初始值

? ? ? ? ? ? ? ? 绝对地址重定位方式下,重定位后的引用地址=符号定义地址 + 重定位前引用处的初始值

? ? ? ? 由1和2可知,call函数其实就为puts函数,输出字符串,偏移量为10。.data数据存放的其实就为栈中的数据,既即将打印的数据,偏移量为01 1f。

? ? ? ? 4.获取phase1.0的节头表

readelf -S phase1.o

? ? ? ? ?主要关注.data节和它的偏移地址,由图可知,它的偏移地址为60

? ? ? ? 5.查看原位置字符串内容

readelf -x.data phase1.o

????????01 1f对应位置的编码值为 1

? ? ? ? 6.修改字符串内容

hexedit phase1.o

? ? ? ? 地址为 01 1f +60 = 01 7f? 修改后即可 不过最后一个为00

文章来源:https://blog.csdn.net/axxdxzz/article/details/135182164
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。