能力值:
( LV3,RANK:30 )
|
-
-
2 楼
去DCD里面去找数据,然后根据DCD里面的内容定位在data当中的位置
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这个我明白,我是不明白二进制的指令怎么和汇编指令对照,_GLOBAL_OFFSET_TABLE_和0xD624都超过12位了,ida是怎么根据DC 44 9F E5这32位解码出来 LDR R4, =(_GLOBAL_OFFSET_TABLE_ - 0xD624)这条指令的?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
它的真正指令是样的:
ldr r4, [pc, 0x4dc] <==这里没到12位, 不要只看_GLOBAL_OFFSET_TABLE_和0xD624的值, 它们两个是相减的, 差肯定没有超过12位
add r4, pc, r4
|
能力值:
( LV4,RANK:40 )
|
-
-
5 楼
后面的数据是一个地址,这个数据被放在文字池里面
|
能力值:
( LV3,RANK:30 )
|
-
-
6 楼
看手册。机器码计算方式 imm8 >> 2 + current address + size of next instruction
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
[QUOTE=MaYil;1431682]它的真正指令是样的:
ldr r4, [pc, 0x4dc] <==这里没到12位, 不要只看_GLOBAL_OFFSET_TABLE_和0xD624的值, 它们两个是相减的, 差肯定没有超过12位
add r4, pc, r4...[/QUOTE]
就我这边的文件来看的话
.text:0000D618 LDR R4, =(_GLOBAL_OFFSET_TABLE_ - 0xD624)
这条指令,_GLOBAL_OFFSET_TABLE_的地址是:
.got:0004CED0 _GLOBAL_OFFSET_TABLE_ DCD 0 ; DATA XREF: .plt:00009180o
按照二进制DC 44 9F E5来解析的话,命令应该是ldr r4, [pc, 0x4dc],
但ida是怎么解析成(_GLOBAL_OFFSET_TABLE_ - 0xD624)这样的?
这就是我不明白的地方
多谢!
|
能力值:
( LV3,RANK:30 )
|
-
-
8 楼
是 imm8 >> 2 + current address + size of next instruction
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
[QUOTE=MaYil;1431682]它的真正指令是样的:
ldr r4, [pc, 0x4dc] <==这里没到12位, 不要只看_GLOBAL_OFFSET_TABLE_和0xD624的值, 它们两个是相减的, 差肯定没有超过12位
add r4, pc, r4...[/QUOTE]
明白了,[pc, 0x4dc]得到的地址是0xDAFC,这个地址的内容是:
.text:0000DAFC off_DAFC DCD _GLOBAL_OFFSET_TABLE_ - 0xD624
ida应该是根据这个解析得到的LDR R4, =(_GLOBAL_OFFSET_TABLE_ - 0xD624)
多谢解答
|
|
|