【android 逆向】arm if
#include <stdio.h>
void if1(int n){ //if else语句
if(n < 10){
printf("the number less than 10\n");
} else {
printf("the number greater than or equal to 10\n");
}
}
void if2(int n){ //多重if else语句
if(n < 16){
printf("he is a boy\n");
} else if(n < 30){
printf("he is a young man\n");
} else if(n < 45){
printf("he is a strong man\n");
} else{
printf("he is an old man\n");
}
}
int main(int argc, char* argv[]){
if1(5);
if2(35);
return 0;
}
.text:00008570
.text:00008570
.text:00008570
.text:00008570 if2 ; CODE XREF: main+10↓p
.text:00008570 ; __unwind {
.text:00008570 CMP R0, #0xF
.text:00008574 BLE loc_85A0 ; if arg0 <= 15 跳转
.text:00008578 CMP R0, #0x1D
.text:0000857C BLE loc_85AC ; if arg0 <= 16+13 =29
.text:00008580 CMP R0, #0x2C ; ','
.text:00008584 BLE loc_8594 ; if arg0 <= 44
.text:00008588 LDR R0, =(aHeIsAnOldMan - 0x8594) ; "he is an old man"
.text:0000858C ADD R0, PC, R0 ; "he is an old man"
.text:00008590 B puts
.text:00008594 ; ---------------------------------------------------------------------------
.text:00008594
.text:00008594 loc_8594 ; CODE XREF: if2+14↑j
.text:00008594 LDR R0, =(aHeIsAStrongMan - 0x85A0) ; "he is a strong man"
.text:00008598 ADD R0, PC, R0 ; "he is a strong man"
.text:0000859C B puts
.text:000085A0 ; ---------------------------------------------------------------------------
.text:000085A0
.text:000085A0 loc_85A0 ; CODE XREF: if2+4↑j
.text:000085A0 LDR R0, =(aHeIsABoy - 0x85AC) ; "he is a boy"
.text:000085A4 ADD R0, PC, R0 ; "he is a boy"
.text:000085A8 B puts
.text:000085AC ; ---------------------------------------------------------------------------
.text:000085AC
.text:000085AC loc_85AC ; CODE XREF: if2+C↑j
.text:000085AC LDR R0, =(aHeIsAYoungMan - 0x85B8) ; "he is a young man"
.text:000085B0 ADD R0, PC, R0 ; "he is a young man"
.text:000085B4 B puts
.text:000085B4 ; End of function if2
.text:000085B4
.text:000085B4 ; ---------------------------------------------------------------------------
.text:000085B8 off_85B8 DCD aHeIsAnOldMan - 0x8594
.text:000085B8 ; DATA XREF: if2+18↑r
.text:000085B8 ; "he is an old man"
.text:000085BC off_85BC DCD aHeIsAStrongMan - 0x85A0
.text:000085BC ; DATA XREF: if2:loc_8594↑r
.text:000085BC ; "he is a strong man"
.text:000085C0 off_85C0 DCD aHeIsABoy - 0x85AC ; DATA XREF: if2:loc_85A0↑r
.text:000085C0 ; "he is a boy"
.text:000085C4 off_85C4 DCD aHeIsAYoungMan - 0x85B8
.text:000085C4 ; DATA XREF: if2:loc_85AC↑r
.text:000085C4 ; } // starts at 8570 ; "he is a young man"
.text:000085C8
.text:000085C8 ; =============== S U B R O U T I N E =======================================
.text:000085C8
.text:000085C8
.text:000085C8 if1 ; CODE XREF: main+8↓p
.text:000085C8 ; __unwind {
.text:000085C8 CMP R0, #9
.text:000085CC BLE loc_85DC ; if arg0 <= 9 跳转
.text:000085D0 LDR R0, =(aTheNumberGreat - 0x85DC) ; "the number greater than or equal to 10"
.text:000085D4 ADD R0, PC, R0 ; "the number greater than or equal to 10"
.text:000085D8 B puts
.text:000085DC ; ---------------------------------------------------------------------------
.text:000085DC
.text:000085DC loc_85DC ; CODE XREF: if1+4↑j
.text:000085DC LDR R0, =(aTheNumberLessT - 0x85E8) ; "the number less than 10"
.text:000085E0 ADD R0, PC, R0 ; "the number less than 10"
.text:000085E4 B puts
.text:000085E4 ; End of function if1
.text:000085E4
.text:000085E4 ; ---------------------------------------------------------------------------
.text:000085E8 off_85E8 DCD aTheNumberGreat - 0x85DC
.text:000085E8 ; DATA XREF: if1+8↑r
.text:000085E8 ; "the number greater than or equal to 10"
.text:000085EC off_85EC DCD aTheNumberLessT - 0x85E8
.text:000085EC ; DATA XREF: if1:loc_85DC↑r
.text:000085EC ; } // starts at 85C8 ; "the number less than 10"
.text:000085F0
.text:000085F0 ; =============== S U B R O U T I N E =======================================
.text:000085F0
.text:000085F0
.text:000085F0 ; int __cdecl main(int argc, const char **argv, const char **envp)
.text:000085F0 main ; CODE XREF: j_main↑j
.text:000085F0 ; __unwind {
.text:000085F0 PUSH {R4,LR}
.text:000085F4 MOV R0, #5
.text:000085F8 BL if1 ; if1
.text:000085FC MOV R0, #0x23 ; '#' ; 35
.text:00008600 BL if2 ; if2
.text:00008604 MOV R0, #0
.text:00008608 POP {R4,PC}
.text:00008608 ; } // starts at 85F0
.text:00008608 ; End of function main
【android 逆向】arm if的更多相关文章
- android逆向学习小结--CrackMe_1
断断续续的总算的把android开发和逆向的这两本书看完了,虽然没有java,和android开发的基础,但总体感觉起来还是比较能接收的,毕竟都是触类旁通的.当然要深入的话还需要对这门语言的细节特性和 ...
- Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...
- 【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...
- 2021年正确的Android逆向开发学习之路
2021年正确的Android逆向开发学习之路 说明 文章首发于HURUWO的博客小站,本平台做同步备份发布.如有浏览或访问异常或者相关疑问可前往原博客下评论浏览. 原文链接 2021年正确的Andr ...
- [转]Android逆向之动态调试总结
一.在SO中关键函数上下断点 刚学逆向调试时.大多都满足于在SO中某关键函数上下断点.然后通过操作应用程序,去触发这个断点,然后进行调试 详细的步骤可以参见非虫大大的<Android软件安全与逆 ...
- Android逆向之so的半自动化逆向
因为工作需要,转型干android逆向,有几个月了.不过对于so的逆向,任然停留在,难难难的阶段,虽然上次自己还是逆向了一个15k左右的小so文件,但是,那个基本是靠,一步一步跟代码,查看堆栈信息来自 ...
- Android逆向破解表单注册程序
Android逆向破解表单注册程序 Android开发 ADT: android studio(as) 程序界面如下,注册码为6位随机数字,注册成功时弹出通知注册成功,注册失败时弹出通知注册失败. 布 ...
- Android逆向破解表单登录程序
Android逆向破解表单登录程序 Android开发 ADT: android studio(as) 程序界面如下,登录成功时弹出通知登录成功,登录失败时弹出通知登录失败. 布局代码 <?xm ...
- Android逆向之静态分析
想必打过CTF的小伙伴多多少少都触过Android逆向,所以斗哥将给大家整一期关于Android逆向的静态分析与动态分析.本期先带来Android逆向的静态分析,包括逆向工具使用.文件说明.例题解析等 ...
- Android 逆向实战篇(加密数据包破解)
1. 实战背景由于工作需要,要爬取某款App的数据,App的具体名称此处不便透露,避免他们发现并修改加密逻辑我就得重新破解了. 爬取这款App时发现,抓包抓到的数据是加密过的,如图1所示(原数据较长, ...
随机推荐
- 记一次 .NET 某物管后台服务 卡死分析
一:背景 1. 讲故事 这几个月经常被朋友问,为什么不更新这个系列了,哈哈,确实停了好久,主要还是打基础去了,分析 dump 的能力不在于会灵活使用 windbg,而是对底层知识有一个深厚的理解,比如 ...
- 搭建ceph分布式文件系统
1. 准备4台虚拟机 ceph 192.168.66.93 管理osd,mon节点 ceph-node1 192.168.66.94 osd节点 ceph-node2 192.168.66.95 ...
- TCP和UDP协议的区别以及原理
参考文章https://blog.csdn.net/weixin_38483133/article/details/123864253
- Nacos配置失败(java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance after all server)
解决: nacos服务器过载,可以删掉nacos文件夹下的data文件夹,重新启动.
- 零基础学Java(8)数组
数组 数组存储相同类型值的序列. 声明数组 数组是一种数据结构,用来存储同一类型值的集合.通过一个整型下标(index,或称索引)可以访问数组中的每一个值.例如,如果a是一个整型数组,a[i]就是数组 ...
- File类创建删除功能的方法和File类遍历目录功能
File类创建删除功能的方法 public boolean createNewFile();当且仅当具有该名称的文件尚不存在的时候,创建一个新的空文件 public boolean delete(); ...
- StringBuilder的原理
StringBuilder类 字符串拼接问题 由于String类的对象内容不可改变,所以每当进行字符串拼接的时候,总是会在内存中创建一个新的对象.例如: class Test{ public stat ...
- RabbitMQ延迟消息:死信队列 | 延迟插件 | 二合一用法+踩坑手记+最佳使用心得
前言 前段时间写过一篇: # RabbitMQ:消息丢失 | 消息重复 | 消息积压的原因+解决方案+网上学不到的使用心得 很多人加了我好友,说很喜欢这篇文章,也问了我一些问题. 因为最近工作比较忙, ...
- 不安装运行时运行.NET程序
好久没写文章了,有些同学问我公众号是不是废了?其实并没有.其实想写的东西很多很多,主要是最近公司比较忙,以及一些其他个人原因没有时间来更新文章.这几天抽空写了一点点东西,证明公众号还活着. 长久以来的 ...
- CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统
摘要:以CC2530单片机为核心器件,设计一个冷链环境信息采集系统,利用传感器技术对冷藏仓内的环境参数进行采集,上传到华为云物联网云平台,然后通过手机端或移动端进行显示,便于分析,观察冷链环境信息. ...