这次,分享的引擎我已经封装为类,调用起来会更方便点,而且此次修复了几处问题。

1:修复了像如下几处错误:
void    CMgDisasmBase::DecodeIM(int constsize,int sxt,int type) 
{
  int i;
  signed long data;
  ulong l;
  char name[TEXTLEN]={0},comment[TEXTLEN]={0};
//增加了初始化,由于作者是C程序员,而且还有变量不初始化的习惯,所以像这样的溢出比较多点
//发现的已经修复。
}

2:修改了一处循环,使其可以正确识别像如下的指令:
//第一次修复是逐一添加判别,经仔细分析代码,发现是作者疏忽判断,几次修改后,
//这次的是我比较认同的方法,即贴近原代码,又能解决BUG,基本上代码看起来变化
//了那么一点点,但是这一点点让我花了好几个小时,几次修改发现都不如愿,总觉得
//增加的代码太多^^,
0046AB8D  |.  64:A1 00000000        mov     eax, dword ptr fs:[0]

3:修复了REP指令的识别,按OD来确定。
//将REP和MOV分开,不太确定是否妥当.
00417E64  |.  F3:AB                 rep     stos dword ptr es:[edi] //这里为???
00417E66  |.  66:AB                 stos    word ptr es:[edi]

4:估计在符点指令上还有识别问题,没时间测试了,给大家放出来,喜欢的,估计能用到的就拿去用好了,放出来是为了方便需要的人.



如一本版不否,请斑竹移一下贴~~!谢谢~~!

上传的附件 MgAsmCom.rar

  • 标 题:答复
  • 作 者:bluesand
  • 时 间:2009-07-29 20:51

跟风,我也分享一个OD反汇编引擎。

跟楼主的没太大区别,vs2008的工程,c。那几个BUG也改掉了很多指令判断错误的BUG原因在于原作者把很多只需要1字节长度的变量定义为int,导致用vs2008编译后,在指令判断上出现了错误(比如对arg变量赋值0x82,由于arg变量定义成了int,导致赋值后变成了0xffffff82……把定义改为byte就好了。)

也许有人想要这个版本的吧

上传的附件 OD_DASM.rar

  • 标 题:答复
  • 作 者:bluesand
  • 时 间:2009-07-29 21:01

呃,忘了说用法了。
反汇编函数
ulong Disasm(char *src,ulong srcsize,ulong srcip, t_disasm *disasm,int disasmmode)
返回值是指令长度
src指向需要反汇编的机器码指针
srcsize机器码的总长度
srcip机器码在被调试进程的内存中的内存地址
disasm指向t_disasm结构的指针。该结构体用来存放反汇编数据。
disasmmode反汇编模式。

汇编功能:
int Assemble(char *cmd, ulong ip, t_asmmodel *model, int attempt,  int constsize, char *errtext)
返回值是指令长度
cmd指向汇编指令字符串的指针
ip该句汇编指令在远程进程内存中的地址
model指向t_asmmodel结构体的指针,用于存放汇编数据
attempt这个……我想不起来了=。= 一般是NULL
constsize立即数的长度(1、2、4字节)该参数会影响到汇编结果的长度。如果对汇编结果长度有要求,则需要设定对应的值。否则NULL即可。
errtext汇编时的出错信息。

  • 标 题:答复
  • 作 者:ccfer
  • 时 间:2009-07-31 20:00

作者用的是borland C
与VC有差异是正常的