GdbArmulator源代码分析_第1页
GdbArmulator源代码分析_第2页
GdbArmulator源代码分析_第3页
GdbArmulator源代码分析_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、GdbArmulator源代码分析作者_2000摘要是自带的7模拟器,是调试程序的一个好工具而了解它的原码结构对扩展它的功能有重要意义本文介绍了从的启动到其内部运作和扩展的大部分原代码功能说明源代码用的是-50+-50-20021127和间的通迅一般和通讯有两种方式,其一是在内部直接调用模拟器的相关函数,另一方法则是用或传递协议来连接和而第一种方法是现在所真正使用 的第二种是早期使用的方法,下面就分析了函数直接调用法函数直接调用 这个方法是由修改原方法而来的,本人的描述如下*以及在是在和*的通信中起着至关重要做用的几个文件所有的调试命令最后都是通过在 里定义的一结构中的函数指针调用在中型如 _

2、的函数完成的以前这些一函数 是位于中的,是建立通讯的关键,代码修改后此目录中的文件不再有用 ,被取 而代之了以下是通讯和直接函数调用的图示要清楚的执行过程就要从它的启动说起,当你在中键入去激活后首先进行命令行解释,并将_指针指向变量,即将的调试函数集赋予,随后的函数调用堆栈如下-a _- a 这里对 调用参数进行分析处理*- a *_-_-1此函数指针实指向*- a-此函数指针是在将_指向时,通过注册_纟吉构完成挂接的*,;就在这,进行了初始化 至此被装载完毕,其后就是通过_定义在 结构中的各个函数指针来完成对它的调试工内部机制初始化从上述可知整个模拟器的初始化入口是在中的函数,那么它到底又做

3、了些什么呢?原始的 50 中的是模拟 7 的 ,而补丁代码修改了并添加了和的能力使其能够模拟 91 因 为 后 者 是 对 前 者 的 增 强 , 所 以 我 们 的 分 析 以 后 者 为 准,_ _4#1#2#3#4;#5!#6#7_;#8=_;#-9=_?;#10_,_;原始代码中的内存初始,但 现 在 无 用 #11_; 预 装 系 统 初 始 化 #12_; 协 处 理 器 初 始 #13-=;#14=1;#1591#16_,600;#17_,32;#18_;#19#20 因为这是补丁代码,难免又冗余出现 ,实际 10-11 行的两处掉用是没有实际意义的,而 12 行是协处理器的初始

4、化 ,因为并没又模拟协处理器所以此处只是以备扩展重点的初 始化过程是在一中的首先它给模拟器的核心状态结构一分配了空间,这个结构里保存了的所有方面的状态 ,包括寄存器 ,流水线状态等等并赋予初值,我们以后就用表示之然后调用_进行更近一步的设置而后者又主要完成模拟器内存结构的分配和映象的加载-_,设备的状态初始 一_你也可在这添加你的初始代码到这就完成了的 装载大家注意到18行也调用了 _这是一个,使得模拟器进行了两次内存 分配,而浪费了系统内存此处可删去是所有模拟器的关键由91 向其他移植时 又 是 首 先 要 处 理 的 的 各 个 内 存 区 是 由 _结 构 来 描 述 的 _*_*,;*

5、_*,;,;*;_; 定义在中的整个内存则是又此结构的数组_管理的91的如下_=*_,_,001000000,000400000,*24*_,_,001400000,000400000, ,_,_,002000000,000400000,*20*_,_,002400000,000001000,*!*_, _,004000000,000400000,_,_,000000000,000004000,_,_,00000000,010000000,_,_,0,0;根据 _,_将分配空间 ,加载文件原来的内存是由 释放的 ,但补丁后的代码就没了释放功能,这也是需要纠正的地方指令流加载完成后 ,就开始等待

6、的运行命令了最终_是启动指令执行的地方 _根据的要求选择用 _还是用 _来调用流水线模拟函数 _32_和_的区别就是一个单步 执行 ,一个连续执行指令 _又不停的判断 -是否为 ,如果是 ,模拟器又将停下 等待的调试而在 ,和中的函数则模拟指令预取,指令译码 ,指令执行以及数据回写的功能这三个文件时可以说时的核心! 中断的中断机制主要靠以下两个例程实现 &;1 用来检测中的各个中断标志是否置位,从而判断是否又需要中断2_当需要中断时 ,用来改变处理器模式 ,并将指向相应的中断向量在流水线函 数 _32 执行当中 ,有多处调用去检测中断而也十分简单,它仅仅判断中的四个变量 -中断使能标志 -中断

7、信号 -中断信号 -中断信号所以当你的虚拟 外设产生中断时 ,你只要调用 _即可_*=-&-;-=&0000?;-=&00?; 读写操 作无论是指令还是调试时读写内存或空间,最后都将要落到 ,这两个函数身上在原始代码中这两个函数马上就进行内存数组的读写了而补丁代码的 流程如下-a - a进行的地址转换和查询*- a 读写,读写空间非法读写 ,如地址错误 ,读操作等可以看出最后几个函数的选择是由 读写地址在相应的_结构中的读写函数指针决定的设备同步写这篇文章的初衷是让读者能很快进入的移植和扩展的实际工作中去所以这里有必 要讨论一下设备和的同步问题很显然我们模拟的设备不能太快,也不能太慢快了正常的指令流将被堵塞 ,慢了就无法反映操作系统的实时性也就是说设备的速度和指令流要有个比例关系,即要有一定的同步中有个很好的接口 _*,*它的目的就是注册你的同步例程,并且每个时钟周期即_32将调 用_查看是否需要同步你的设备也许你在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论