RASPsim是周期精确的x86-64仿真器,从PTLsim派生而来。 raspsim模拟器允许根据需要配置虚拟地址空间和初始寄存器值,开始模拟,并获取最新的寄存器状态,请求的内存转储以及模拟的周期数和指令数。
可以在最新的Linux发行版中使用make(可以选择增加并行性)来编译代码。编译已通过Fedora 31进行了测试。
这将在地址0x200000处映射一个空的4k页内存,在该地址写入一些指令字节(mov eax,0x112233; int 0x80),将指令指针rip设置到该地址。模拟输出包含新的寄存器状态。
$ ./raspsim“ M200000 rx”“ W200000 b833221100cd80”“ rip 0x200000” [...]在170个周期,2条指令和0秒的模拟时间(0 Hz模拟速率)后停止。结束状态:VCPU状态:体系结构寄存器:rax 0x0000000000112233 RCX 0x0000000000000000 RDX 0x0000000000000000 RBX 0x0000000000000000 RSP 0x0000000000000000 RBP 0x0000000000000000 RSI 0x0000000000000000 RDI 0x0000000000000000 R8 0x0000000000000000 R9 0x0000000000000000 R10 R11 0x0000000000000000 R12 0x0000000000000000 R13 0x0000000000000000 R14 0x0000000000000000 R15 0x0000000000000000 0x0000000000000000 [...]撕裂0x0000000000200007标志0x0000000000000000 dlend 0x0000000000000000 selfrip 0x0000000000200005 nextrip 0x0000000000200007 AR1 0xffffffffffffff80 AR2 0x0000000000000000零0x0000000000000000 [...]
Raspsim是使用命令行参数配置的(也支持从文件读取命令的@file语法)。处理完所有命令后,将开始仿真。当执行int 0x80或发生CPU异常时,仿真将停止。系统调用有意未实现。
重要提示:所有命令(包括空格)都必须是单个参数。从shell调用模拟器时,必须转义配置命令中的空格。
M -在具有指定访问限制的给定(页面对齐)地址处分配内存页面。 prot的有效值为ro,rw,rx。自修改代码实际上是由模拟器支持的,当第一个执行的指令位于可写页面上且引发raisesan异常时,会出现错误。因此,这不会在命令行中公开。
W -将数据写入先前分配的页面。该地址不需要页面对齐;但是,数据不能越过边界。要在多个页面上写入数据,必须使用多个写入命令。
Fnocache-禁用对缓存层次结构的仿真,所有内存访问将作为缓存命中进行仿真
-将寄存器设置为一个值。有效的寄存器名称是16个通用寄存器,rip和标志。 SSE寄存器分为高低寄存器(每个为64位),并以xmmland xmmh为前缀,后跟数字(0--15)。
//// PTLsim:精确的循环x86-64模拟器/////版权所有2000-2008 Matt T. Yourst // PTLsim是最新的精确循环的微处理器模拟器和虚拟机,用于x86和x86-64指令集。此版本的PTLsim建模了与x86-64兼容的现代推测性乱序处理器内核,缓存层次结构和支持的硬件。有关PTLsim的更多信息,请访问:http://www.ptlsim.org要开始使用,请阅读PTLsim用户指南和参考。 inptlsim / Documentation / PTLsimManual.pdf,或访问我们的网站以获取其他文档格式。PTLsim软件和手册是免费软件;它们是根据GNU通用公共许可证版本2许可的。