基于arm的C++反汇编 qemu-arm环境搭建

  看雪高手写了在windows 上基于x86架构的 C++ 反汇编分析,但是没有人弄过在linux下基于arm架构的C++反汇编教程,这里尝试分析下,可以看到不管在win下还是linux下,不管基于x86还是基于arm 都遵循同样的C++标准,内存布局都是一样的。

说下运行环境:
主机Win10-64bit
主机上有一个vmware workstation 12.1
vmware 里 安装一个32bit ubuntu14.04 环境

  然后在这个ubuntu14.04 上搭建环境 为了方便这里不再从头编译而是使用网络上现成的二进制工具,参考Architectures/ARM/HowToQemu

1)下载arm-linux交叉编译工具,并且配置环境 arm-none-linux-gnueabi-gcc下载
2)下载 arm-linux 内核镜像 zImage-qemu-versatile-3.0.8-4.fc17.armv5tel
3)安装qemu-arm,这里不再编译,直接使用命令

sudo apt-get install qemu-system-arm

安装完毕即可。
4)制作根文件镜像&

反汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86反汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!
反汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS X86 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.26.00相对上一版本,增强EXE反汇编,增加dbx老邮件解析、二维码功能,;V1.25.07相对上一版本,增加二进制反汇编、IQ数据解析功能,完善MIPS反汇编,修复小BUG;V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86反汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;V1.21相对上一版本,菜单调整,完善64位ELF文件解析,解析调试信息;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!
反汇编Linux/Windows OS运行的32位/64位程序/动态库文件,CPU类型:ARM PowerPC MIPS X86 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有CORE文件解调用栈、文本比较等功能。V2.0.3相对上一版本,完善ARM64、X8664、PPC64反汇编、ko反汇编,完善反汇编文本文件比较、IQ数据解析,修复小BUG;V2.0.2相对上一版本,完善ARM64、X8664反汇编ARM64位core文件调用栈,完善文本文件比较、增加高亮、查找功能,修复小BUG;V2.0.0相对上一版本,完善ARM64反汇编ARM64位core文件调用栈,完善C++符号名字解析,支持工具运行在英文版OS;V1.26.01相对上一版本,增加ARM64反汇编、64位core文件解析;V1.26.00相对上一版本,增强EXE反汇编,增加dbx老邮件解析、二维码功能;V1.25.07相对上一版本,增加二进制反汇编、IQ数据解析功能,完善MIPS反汇编,修复小BUG;V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86反汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;V1.21相对上一版本,菜单调整,完善64位ELF文件解析,解析调试信息;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!
反汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS X86 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.26.01相对上一版本,增加ARM64反汇编、64位core文件解析;V1.26.00相对上一版本,增强EXE反汇编,增加dbx老邮件解析、二维码功能;V1.25.07相对上一版本,增加二进制反汇编、IQ数据解析功能,完善MIPS反汇编,修复小BUG;V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86反汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;V1.21相对上一版本,菜单调整,完善64位ELF文件解析,解析调试信息;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!
反汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!
<think>嗯,用户是软件工程本科毕业,刚入职芯片设计公司做芯片建模工程师,需要学习CPU/SOC硬件架构知识。之前主要学软件技术,对嵌入式和IC设计不熟悉。现在需要用C++/SystemC写Cmodel模型,后续还要用SystemC-TLM、Qemu、Gem5做性能分析和架构探索。困难在于对CPU/SOC硬件架构了解太少,需要学习路线,优先考虑RISC-V。 首先,用户背景是软件工程,可能对硬件底层了解有限,需要从基础开始。先补充计算机组成原理和数字电路的基础知识,因为这是理解CPU架构的基础。推荐书籍如《计算机组成与设计:硬件/软件接口》和《数字设计和计算机体系结构》,这两本应该能帮助用户建立硬件思维。 接下来是RISC-V指令集,用户提到优先考虑RISC-V,所以需要学习指令集架构、寄存器、指令格式、内存管理。RISC-V相比ARM结构更简单,版本统一,适合入门。推荐官方手册和《RISC-V读本》,以及实践项目如模拟器或简单CPU设计,可能用Verilog或VHDL,但用户主要用SystemC,可能需要结合两者。 然后是CPU微架构,学习流水线、缓存、分支预测、多核通信等。书籍如《计算机体系结构:量化研究方法》是经典,但可能较难,需要结合实践。推荐分析开源RISC-V实现,如Rocket Chip或BOOM,了解实际设计。 接下来是SoC架构,了解总线、外设、中断、DMA等。SystemC-TLM建模是关键,用户需要将硬件模块用SystemC抽象,进行虚拟原型开发。学习SystemC和TLM的标准文档,参考开源模型,比如在GitHub上找相关项目。 虚拟化与性能分析工具,QEMU和Gem5的使用。用户后续需要这些工具,所以需要学习配置和扩展它们,添加自定义指令或外设。Gem5的文档和教程是必须的,同时结合SystemC-TLM进行协同仿真。 实践项目方面,用户需要动手做,比如用SystemC实现简单RISC-V模型,集成到QEMU,用Gem5做性能分析。参与开源项目或公司内部项目也很重要,积累经验。 持续学习资源,关注RISC-V官网、arXiv论文、行业会议,保持技术更新。加入社区,如RISC-V国际基金会或相关论坛,交流问题。 总结学习路线分阶段:先基础,再指令集,CPU微架构,SoC,SystemC-TLM,虚拟化工具,最后实践项目。用户需要逐步构建硬件思维,同时结合现有软件技能过渡到建模。注意理论与实践结合,多动手实验,参与实际项目。遇到问题及时查资料,利用社区资源。这样可以在几个月内逐步掌握必要知识,适应工作需求。</think>我将结合你的背景(软件工程+芯片建模需求),为你梳理一条循序渐进的硬件架构学习路线,分为6个阶段: --- ### 阶段一:基础硬件知识补全(1-2个月) 1. **计算机组成原理核心** - 重点掌握:冯诺依曼架构、指令执行流程、流水线原理、内存层级结构 - 推荐教材:《计算机组成与设计:硬件/软件接口》(RISC-V版) 2. **数字电路基础** - 掌握组合逻辑电路(ALU、多路选择器)、时序电路(寄存器、状态机) - 学习工具:Verilog基础(理解即可,不需深入开发) --- ### 阶段二:RISC-V指令集精要(2-3周) 1. **指令集架构(ISA)核心** ```mermaid graph LR A[RISC-V基础] --> B[寄存器文件结构] A --> C[基础整数指令集RV32I] A --> D[内存访问指令] A --> E[特权架构等级] ``` 2. **实践工具** - 使用QEMU的RISC-V模式运行简单程序 - 通过`riscv-objdump`反汇编观察指令流 - 推荐资源:RISC-V官方手册《The RISC-V Instruction Set Manual》 --- ### 阶段三:CPU微架构实践(2-3个月) 1. **五级流水线实现** ```cpp // SystemC建模示例(取指阶段) SC_MODULE(Fetch) { sc_in<bool> clock; sc_out<uint32_t> instruction; void fetch_process() { // 模拟指令存储器访问 if (pc < IMEM_SIZE) instruction.write(imem[pc++]); } SC_CTOR(Fetch) { SC_METHOD(fetch_process); sensitive << clock.pos(); } }; ``` 2. **关键组件研究** - 分支预测器:两级自适应预测器实现 - 缓存系统:组相联缓存建模方法 - 推荐实验:在SystemC中实现带冒险检测的流水线 --- ### 阶段四:SoC系统集成(1-2个月) 1. **典型SoC组件** ```mermaid graph TB CPU_Core -->|AXI| Bus Bus --> DRAM_Controller Bus --> DMA Bus --> UART Bus --> GPIO ``` 2. **SystemC-TLM建模要点** - 使用TLM 2.0的LT(松散定时)模式 - 内存映射地址空间管理 - 事务级中断建模 --- ### 阶段五:虚拟化与性能分析(持续实践) 1. **工具链整合** ``` +------------------+ +-------------+ | SystemC Model |<--->| QEMU Fast | | (Cycle Accurate) | | (Functional)| +------------------+ +-------------+ ↓ ↓ +------------------+ +-------------+ | Gem5 (Detailed | | Performance | | Simulation) |<--->| Analysis | +------------------+ +-------------+ ``` 2. **关键技能点** - 创建带TLM接口的Gem5组件 - 使用SystemC/TLM建立虚拟原型 - 性能计数器(CPI、缓存命中率)分析方法 --- ### 阶段六:持续提升路径 1. **进阶学习资源** - 论文:ACM/IEEE MICRO、ISCA会议论文 - 开源项目:CHERI-RISC-V、OpenTitan - 工具:Verilator(用于混合仿真) 2. **能力矩阵发展** | 时间轴 | 硬件理解深度 | 建模能力层级 | |--------|--------------------|----------------------| | 3个月 | 微架构细节 | 组件级建模 | | 6个月 | 系统级交互 | 完整子系统建模 | | 1年 | 架构探索 | 性能预测模型 | --- ### 学习策略建议 1. **双线推进法**:每周分配时间给理论学习(30%)和实际建模(70%) 2. **逆向工程法**:从公司现有模型出发,通过修改参数观察行为变化 3. **工具链技巧**:掌握GDB远程调试SystemC模型、使用Waveform Viewer分析时序 建议每天保持2小时聚焦学习,结合工作需求优先突破关键模块(如先从内存子系统建模入手)。初期可暂时跳过物理实现细节(如时序收敛),重点把握架构级行为建模。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值