首页
社区
课程
招聘
[求助] 关于IDA Pro萌新分析问题
发表于: 2019-8-14 09:48 3709

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

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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 2335
活跃值: (1319)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
arm 三级流水线
2019-8-14 10:23
0
雪    币: 64
活跃值: (57)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我记得也不是很清楚,所以如果有错请指正。首先,ARM指令又是32位的,而上面的.text的数字则是十六进制,2表示32位,所以是2。ARM的三级流水线说的很清楚,但是请注意,单位是不一样的。4表示的是地址,而8则是从字节上加上去。至于为什么突然将指令32位,我觉得是0x29c没法用16位表示了把。
2019-8-20 13:58
0
雪    币: 240
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
因为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字节
2019-9-8 06:55
0
游客
登录 | 注册 方可回帖
返回
//