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

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

数据与ELF数据节-计算机系统基础题目_第1张图片

         实验步骤:

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

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

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

         实验验证:

        1.查看反汇编结果

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

数据与ELF数据节-计算机系统基础题目_第2张图片

         2.查看可重定位信息

readelf -r phase1.o

数据与ELF数据节-计算机系统基础题目_第3张图片

         3.查看最终地址

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

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

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

        4.获取phase1.0的节头表

readelf -S phase1.o

数据与ELF数据节-计算机系统基础题目_第4张图片

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

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

readelf -x.data phase1.o

数据与ELF数据节-计算机系统基础题目_第5张图片        01 1f对应位置的编码值为 1

        6.修改字符串内容

hexedit phase1.o

数据与ELF数据节-计算机系统基础题目_第6张图片

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

数据与ELF数据节-计算机系统基础题目_第7张图片

你可能感兴趣的:(汇编语言练习,开发语言)