WEB开发网
开发学院软件开发汇编语言 如何分析未文档化的数据结构 阅读

如何分析未文档化的数据结构

 2009-02-16 09:36:58 来源:WEB开发网   
核心提示:18 MOV DWORD PTR DS:[EAX+14], EDX ;// 含义:把EDX的数值赋给某结构的第6个成员变量// 19的汇编指令对应的C语言为: pUnknowStruct->member5 = 019 MOV DWORD PTR DS:[EAX+10], EDX ;// 含义:把参数5传给某结构的

18 MOV DWORD PTR DS:[EAX+14], EDX ;

// 含义:把EDX的数值赋给某结构的第6个成员变量

// 19的汇编指令对应的C语言为: pUnknowStruct->member5 = 0

19 MOV DWORD PTR DS:[EAX+10], EDX ;

// 含义:把参数5传给某结构的第10个成员变量

// 29的汇编指令对应的C语言为: pUnknowStruct->member10 = Param5

20 MOV DWORD PTR DS:[EAX+24], ECX ;

21 POP EBP

22 RET 14

3 逆出伪代码:

说明: 反汇编分析出如下关键指令

04 MOV EAX, DWORD PTR SS:[EBP+8] ;

11 MOV ECX, DWORD PTR SS:[EBP+C] ;

13 MOV ECX, DWORD PTR SS:[EBP+10] ;

15 MOV ECX, DWORD PTR SS:[EBP+14] ;

17 MOV ECX, DWORD PTR SS:[EBP+18] ;

可以看得出,该函数使用了5个参数,可以假设为: Param1...5 ;

struct UnknowStruct
{
  UNKNOWN Member1 ;
  UNKNOWN_PTR Member2 ;
  UNKNOWN_PTR Member3 ;
  UNKNOWN_PTR Member4 ;
  UNKNOWN Member5 ;
  UNKNOWN Member6 ;
  UNKNOWN Member7 ;
  UNKNOWN Member8 ;
  UNKNOWN Member9 ;
  UNKNOWN Member10 ;
} ;
struct UnknowStruct *pUnknowStruct ;
pUnknowStruct = Param1 ;
pUnknowStruct->Member1 = 0 ;
pUnknowStruct->Member3 = &pUnknowStruct->Member2 ;
pUnknowStruct->Member2 = &pUnknowStruct->Member2 ;
pUnknowStruct->Member4 = &pUnknowStruct->Member2 ;
pUnknowStrcut->Member7 = Param2 ;
pUnknowStruct->Member8 = Param3 ;
pUnknowStruct->Member9 = Param4 ;
pUnknowStruct->Member6 = 0
pUnknowStruct->Member5 = 0
pUnknowStruct->Member10 = Param5 ;
  4: 图片分析流程

获取参数流程图

结构赋值流程图

5:总结

经过反汇编分析,虽然只有22行代码,但是完成了这个结构的初始化工作,该结构的指针存放在EAX寄存器,赋值时,就是对EAX存放的地址进行偏移处理。大家可以查看流程图来思考一下。

6:遗憾

由于时间有限,未能写出下一篇: 教你如何分析结构成员变量的类型

我尽量吧~~~~~~~工作太忙了!

上一页  1 2 

Tags:如何 分析 文档

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接