IDA PRO中汇编结构体识别

Posted 不会写代码的丝丽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDA PRO中汇编结构体识别相关的知识,希望对你有一定的参考价值。

概述

我们有如下一段代码:

#include<stdio.h>

struct My_Struct

	char name[500];
	int age;
	int height;
;

struct My_Struct obtainStruct() 
	struct My_Struct p =  "sdsdsds",2,3 ;
	printf("%s\\r\\n", p.name);
	printf("diff %d\\r\\n", (size_t)&p.age-(size_t)&p.name);
	printf("%d\\r\\n", p.height);
	return p;

int main()

    
	struct My_Struct p =obtainStruct();

	printf("%s\\r\\n", p.name);
	printf("%d\\r\\n", p.age);
	printf("%d\\r\\n", p.height);

	return 0;

我们首先把一些call调用的函数名称加上

首先我们注意到个细节 栈区有两个变量默认名称分别为var_3fc和ArgList刚好相差508个字节。而这个字节大小正好是我们定义My_Struct结构体的大小。

另外这里都是 IDA提示都是负数并且都是基于EBP进行加减得到,所以这两个数都是本地变量,而不是函数调用传入的。
举个例子:

具体原因也比较简单:
你可以参阅以下图的栈图结构:

从上图可知 栈区临时定义的变量会在EBP之下,传入的参数会在EBP之上。EBP-xxx 可以得到临时变量 ,而EBP+可以得到传入参数等。

我们打开IDA PRO的结构体视图按下insert键插入一个新的自定义结构体


在上面右键可以添加相对应字段








我们最后利用IDA 看看这段代码的本质含义:

以上是关于IDA PRO中汇编结构体识别的主要内容,如果未能解决你的问题,请参考以下文章