在 IDA 视图中,我看到(glb_SomeVar
是一个字节数组):
cmp al, glb_SomeVar+22h
但是当我x找到 glb_SomeVar 的交叉引用时,我只在同一个函数中找到了另外两个匹配项:
cmp al, glb_SomeVar+0Ah
cmp al, glb_SomeVar+0Bh
有没有办法解决这个问题,比如让 IDA 重新分析选定的函数甚至整个代码?我想在其他地方,也缺少交叉引用。
在 IDA 视图中,我看到(glb_SomeVar
是一个字节数组):
cmp al, glb_SomeVar+22h
但是当我x找到 glb_SomeVar 的交叉引用时,我只在同一个函数中找到了另外两个匹配项:
cmp al, glb_SomeVar+0Ah
cmp al, glb_SomeVar+0Bh
有没有办法解决这个问题,比如让 IDA 重新分析选定的函数甚至整个代码?我想在其他地方,也缺少交叉引用。
编辑 -> 全局 -> 交叉引用 -> 交叉引用深度。根据需要增加。
从文档:
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 部分有关吗?