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中汇编结构体识别的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 使用 IDA 打开 arm 动态库文件 | 切换 IDA 中汇编代码显示样式 )
Android 逆向arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 使用 IDA 打开 arm 动态库文件 | 切换 IDA 中汇编代码显示样式 )