首页
论坛
专栏
课程

[求助] 关于IDA Pro萌新分析问题

2019-8-14 09:48 1793

[求助] 关于IDA Pro萌新分析问题

2019-8-14 09:48
1793
如上图所示:
我想问下 Arm指令是32位的那么 .text之间的距离应该是相差为4,为何是2?。是因为它是thumb指令吗?此时PC寄存器的计算是 PC=PC+4(因为此时指令为两字节)还是PC=PC+8呢?
另外指令后缀后面加了一个LDR.W 网上说是将指令变为32宽度 ,为啥要突然要变为32位?
吾X论坛感觉高手太少了,爱装X的还多。 还是看雪靠谱 


[进行中] 看雪20周年庆典报名通道开启!

最新回复 (3)
FraMeQ 2019-8-14 10:23
2
0
arm 三级流水线
Ruzces 2019-8-20 13:58
3
0
我记得也不是很清楚,所以如果有错请指正。首先,ARM指令又是32位的,而上面的.text的数字则是十六进制,2表示32位,所以是2。ARM的三级流水线说的很清楚,但是请注意,单位是不一样的。4表示的是地址,而8则是从字节上加上去。至于为什么突然将指令32位,我觉得是0x29c没法用16位表示了把。
青枫留念 2019-9-8 06:55
4
0
因为arm的汇编指令是按照这个汇编段的字节位数去占的,就像一个小于255赋值的 mov r1,#0x1,这是占两个字节也就是16个二进制位,arm汇编通常占用2字节和4字节的汇编代码,也就是16和32为二进制位,而为什么ldr要变成ldr.w呢,因为ldr本身是2字节,在使用过程中会因为位置,所带入的寄存器数量,参数大小而不够用,加上w变成ldr.w可以变成32位就是4字节提高这个ldr指令的可行性就像图中的ldrw r3,[sp,#0x18+var_10]意思是从sp寄存器{也就是r13堆栈指针}加上个函数开辟的var10空间数据和0x18的偏移位获取的32为4字节数据存储到r3寄存器,很显然,这个提取内容的完成能力ldr的二字节位置根本不够用,所以要用ldrw四字节来写,但是ldr和ldrw本身功能一样,只不过ldrw增加了ldr指令的使用范围
关于pc寄存器是这样
当处理器处于ARM状态时,每条ARM指令为4个字节,所以PC寄存器的值为当前指令地址 + 8字节
当处理器处于Thumb状态时,每条Thumb指令为2字节,所以PC寄存器的值为当前指令地址 + 4字节
游客
登录 | 注册 方可回帖
返回