IDA 无法识别交叉引用

逆向工程 艾达
2021-06-18 21:01:02

在 IDA 视图中,我看到(glb_SomeVar是一个字节数组):

cmp al, glb_SomeVar+22h

但是当我x找到 glb_SomeVar 的交叉引用时,我只在同一个函数中找到了另外两个匹配项:

cmp al, glb_SomeVar+0Ah
cmp al, glb_SomeVar+0Bh

有没有办法解决这个问题,比如让 IDA 重新分析选定的函数甚至整个代码?我想在其他地方,也缺少交叉引用。

2个回答

编辑 -> 全局 -> 交叉引用 -> 交叉引用深度。根据需要增加。

文档

    This value "how many bytes of an object to look at to collect
    cross references". For example we have an array:
            A       db 100 dup(0)
    If some instruction refers to the 5-th element of the array:
            mov     al,A+5
     with TD=3      we'll have no xrefs displayed
     with TD=10     we'll have this xref

   IDA.CFG parameter: MAX_TAIL

这里的“TD”指的是“尾部深度”(设置的旧名称)

我认为 IDA 6.8 中的默认交叉引用深度为 16。我首先将其增加到 32,然后增加到 1024,然后增加到 65535(因为为什么不呢)。这些都没有导致我的外部参照按预期工作,所以我一定不明白。

我正在分析一个 ARM ELF 共享对象文件。我正在查看的函数由 .init_array 段中的偏移量引用的函数调用(不确定这是否相关)。我想查看所有引用的偏移量是:

.bss:00424778 ; void *dword_424778
.bss:00424778 dword_424778    % 4

它最初被识别为 unk_424778 但我按下Y并设置类型为“void *”。

Hex Rays 显示了这个分配:

    dword_424778 = &_sF;

使用 HexRaysCodeXplorer 我按下J跳回从 Hex Rays 反汇编。它让我上线 0026D69C:

...
.text:0026D668                 LDR             R5, [R4,R2] ; unk_424758
.text:0026D66C                 ADD             R0, R5, #0x1C
.text:0026D670                 STMIA           R5, {R3,R7}
.text:0026D674                 STR             R7, [R5,#8]
.text:0026D678                 STR             R7, [R5,#0xC]
.text:0026D67C                 STR             R7, [R5,#0x10]
.text:0026D680                 STR             R7, [R5,#0x14]
.text:0026D684                 STR             R7, [R5,#0x18]
.text:0026D688                 BL              sub_26F42C
.text:0026D68C                 LDR             R2, =(off_374A30 - 0x374C20)
.text:0026D690                 LDR             R3, [SP,#0x38+var_34]
.text:0026D694                 STR             R9, [R5]
.text:0026D698                 STR             R8, [R5,#0x24]
.text:0026D69C                 STR             R11, [R5,#0x20]
...

我不太了解 ARM,但我读到 STMIA R5, {R3,R7} 将导致不可预测的行为,因为 reglist ({R3,R7}) 以比 Rn (R5) 低的寄存器开始。

问题可能与 dword_424778 位于 .bss 部分有关吗?