模拟器开发--地址转换(1)

Jacob Cao posted @ 2007年8月27日 15:26 in 逆向工程 with tags 模拟器 , 532 阅读

地址转换做的事就是将目标机器(被模拟的对象)上的地址空间映射到本机上。对于采用动态编译技术的模拟器来说,多数情况下这一过程可以在编译阶段完成。即执行时,直接使用本机地址空间寻址。

首先看一下什么情况要地址转换。简单的说,访问内存时就要用到地址转换。拿arm系cpu来举例,访存指令有ldr/str,且均为寄存器间接寻址。内存地址保存在寄存器中,例如

  1. ldr r0, [r1]

对于r1中保存的地址值,就需要进行地址转换。

要在编译阶段完成地址转换,就必须在编译时已知r1寄存器的值。所以有必要在编译时跟踪寄存器值的变化。

寄存器值的来源有以下几种:

*1、立即数,mov r0, #123

*2、内存,ldr r0, [r1]

3、其它寄存器,mov r0, r1

4、运算结果,add r0, r1, r2

*5、程序计数器,(pc,arm中的r15)

(*1、2、5是最初来源,3和4可以追溯到1、2、5)

对于来源于1和5的寄存器来说,其值均可在编译时确定,就可直接对其进行转换。而情况2可能就要等到执行时才知道。所以,对于来源于2的寄存器来说,需在编译时生成地址转换的代码,在执行时进行地址转换。

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter