【计算机系统基础】全局符号的解析

server/2024/12/2 12:16:50/

目录

1. 任务描述

2. 实验阶段 

2.1 反汇编+获取重定位记录

2.2 构建文本

2.3 验证是否完成实验目标

1. 任务描述

        针对给定的可重定位目标文件“phase1.o”(不允许修改),编写完成给定C源程序“phase1_patch.c”的内容(初始为空),进一步对其如下进行编译、生成名为“phase1_patch.o”的二进制可重定位目标文件:

gcc -fno-pie -c phase1_patch.c

        进一步,如下将phase1_patch.o模块与main.o、phase1.o模块进行链接,要求生成的可执行程序在运行时输出目标字符串“123456789”。

gcc -no-pie -o linkbomb main.o phase1.o phase1_patch.o
./linkbomb
目标字符串

注意:实验目录中的phase1-backup.o文件与未修改的phase1.o相同,供可用于重置/覆盖实验中被错误修改的phase1.o目标文件。

2. 实验阶段 

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

        ② 使用实验平台中的objdump工具获得可重定位目标模块phase1.o的反汇编代码,使用readelf工具获得目标文件中的重定位记录和符号表;

        ③ 分析汇编代码,理解程序输出目标字符串的过程;结合重定位信息、符号表获知与输出字符映射相关的符号引用情况;

        ④ 结合上述信息并依照本实验关卡的目标要求,相应在C程序模块phase1_patch.c中编写合适的数据结构(可使用vim等编辑器)

2.1 反汇编+获取重定位记录

        1. 先切换当前工作目录到目标关卡

cd /data/workspace/myshixun/step1

        2. 使用实验平台中的objdump工具获得可重定位目标模块phase1.o的反汇编代码,使用readelf工具获得目标文件中的重定位记录和符号表;

objdump -d -r phase1.o

        3. 获取符号表

readelf -s phase1.o

 

         可以看到这个函数里存放着256个可查询的字符

2.2 构建文本

vim phase1_ans.c

编写代码如下:(按“I”进入编辑模式) 

编辑完成后按“ESC”退出编辑模式,键入“:wq”保存 

gcc phase1_ans.c -std=gnu99&& ./a.out

输入上面的命令查看(-std=gnu99->C99标准)

        输入指令:

gcc -c phase1_patch.c -m32
gcc main.o phase1.o phase1_patch.o -m32
./a.out

        这里我们需要将“C”改为“1”,“D”改为“2” ,“Q”改为“3” ,“Z”改为“4” ,“H”改为“5” ,“T”改为“6” ,“S”改为“7” ,“U”改为“8” ,“R”改为“9” (可以复制到VSCode里面,通过Ctrl + F快速查找替换)

char HEnztieJvE[256] = {
'A',
'B','1','2','E','F','G','5','I','J','K','L','M','N','O','P','3',
'9','7','6','8','V','W','X','Y','4','A','B','1','2','E','F','G',
'5','I','J','K','L','M','N','O','P','3','9','7','6','8','V','W',
'X','Y','4','A','B','1','2','E','F','G','5','I','J','K','L','M',
'N','O','P','3','9','7','6','8','V','W','X','Y','4','A','B','1',
'2','E','F','G','5','I','J','K','L','M','N','O','P','3','9','7',
'6','8','V','W','X','Y','4','A','B','1','2','E','F','G','5','I',
'J','K','L','M','N','O','P','3','9','7','6','8','V','W','X','Y',
'4','A','B','1','2','E','F','G','5','I','J','K','L','M','N','O',
'P','3','9','7','6','8','V','W','X','Y','4','A','B','1','2','E',
'F','G','5','I','J','K','L','M','N','O','P','3','9','7','6','8',
'V','W','X','Y','4','A','B','1','2','E','F','G','5','I','J','K',
'L','M','N','O','P','3','9','7','6','8','V','W','X','Y','4','A',
'B','1','2','E','F','G','5','I','J','K','L','M','N','O','P','3',
'9','7','6','8','V','W','X','Y','4','A','B','1','2','E','F','G',
'5','I','J','K','L','M','N','O','P','3','9','7','6','8','V',};

        将修改好的字符数组通过vim编辑器放到phase1_patch.c文件中

vim phase1_patch.c

        编辑完成后按“ESC”退出编辑模式,键入“:wq”保存 

        重新输入指令:

gcc -c phase1_patch.c -m32
gcc main.o phase1.o phase1_patch.o -m32
./a.out

        可以看到字符已经成功被修改为“123456789” 

2.3 验证是否完成实验目标

gcc -no-pie -o linkbomb main.o phase1.o
./linkbomb

         可以看到程序的输出就是我们所期望的“123456789”,至此,实验圆满结束。 


http://www.ppmy.cn/server/146711.html

相关文章

setter方法注入(Java EE 学习笔记07)

属性setter方法注入是Spring最主流的注入方法,这种注入方法简单、直观,它是在被注入的类中声明一个setter方法,通过setter方法的参数注入对应的值。 案例: ① 创建User2实体,配置setter方法 package com.lq.entities…

RocketMQ(阿里云专有云)监控

监控易作为一款功能强大的监控工具,能够深入洞察各类IT系统的运行状态,为运维人员提供实时、准确的数据支持。针对RocketMQ(阿里云专有云)的监控,监控易设计了一系列精细的指标,以确保用户能够全面掌握消息…

C++编程:模拟实现CyberRT的DataVisitor和DataDispatcher

文章目录 0. 引言1. 设计概要1.1 主要组件1.2 类关系图1.3 工作流程 2. 代码实现2.1. 定义数据结构2.2. 实现 DataVisitor2.3. 实现 DataDispatcher2.4. 实现 Receiver2.5. 实现具体的 DataVisitor2.6. 示例主程序2.7. 编译和运行 0. 引言 使用 C 实现一个类似CyberRT 架构的 …

「Mac畅玩鸿蒙与硬件33」UI互动应用篇10 - 数字猜谜游戏

本篇将带你实现一个简单的数字猜谜游戏。用户输入一个数字,应用会判断是否接近目标数字,并提供提示“高一点”或“低一点”,直到用户猜中目标数字。这个小游戏结合状态管理和用户交互,是一个入门级的互动应用示例。 关键词 UI互…

Linux 系统目录结构

Linux 系统目录结构 登录系统后,在当前命令窗口下输入命令: ls / 你会看到如下图所示: 树状目录结构: 在 Linux 或 Unix 操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。 文件系统的最顶层是由根目…

React与Ant Design入门指南

创建基于React框架使用Ant Design组件库的技术文档时,我们需要涵盖从安装到使用的各个关键步骤。以下是一份简化的技术文档草稿,它旨在帮助开发者快速上手并开始构建界面。 React与Ant Design入门指南 1. 简介 Ant Design是一个致力于提供企业级UI设计…

Python入门(19)--最终篇

战略性学习与职业发展 🌐 引言:Python的战略价值 在当今快速evolving的技术景观中,Python已经成为跨领域应用最广泛的编程语言。从人工智能到web开发,从数据科学到云计算,Python展现出令人惊叹的适应性和影响力。 学…

AI前景分析展望——GPTo1 SoraAI

引言 人工智能(AI)领域的飞速发展已不仅仅局限于学术研究,它已渗透到各个行业,影响着从生产制造到创意产业的方方面面。在这场技术革新的浪潮中,一些领先的AI模型,像Sora和OpenAI的O1,凭借其强大…