什么是'细分类型:Externs'在IDA意味着什么?

时间:2016-06-05 04:36:28

标签: c linker loader elf ida

我正在尝试使用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调试它时,我发现这个' extern'细分仅包含零!此段中没有除零以外的任何有效数据。此外,没有关于此细分受众群的权限的说明,看起来该细分受众群甚至不存在。

由于GOT中有DATA XREF,它可能与导入功能有关吗?但我无法找到相关文件,我想知道IDA如何识别它,以及它究竟是什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

extern不是真正的细分受众群。它是由IDA创建的伪段,用于表示其他模块中具有未知地址的符号; GOT通常包含指向那些的指针。在调试期间,它可能被.bss覆盖或由OS加载程序清除的堆栈区域,这就是你在那里看到零的原因。

答案 1 :(得分:0)

IDA上下文中的extern与C / C ++上下文略有不同。

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

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