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

        实验内容:修改二进制可重定位目标文件“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

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值