文档章节

IDA如何识别ARM的main函数

我爱睡觉
 我爱睡觉
发布于 2017/06/24 17:35
字数 366
阅读 8
收藏 0
不管是动态链接还是静态链接的程序(不包括.so文件),其_start 函数都是一样的。
android 源码crtbegin_static.S中的_start函数如下(抽取重要部分):
_start:
    mov r0,sp          @取堆栈指针 sp指向main函数的参数argc(堆栈内容依次为argc,argv[],argc[])
    mov r1,#0
    adr r2,0f          @标号0地址,即执行main函数的指针
    adr r3,1f       @标号1地址,即数组指针
    b __libc_init
    .....


可以看出main函数即_start 调用_libc_init时,寄存器R2的值.

静态链接程序实例IDA的反汇编代码(加上自己的注释):

.text:000080E0 ; Attributes: bp-based frame
.text:000080E0
.text:000080E0 EXPORT start
.text:000080E0 start
.text:000080E0
.text:000080E0 preinit_array= -0x14
.text:000080E0 init_array= -0x10
.text:000080E0 fini_array= -0xC
.text:000080E0 ctors= -8
.text:000080E0
.text:000080E0 LDR     R12, =(dword_1DFF4 - 0x80FC)
.text:000080E4 STMFD   SP!, {R11,LR}
.text:000080E8 LDR     R3, =0xFFFFFF68
.text:000080EC ADD     R11, SP, #4
.text:000080F0 SUB     SP, SP, #0x10
.text:000080F4 ADD     R12, PC, R12 ; dword_1DFF4
.text:000080F8 LDR     R3, [R12,R3]
.text:000080FC STR     R3, [R11,#preinit_array]        ; unk_1df00
.text:00008100 LDR     R3, =0xFFFFFF6C
.text:00008104 ADD     R0, R11, #4
.text:00008108 LDR     R3, [R12,R3]
.text:0000810C STR     R3, [R11,#init_array]           ; unk_1def4
.text:00008110 LDR     R3, =0xFFFFFF70
.text:00008114 MOV     R1, #0
.text:00008118 LDR     R3, [R12,R3]
.text:0000811C STR     R3, [R11,#fini_array]           ; unk_1deec
.text:00008120 LDR     R3, =0xFFFFFF74
.text:00008124 LDR     R3, [R12,R3]
.text:00008128 STR     R3, [R11,#ctors]                ; unk_1df08
.text:0000812C LDR     R3, =0xFFFFFF78
.text:00008130 LDR     R2, [R12,R3]                    ; r2 is main .
.text:00008130                                         ; r2 is 0x8240
.text:00008134 SUB     R3, R11, #-preinit_array
.text:00008138 BL      __libc_init
.text:0000813C SUB     SP, R11, #4
.text:00008140 LDMFD   SP!, {R11,PC}
.text:00008140 ; End of function start
.text:00008140
.text:00008140 ; ---------------------------------------------------------------------------

本文转载自:http://blog.csdn.net/zhangmiaoping23/article/details/39672757

我爱睡觉
粉丝 3
博文 2120
码字总数 0
作品 0
南昌
私信 提问
IDA Pro 逆向速参(链接)

IDA Pro 逆向速参(链接) 整理:PeterDocter 【 IDA】使用IDA load file功能,导入JNI.h解析【JNI 函数】 - CSDN博客 IDA Pro 导入jni.h头文件定义 - CSDN博客 [讨论]IDA中F5功能反编译安卓...

2018/01/14
0
0
使用 IDA Pro 的 REobjc 模块逆向 Objective-C 二进制文件

作者:PtGiraffe@银河安全实验室 公众号:https://mp.weixin.qq.com/s/p81UG0BKGhAeHjBuEhrx-g 最近,在使用IDA Pro研究iOS应用的过程中,我发现,虽然IDA Pro和神奇的Decompiler插件能够以超...

平安科技银河实验室
04/10
0
0
Android中Native ELF的反汇编与破解的一些经验

工具选择与使用 一般Android运行的HW有: 32Bit的ARM 64Bit的ARM64 X86 X64 对于Intel/AMD的X86/X64, 可选的工具比较多, 因为ELF运行的Host是Android, 使用静态反汇编工具Hopper Disassemble与...

sy373466062
2017/04/22
0
0
反汇编中VC++6.0中main函数的识别

如何寻找main函数的入口点,先看下mainCRTStartup的启动代码 mainCRTStartup函数在VC++6.0中的代码; //预编译宏 #else /WINMAIN/ #ifdef WPRFLAG //宽字符版控制台启动函数 void wmainCRTS...

0___0
2013/06/05
220
0
Hidden Bee恶意软件家族的定制IDA装载模块开发

     本文源自我自己受到的启发,也许将来有人会从源代码中获益。   在阅读hasherezade的关于Hidden Bee恶意程序家族的定制文件格式(本文示例)的研究时,我突然想到这个用例似乎特别适...

嘶吼RoarTalk
2018/09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌:#今日歌曲推荐# 分享The Score的单曲《Revolution》 《Revolution》- The Score 手机党少年们想听歌,请使劲儿戳(这里) @批判派...

小小编辑
今天
687
9
oracle ORA-39700: database must be opened with UPGRADE option

ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option 进程 ID: 3650 会话 ID: 29......

Tank_shu
今天
3
0
分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
聊聊DubboDefaultPropertiesEnvironmentPostProcessor

序 本文主要研究一下DubboDefaultPropertiesEnvironmentPostProcessor DubboDefaultPropertiesEnvironmentPostProcessor dubbo-spring-boot-project-2.7.3/dubbo-spring-boot-compatible/au......

go4it
昨天
2
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部