-
-
[讨论]模拟x86指令有什么好的代码风格
-
发表于: 2016-4-27 12:35 2815
-
小弟写的ida插件。现在能虚拟出程序原始的内存情况了。例如 mov eax,[00400000]这种。可以模拟出[00400000]里面的原始内存了(还提供了统一的内存访问和内存虚拟化接口,32位机里面的内存分布方式基本都能虚拟了)。但是在虚拟x86指令的时候老出问题,一开始例如解析一条 mov eax,ebx 指令,代码是这种样子
VOID simulate_X86_operation(DISASM MyDisasm){//模仿mfc的一大堆handle
handle_General_Operation(MyDisasm);
handle_SSE_Operation(MyDisasm);
handle_VMX_Operation(MyDisasm);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;
};
VOID handle_General_Operation(DISASM MyDisasm){
if(不是常用指令)return; //自动判断是不是自己可以处理的指令
handle_mov_gereral_reg_comma_general_reg(DISASM MyDisasm);
handle_push_reg_to_stack(DISASM MyDisasm);
XXX
};
VOID handle_mov_gereral_reg1_comma_general_reg2(DISASM MyDisasm){
UINT tmp=get_general_reg2(xxx);
set_eax_according_UINT(tmp);
}
但是发现这种handle越写越大,越写越多,还好难维护啊。。求教有什么好的方式来判断指令类型啊。
顺便求一个实习地方。。小弟本科应届。
VOID simulate_X86_operation(DISASM MyDisasm){//模仿mfc的一大堆handle
handle_General_Operation(MyDisasm);
handle_SSE_Operation(MyDisasm);
handle_VMX_Operation(MyDisasm);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;
};
VOID handle_General_Operation(DISASM MyDisasm){
if(不是常用指令)return; //自动判断是不是自己可以处理的指令
handle_mov_gereral_reg_comma_general_reg(DISASM MyDisasm);
handle_push_reg_to_stack(DISASM MyDisasm);
XXX
};
VOID handle_mov_gereral_reg1_comma_general_reg2(DISASM MyDisasm){
UINT tmp=get_general_reg2(xxx);
set_eax_according_UINT(tmp);
}
但是发现这种handle越写越大,越写越多,还好难维护啊。。求教有什么好的方式来判断指令类型啊。
顺便求一个实习地方。。小弟本科应届。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: