首页
社区
课程
招聘
[求助]PUSH.W的疑惑?
发表于: 2014-5-27 10:23 8007

[求助]PUSH.W的疑惑?

2014-5-27 10:23
8007
今天又问大家一次。

今天IDA Pro 6.1 反汇编一个文件,这个文件是我用NDK编译的,原版Android.mk稍微修改了一下,注释了其中的LOCAL_ARM_MODE := arm。我是想编译为Thumb指令。相关信息如下:
.plt:00001198 ; File Name: F:\android\android-ndk-r8b\project\libz.so
.plt:00001198 ; Format: ELF for ARM (Shared object)
.plt:00001198 ; Needed Library 'libc.so'
.plt:00001198 ; Needed Library 'libstdc++.so'
.plt:00001198 ; Needed Library 'libm.so'
.plt:00001198 ; Shared Name 'libz.so'
.plt:00001198 ;
.plt:00001198 ; EABI version: 5
.plt:00001198 ;
.plt:00001198
.plt:00001198 ; Processor       : ARM
.plt:00001198 ; Target assembler: Generic assembler for ARM
.plt:00001198 ; Byte sex        : Little endian

其中一个函数开头如下:
.text:000020CC ; =============== S U B R O U T I N E =======================================
.text:000020CC
.text:000020CC
.text:000020CC                 EXPORT gzdopen
.text:000020CC gzdopen
.text:000020CC                 PUSH.W          {R4-R10,LR}

对应的机器码如下:
000020CC  2D E9 F0 47

但是这个跟《ARM Architecture Reference Manual(2nd Edition)》中介绍的STM机器码明显对不上啊?

不知道这个PUSH.W 和STMFD什么关系?
这个PUSH.W和PUSH什么关系?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
默认Thumb指令是16位的,指令PUSH.W中的后缀W指示编译器要把这条指令编译为32位的。
2014-5-27 11:05
0
雪    币: 5266
活跃值: (2306)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多谢,NDK默认编译为Thumb指令,那么这个PUSH.W到底是Thumb指令还是ARM指令,PUSH.W和STMFD是什么关系? 并且PUSH.W的指令编码格式是什么?
2014-5-27 15:03
0
雪    币: 53
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
2D E9 F0 47 <=> 0xE92D 0x47F0

15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0 | 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1  1  1  0  1  0  0  1  0  0  1  0  1  1  0  1 | *  x  *  x  x  x  x x x x x x x x x x
---------------------------------------------------------------------------------------
1  1  1  0  1  0  0  1  0  0  1  0  1  1  0  1 | 0  1  0  0  0  1  1 1 1 1 1 1 0 0 0 0
高16为为E92D,低16位除了13、15保留为SP、PC外,其他为1的就是要压入的寄存器,[4-10,14]

参见arm_architecture_reference_manual.pdf
A8.8.133 PUSH
2014-5-28 18:21
0
雪    币: 5266
活跃值: (2306)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
多谢!@netsniffer。
参考资料还是netsniffer的比较新,好像旧版的《ARM Architecture Reference Manual》中没有这部分,可用的为:DDI0406C_C_arm_architecture_reference_manual.pdf

A8.8.133 PUSH
Encoding T2
2014-5-29 16:41
0
游客
登录 | 注册 方可回帖
返回
//