今天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 ; Source File : 'adler32.c'
.plt:00001198 ; Source File : 'compress.c'
.plt:00001198 ; Source File : 'crc32.c'
.plt:00001198 ; Source File : 'gzclose.c'
.plt:00001198 ; Source File : 'gzlib.c'
.plt:00001198 ; Source File : 'gzread.c'
.plt:00001198 ; Source File : 'gzwrite.c'
.plt:00001198 ; Source File : 'uncompr.c'
.plt:00001198 ; Source File : 'deflate.c'
.plt:00001198 ; Source File : 'trees.c'
.plt:00001198 ; Source File : 'zutil.c'
.plt:00001198 ; Source File : 'inflate.c'
.plt:00001198 ; Source File : 'infback.c'
.plt:00001198 ; Source File : 'inftrees.c'
.plt:00001198 ; Source File : 'inffast.c'
.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什么关系?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)