【问题标题】:What does 'Segment type: Externs' mean in IDA?IDA 中的“Segment type: Externs”是什么意思?
【发布时间】:2016-10-04 22:39:48
【问题描述】:

我正在尝试使用 IDA pro 分析一个动态链接的 64 位 ELF 文件,我发现一个带有 extern tpye 的段,就在 .bss 之后,如下所示

extern:00000000006021C0 ; Segment type: Externs
extern:00000000006021C0 ; extern
extern:00000000006021C0 ; void free(void *ptr)
extern:00000000006021C0        extrn free:near      ; DATA XREF: .got.plt:off_602018o

但是,当我在运行时使用 gdb 调试它时,我发现这个“外部”段只包含零!此段中没有除零以外的任何有效数据。还有,这个segment的权限也没有说明,好像这个segment都不存在。

既然GOT里面有DATA XREF,那可能是跟import函数有关吧?但是找不到相关文件,不知道IDA是怎么识别的,具体是什么?

谢谢!

【问题讨论】:

    标签: c linker loader elf ida


    【解决方案1】:

    extern 不是真正的段。它是IDA创建的一个伪段,用来表示其他模块中地址未知的符号; GOT 通常包含指向这些的指针。在调试过程中,它可能会被 .bss 或 OS 加载程序清除的堆栈区域所覆盖,这就是您在那里看到零的原因。

    【讨论】:

      【解决方案2】:

      IDA 上下文中的 extern 与 C/C++ 上下文中的外部有点不同。

      在 C/C++ 中,extern 关键字用于声明一个实际上未在当前对象中定义但将可用的变量/函数/对象到二进制文件链接时。例如,当您在一个 .c 文件中定义一个数组并在多个文件中访问它时,这是适用的。

      在 IDA 的上下文中,externs 部分用于描述从 .so/.dll 文件定义 API 的内存区域。这通常是 PE 中的 IAT 和 ELF 文件中的 GOT。当 externs 部分中的对象具有已知 API 的名称时,IDA 会自动将其着色为粉红色并添加原型(如果可用)。

      【讨论】:

        猜你喜欢
        • 2021-11-29
        • 1970-01-01
        • 2015-08-20
        • 1970-01-01
        • 1970-01-01
        • 2011-04-16
        • 2020-04-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多