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中汇编结构体识别的主要内容,如果未能解决你的问题,请参考以下文章

IDA PRO中汇编结构体识别

Android 逆向arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 使用 IDA 打开 arm 动态库文件 | 切换 IDA 中汇编代码显示样式 )

Android 逆向arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 使用 IDA 打开 arm 动态库文件 | 切换 IDA 中汇编代码显示样式 )

关于ARM中汇编与C程序的混合编程的参数传递问题!

通过查看Windbg中汇编指令及内存中的值去定位软件崩溃问题

IDA Pro使用(静态分析+动态调试)