-
-
[求助]请教各位大侠关于C语言结构识别的问题
-
发表于:
2009-3-14 18:49
5209
-
各位大侠好,小弟在分析一些bin的时候,经常遇到一些自定义结构。
例如:
struct
{
int a;
char *msg;
char word[1024];
struct XXX X1;
........
........
........
int buffer[512];
}
在ida中,如果不对程序进行比较透彻的分析,对这类结构的识别就很难办到。
我在识别结构的时候,是这样进行的:
首先根据汇编代码的初步理解,确定结构体的首地址和尾地址,这样就确定了结构体的大小,
然后在根据汇编代码的分析,逐个的确定结构体中的元素。
在理想的情况下,如在汇编代码中能较明显的分析出结构体的大小,结构体中的每个元素都在
源程序中进行了较规则的访问,这样分析出一个结构体是可行的,但是多数代码可能不理想,
如:
1。声明结构体之后,只访问了其中的某些元素,而有些元素却没有访问(这在多个程序文件
使用一个结构的情况下是很可能的),这样的话,对结构的识别就不是很好办了,例如不能完
全的确定结构的大小,继而对结构的分析出现错误。
2。对结构体的访问过于分散(例如分散在不同的函数中),不能直观的确定各个元素的关系,
从而不能确定出这个是不是一个结构体。
这种情况下,可以等同于是多个分散的变量(如在汇编代码中没有反应出通过指针+偏移的方式
访问各个元素或者结构体传参数结构体指针等等情况吧)。
但是对于重建源代码的逻辑思想或者理解源程序就存在比较大的问题,这个时候,通常的方法是
通过对程序的理解去分析出结构体,但是没有结构体可能会影响对程序的理解,在一些含有数学
运算或者驱动程序中经常见到这种情况。所以就出现了一个悖论。
这个问题困扰我有几周了,期间想过很多方法来识别,但是始终都没有找到一个好的方法,
请问各位大侠平时是怎么解决这些问题的?有没有什么好的方法或者指导性的理论?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课