IDA 技巧(60) IDA 的类型库

admin 2024年10月27日22:04:30评论16 views字数 1317阅读4分23秒阅读模式

类型库是为特定平台和编译器收集的高层次类型信息的集合体,可供IDA和反编译器使用。

类型库可能包含:

  1. 函数原型,例如:

    void *__cdecl memcpy(void *, const void *Src, size_t Size);
    BOOL __stdcall EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam);
  2. 类型定义,例如:

    typedef unsigned long DWORD;
    BOOL (__stdcall *WNDENUMPROC)(HWND, LPARAM);
  3. 标准结构和枚举定义,例如:

    struct tagPOINT {
        LONG x;
        LONG y;
    };

    enum tagSCRIPTGCTYPE {
        SCRIPTGCTYPE_NORMAL = 0x0,
        SCRIPTGCTYPE_EXHAUSTIVE = 0x1,
    };
  4. 从预处理器定义(宏)组创建的合成枚举:

    enum MACRO_WM {
        WM_NULL = 0x0,
        WM_CREATE = 0x1,
        WM_DESTROY = 0x2,
        WM_MOVE = 0x3,
        WM_SIZEWAIT = 0x4,
        WM_SIZE = 0x5,
        WM_ACTIVATE = 0x6,
        WM_SETFOCUS = 0x7,
        WM_KILLFOCUS = 0x8,
        WM_SETVISIBLE = 0x9,
        [...]
    };

操作类型库

当前加载的类型库列表可以在类型库视图中查看(视图 > 打开子视图 > 类型库,或按 Shift-F11)。

IDA 技巧(60) IDA 的类型库

类型库视图

可以使用“加载类型库...”上下文菜单项或 Ins 热键加载其他库。

IDA 技巧(60) IDA 的类型库

加载类型库

加载后,可以在IDA和反编译器中使用类型库中的定义:可以在函数原型和全局变量的类型中使用这些定义(Y 热键),以及在本地类型中添加新定义时使用。

将类型导入到IDB

虽然反编译器可以在不额外操作的情况下使用加载的类型库中的类型,但在反汇编中使用它们可能需要一些额外的操作。例如,要使用标准结构或枚举,必须先将其添加到相应视图的列表中:

  1. 打开结构(Shift-F9)或枚举(Shift-F10)窗口;
  2. 从上下文菜单中选择“添加结构类型...”或“添加枚举”,或使用热键(Ins);
  3. 如果知道结构/枚举名称,请在名称字段中输入并点击确定;

IDA 技巧(60) IDA 的类型库

添加结构
  1. 如果不知道或记不住确切名称,请点击“添加标准结构”(“添加标准枚举”),并从加载的类型库中所有相应类型的列表中选择结构或枚举。与所有选择器一样,您可以使用增量搜索或过滤(Ctrl-F)。

IDA 技巧(60) IDA 的类型库

选择结构

导入后,可以在反汇编视图中使用该结构或枚举。

IDA 技巧(60) IDA 的类型库

使用结构

函数原型

当加载类型库时,名称与库中存在的原型匹配的函数将应用其原型到数据库中。

更多文章

立即关注【二进制磨剑】公众号

👉👉👉【IDA 技巧合集】👈👈👈
👉👉👉【Github 安全项目合集】👈👈👈
学习零基础学习 IDA 逆向
【课程完结!内容揭秘!】7 天打造 IDA 9.0 大师:从零基础到逆向精英
知识星球🪐

IDA 技巧(60) IDA 的类型库

原文始发于微信公众号(二进制磨剑):IDA 技巧(60) IDA 的类型库

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月27日22:04:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   IDA 技巧(60) IDA 的类型库https://cn-sec.com/archives/3320730.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息