- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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_init3.6.3.arm2x86_test.c:arm2x86_test_init3.6.4.arm2x86_shift.c:arm2x86_shift_init3.6.5.arm2x86_psr.c:arm2x86_psr_init3.6.6.arm2x86_movl.c:arm2x86_movl_init3.6.7.arm2x86_mul.c:arm2x86_mul_init3.6.8.arm2x86_mem.c:arm2x86_mem_init3.6.9.arm2x86_dp.c:arm2x86_dp_init3.6.10.arm2x86_coproc.c:arm2x86_coproc_init3.6.11.arm2x86_other.c:arm2x86_other_init4.翻译块(TB)4.1.概述4.2.tb.h:struct tb_s4.3.TB_TBT_SIZE和TB_TBP_SIZE4.4.tb.c:tb_memory_init4.5.tb.c:tb_insn_len_max_init5.初始化函数arm2x86.c:arm2x86_init6.翻译执行过程6.1.armemu.c:ARMul_Emulate32_dbct6.2.tb.c:tb_find6.3.tb.c:tb_get_tbp6.4.tb.c:tb_translate6.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)