登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 66|回复: 4

IDA自动分析器

[复制链接]

89

主题

2

回帖

36

积分

网站编辑

积分
36
发表于 2025-3-25 22:24:30 | 显示全部楼层 |阅读模式

IDA自动分析器

在auto.hpp中,包含了关于IDA自动分析引擎相关的一些函数。

当加载一个新的二进制文件的时候,IDA的自动分析引擎便会开始工作。

IDA的自动分析器包含多个分析队列,每个队列有各自的优先级。当所有的分析队列都为空的时候IDA就会结束自动分析。

通过头文件中提供的接口,我们可以对自动分析器进行一些控制。此接口一般来说用的比较少。。。。。。


有的时候我们需要对自动分析引擎的状态进行判断,因为自动分析引擎的结果可能会影响到插件的使用。

这个时候可以使用auto_is_ok,该函数作用为判断分析队列是否全部为空。

 bool auto_is_ok(void);

示例代码如下:

#include <ida.hpp>
#include <idp.hpp>
#include <loader.hpp>
#include <kernwin.hpp>
#include <auto.hpp>

bool idaapi run(size_t)
{
    if (!auto_is_ok() && ask_yn(0, "The autoanalysis has not finished yet.\nDo you want to continue?") < 1)
    {
        return false;
    }

    //To do...执行功能
    msg("[IDADemo]:Test\n");
    return true;
}

还有一种情况是我们通过其它的API,比如使用add_func在某处汇编代码处生成了函数或者修改了某个导入函数的参数类型,这会使得自动分析队列添加新的分析任务。

这个时候我们想要等待自动分析引擎结束工作后,再执行插件的后续步骤,可以使用如下接口。

该函数的作用是阻塞等待,直到分析队列为空。

bool auto_wait(void);

由于此函数阻塞后会使得IDA处于假死状态,我们可以在调用该函数前加上一个提示窗,示例代码如下:

#include <ida.hpp>
#include <idp.hpp>
#include <loader.hpp>
#include <kernwin.hpp>
#include <auto.hpp>

bool idaapi run(size_t)
{
    //添加某个函数使得分析队列不为空
    add_func(0x405670);

    show_wait_box("Add some Function");
    auto_wait();
    hide_wait_box();

    return true;
}

0

主题

65

回帖

203

积分

注册会员

积分
203
发表于 2025-3-26 09:00:30 | 显示全部楼层
学习中!!!
回复

使用道具 举报

0

主题

39

回帖

113

积分

注册会员

积分
113
发表于 2025-3-26 10:11:12 | 显示全部楼层
啥也不说了,楼主就是给力!
回复

使用道具 举报

0

主题

189

回帖

145

积分

注册会员

积分
145
发表于 7 天前 | 显示全部楼层
支持!!
回复

使用道具 举报

0

主题

65

回帖

203

积分

注册会员

积分
203
发表于 5 天前 | 显示全部楼层
膜拜神贴,后面的请保持队形~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|断点社区 |网站地图

GMT+8, 2025-4-3 18:49 , Processed in 0.200629 second(s), 22 queries , Yac On.

Powered by XiunoBBS

Copyright © 2001-2025, 断点社区.

快速回复 返回顶部 返回列表