skyeye的动态二进制翻译.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
skyeye的动态二进制翻译

SKYEYE指令动态翻译模拟(DBCT)实现介绍 v0.0 teawater(teawater@) 转载请标明来自 修改记录: v0.0 ? ?? ???2006-06-16,v0.0版本编写完成。 ? ?? ???2006-05-27,文档创建。1.写在前面 2.概述 3.微指令 3.1.微指令的结构和初始化 3.2.微指令中的变量 3.3.微指令中的函数调用 3.4.微指令中的异常处理 3.5.微指令中的跳转 3.6.微指令分类介绍 3.6.1.概述 3.6.2.arm2x86.cp_init 3.6.3.arm2x86_test.c:arm2x86_test_init 3.6.4.arm2x86_shift.c:arm2x86_shift_init 3.6.5.arm2x86_psr.c:arm2x86_psr_init 3.6.6.arm2x86_movl.c:arm2x86_movl_init 3.6.7.arm2x86_mul.c:arm2x86_mul_init 3.6.8.arm2x86_mem.c:arm2x86_mem_init 3.6.9.arm2x86_dp.c:arm2x86_dp_init 3.6.10.arm2x86_coproc.c:arm2x86_coproc_init 3.6.11.arm2x86_other.c:arm2x86_other_init 4.翻译块(TB) 4.1.概述 4.2.tb.h:struct tb_s 4.3.TB_TBT_SIZE和TB_TBP_SIZE 4.4.tb.c:tb_memory_init 4.5.tb.c:tb_insn_len_max_init 5.初始化函数arm2x86.c:arm2x86_init 6.翻译执行过程 6.1.armemu.c:ARMul_Emulate32_dbct 6.2.tb.c:tb_find 6.3.tb.c:tb_get_tbp 6.4.tb.c:tb_translate 6.5.tb.c:translate_word 1.写在前面 本文针对skyeye-1.2-RC7-3进行编写。 关于skyeye本身结构的介绍可以参见skyeye学习笔记(/forum /gshowthreaded.php?Cat=Board=programNumber=522443page=1 amp;view=collapsedsb=5o=allfpart=)。 在下面为了方便介绍,都将SKYEYE指令动态翻译模拟简 称为DBCT。 DBCT的实现并不算是很好的,个人推荐对动态翻译有兴趣的朋友们读一下QEMU的代码。2.概述DBCT是在指令模拟思想上参照了QEMU(http://fabrice.bellard.free.fr/qemu/),但在实现上也有不同,后面进 行每个部分介绍的时候,我会依次介绍到。 DBCT就是将若干条连续的被模拟指令组成一组(称为一个翻译块TB),将每条指令根据其行为直接翻译成若干条微指令(这里跟QEMU不同,QEMU在翻译过程中有中间码存在),每条微指令代表一种操作行为并由若干条本地指令组成,最后就得到一组跟TB对应的本地指令,再在结尾增加返回指令,对这组指令开始的地址进行函数调用,就达到了指令模拟的目的。其他我所了解指令模拟方式还有最常见的直接读入一条指令,然后对指令进行解码分析,根据需要进行其操作,然后再读入下一条指令,重复刚才的工作,SKYEYE普通指令模拟方式就是这种类型。还有一种模拟方式是将要模拟的硬件行为翻译成某种语言比如C语言的函数等,然后编译执行来进行指令模拟。3.微指令3.1.微指令的结构和初始化在arm2x86_init函数中在tb_insn_len_max_init函数之前的被调用的函数都是微指令初始化函数。在DBCT代码中,每条微指令都被封装在定义在arm2x86.h的op_table_t结构中,这个结构中的op是指向这个微指令的地址,而len则是这个微指令的长度。每条微指令的的初始化都是由一个名称为get_op_xxx形式的函数来完成的,这个函数会将微指令的地址返回,用来设置在op中,而其的参数指针是用来设置len的,这些函数都会在微指令初始化函数中被调用。 在这个函数中有2个定义在arm2x86.h中的宏OP_BEGIN和OP_END,这2个宏都是X86指令。在这2个宏之间的代码就是微指令的代码。 #define OP_BEGIN(f)? ? ? ? ? ? ? ? __asm__ __volatile__ (jmp .f_teawater_op_end\n\t.f_teawater_op_begin:\n\t) #define OP_END(f)? ? ? ? ? ? ? ? __asm

文档评论(0)

yurixiang1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档