自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 adb 查看cpu处理器架构

adb shell getprop ro.product.cpu.abi

2020-04-29 19:56:44 8655

原创 IDA常用快捷键说明

IDA Pro:交互式反汇编器,是典型的递归下降反汇编器。导航条:蓝色 表示常规的指令函数黑色 节与节之间的间隙银白色 数据内容粉色 表示外部导入符号暗黄色 表示ida未识别的内容IDA主界面:IDA View三种反汇编视图:文本视图、图表视图、路径视图Hex View 十六进制窗口Imports 导入函数窗口...

2019-12-09 16:50:16 2465

原创 IDA动态调试so 指南

首先我们如果想要在调试的so的初始化JNI_OnLoad的函数里面下断点,去测试是否有反调试等操作,首先应该以启动调试模式去操作。第一步:首先以debug模式去启动调试的app程序。命令为: adb shell am start -D -n 包名/.activity名字以debug模式启动后,打开ddms工具,查看下是否有小红蜘蛛出现了,如果出现了则说明关联上了。第二步:启动a...

2019-12-06 15:12:21 1550

原创 java常用算法题之比较版本号

public static int compareVersion(String version1, String version2) { String[] s1 = version1.split("\\."); //通过\\将.进行转义 String[] s2 = version2.split("\\."); int len1 = s1.lengt...

2019-12-04 10:40:35 965 1

原创 cmp指令详解

假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H。    执行的指令是:CMP AX, BX    执行这条指令时,先做用AX中的数减去BX中的数的减法运算。    列出二进制运算式子:      0000 0000 0000 0010    - 0000 0000 0000 0011    _________________________________  ...

2019-12-03 15:00:17 25576

原创 c 函数指针的用法

如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。那么这个指针变量怎么定义呢?虽然同样是指向一个地址,但指向函数的指针变量同我们之前讲的指向变量的指针变量的定义方式是不同的。例如:int(*p)(int,...

2019-11-28 16:07:02 303

原创 C中的运算符优先级(个人理解)

一元运算符*和++的优先级是相同的,但结合律是从右向左来的,例如: total += *start++;由于按照结合律从右至左,应该先执行++再执行*解引用, 第二个由于start++ ,++符号在后面所以在执行++后,在赋给 total 的值为start未增量的值,也就是返回的是原start的值去解引用。但是此时start的值已经变成++了。...

2019-11-22 16:00:40 341

转载 C中的运算符优先级和结合性(*p++)

优先级和结合性优先级是用来标识运算符在表达式中的运算顺序的,在求解表达式的值的时候,总是先按运算符的优先次序由高到低进行操作。但是,当一个运算对象两侧的运算符的优先级别相同时,则按运算符的结合性来确定表达式的运算顺序。结合性是指同一优先级的运算符在表达式中操作的组织方向,即:当一个运算对象两侧的运算符的优先级别相同时,运算对象与运算符的结合顺序。最容易搞混的莫过于运算符优先级处于第二级...

2019-06-06 15:19:00 1940

原创 c 语言 同步与阻塞的区别

1,同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。2,异步:异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果,但也不会等待结果,函数会立即返回。实际处理这个调用结果是在完成后,通过事件(event)状态、通知和回调来通知调用者获取数据。3,阻...

2019-05-30 10:10:22 3569

原创 c 语言 获取字符串的所占内存大小

size_t my_strlen(const char *str){ char *s = (char *)str; while (*s++ ){ // 由于++与*号优先级相同 所以按自右至左执行 等价于 *(s++)--> *(s= s+1) //使s的内存指针每次加1,直到结束符为\0的时候 //printf(...

2019-05-29 16:01:03 2916

原创 字符串的引用和初始化

字符串常量可以赋值给一个字符指针或者一个字符数组,比如:/*1*/char *str = “this is a string”;/*2*/char str2[]= “this is a string”;/*3*/char str3[100] = “this is a string”;语句1将”this is a string”赋值给了字符指针str。此时,str的值为”th...

2019-05-29 10:54:34 362

原创 c语言指针的存储大小

指针是C语言中的精华。指针其实就是一个变量,和其他类型的变量一样。在32位机器上,它是一个占用四字节的变量,在64位机器上,他是一个8字节,它与其他变量的不同就在于它的值是一个内存地址,指向内存的某一个地方。即指针是一种存放另一个变量的地址的变量。...

2019-05-28 12:02:54 5052

原创 android 下v1和v2签名的区别

v1 兼容所有版本 7.0以上不安全 v1签名有RSA和SF非对称加密文件 v2 7.0以上可以用,7.0以下装不上 v2没有非对称加密文件 v1+v2 都兼容...

2019-05-06 17:24:00 1120

原创 阿里云jcenter镜像

maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' }

2019-04-17 17:53:52 7358

原创 adb backup 漏洞

Android API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中AndroidManifest.xml文件中的allowBackup属性值[1] ,其属性值默认是True。当allowBackup标志为true时,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。...

2019-03-12 17:19:23 3643

原创 smali const函数的测试

const/4 表示半个字节,四位 ,范围在 -8 ~7 之间const/16 表示两个字节 ,16位 范围在 -32768~32767之间const代表四个字节,32位 范围在-2147483648~2147483647之间事实证明应该是davik虚拟机在解析dex文件的时候根据int值进行了优化吧。...

2019-03-11 16:34:56 2772 1

原创 smali 语句invoke 详解

invoke-static 是类静态方法的调用,编译时,静态确定的; invoke-virtual 虚方法调用,调用的方法运行时确认实际调用,和实例引用的实际对象有关,动态确认的,一般是带有修饰符protected或public的方法; invoke-direct 没有被覆盖方法的调用,即不用动态根据实例所引用的调用,编译时,静态确认的,一般是private或<init>方法; ...

2019-03-10 20:54:34 22551 1

原创 简单小游戏雷电逆战的破解

今天逆向下雷电逆战这个游戏,首先找到游戏的支付页面,先测试支付下,回调回来的结果是支付失败,接下来我们打开ddms,将logcat做下过滤,在application name 下将此应用的包名设置为过滤符可以看到,在回调支付失败的同时,打印了 一下信息,提示购买道具失败。我们可以通过打印的log信息,去查询下这个方法在哪调用过。打开androidKiller 工具,通...

2019-02-22 13:04:37 464

原创 Android studio动态调试smali

用到的工具①Android Studio最新版。②apktool尽量使用最新版的。③ideasmali插件。下载地址https://github.com/JesusFreke/smali/wiki/smalidea首先第一步需要在as里面安装ideasmali的插件 装完重启之后。我们将反编译的apk安装到手机中,以debug模式去运行他,adb shell am ...

2019-02-21 14:42:19 3070 1

转载 static变量与App状态缓存

App启动,static变量装载过程启动App OS开启新Process进程并分配进程ID(PID)及进程表 进程启动DVM实例(Dalvik VM,沙箱模式,每个App均运行在各自DVM内) DVM负责管理class类的装载、卸载、类实例的生命周期、GC回收等过程 class类装载到DVM时,分配static变量空间并进行变量值初始化static变量一旦初始化,将由JVM负责维护管...

2018-12-07 15:55:22 400

转载 android 尽量不要使用static静态变量

使用静态static静态变量潜在性问题:1.占用内存,并且内存一般不会释放;2.在系统不够内存情况下会自动回收静态内存,这样就会引起访问全局静态错误。3.不能将activity作为static静态对象,这样使activity的所有组件对象都存入全局内存中,并且不会被回收; (转自:http://blog.csdn.net/ctcwri/article/details/8858414...

2018-12-07 15:53:56 4611

转载 关于=null和clear() 问题(Java性能篇)

以ArrayList为例,根据情况来看吧,ArrayList内部维护的是一个数组。1. list = null    那么你list = null; 就是释放这个数组对象,当然里面所引用的对象也就释放了。2. list.clear()    如果list.clear(); 看看源代码就知道了,是把list里面对象遍历赋值为null,意思就是释放list里面所有对象。这样就很清楚了...

2018-10-18 14:59:27 722

原创 android 7.0 静默安装实现方式源码解析

第一种方法:通过 getPackageManager()拿到系统的packageManager对象。通过packagemanger类去直接反射调用installPackage方法就行。输入相应的参数。Invoke调用方法。就能实现了。具体方法如图。其实反射调用了packageManager类的这个方法。这个packageManager是个抽象类。他的实现类其实是Applica...

2018-07-24 11:05:52 1487

原创 android下常用静默安装方式

简单说下已知的有三种。第一种前提是root过的系统。执行shell 命令su 超级用户权限进行 pm install 路径。apk进行静默安装。第二种是集成到rom 的具有system权限的app。通过将清单文件加入 android:sharedUserId="android.uid.system"   这个权限。以及通过预装到该系统源码的签名文件。platform.pk8 以及platfor...

2018-07-20 16:00:34 369

转载 Java算法给定一个整数数组,找出其中两个数相加等于目标值

给定一个整数数组,找出其中两个数相加等于目标值 例如:给定数组及目标值 nums = [2,7,11,15] ,target = 9 因为nums[0] + nums[1] = 2 + 7 = 9 返回[0,1]/** * 使用辅助空间(使用哈希表,时间复杂度是O(n),空间复杂度:O(n),n是数组大小) * @param nums * @param target...

2018-06-07 12:11:07 1999

转载 HashSet与TreeSet对重复元素的判断不同之处

HashSet 的实现其实非常简单,它只是封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。HashSet 的绝大部分方法都是通过调用 HashMap 的方法来实现的,因此 HashSet 和 HashMap ...

2018-06-07 12:03:28 418

原创 多选框显示并存储 通过Math.pow(2,i)函数

如图需要做一个多选框显示并存储。一开始采用了  字符串+","去存储和读取。通过split方法遍历出是否选中。后来。采用了把所有的条目循环累加进行读取操作,   Math.pow(2,i) 函数,保证唯一性。并优化了代码。代码如下:/** * 保存文件类型的配置数 * @param booleen */public void setOption(boolean[] booleen){ ...

2018-03-30 10:19:16 1418

原创 ACTIVITY任务栈

FLAG_ACTIVITY_NEW_TASK   设置此状态,记住以下原则,首先会查找是否存在和被启动的Activity具有相同的亲和性的任务栈(即taskAffinity,注意同一个应用程序中的activity的亲和性在没有修改的情况下是一样的,所以下面的a情况会在同一个栈中),如果有,刚直接把这个栈整体移动到前台,并保持栈中的状态不变,即栈中的activity顺序不变,如果没有,则新建一个栈来...

2018-03-14 09:57:35 280

转载 关于android 0进程1服务的意思

一直不了解service和线程的区别,网上都说生命周期不一样,我在application里开的线程生命周期就跟app一致了,和在service里开线程效果一样啊,作为四大组件之一的service就这么水吗?其实不然,有时我们可能需要app被杀死但不希望某些任务被中断,如下载文件,下面我们进行分析。(这里谈的是本地服务,远程服务运行在不同进程就不多说了)有时我们查看有什么程序正在运行的时候会看到如下...

2018-02-08 17:20:14 644

转载 jvm 内存模型

Java中通过多线程机制使得多个任务同时执行处理,所有的线程共享JVM内存区域main memory,而每个线程又单独的有自己的工作内存,当线程与内存区域进行交互时,数据从主存拷贝到工作内存,进而交由线程处理(操作码+操作数)。更多信息我们会在后面的《深入JVM—JVM类执行机制中详细解说》。  我们现在来逐个的看下每个到底是做什么的!1、程序计数器程序计数器(Program

2017-06-15 22:44:13 253

原创 application 和static的生命周期

static在程序结束进程后销毁。不稳定。application比static稳定,比static生命周期短。

2017-06-15 17:12:07 643

转载 Java内存泄露的理解与解决

依赖于引用判断的内存管理机制Java中对内存对象的访问,使用的是引用的方式。在Java代码中我们维护一个内存对象的引用变量,通过这个引用变量的值,我们可以访问到对应的内存地址中的内存对象空间。在Java程序中,这个引用变量本身既可以存放堆内存中,又可以放在代码栈的内存中(与基本数据类型相同)。GC线程会从代码栈中的引用变量开始跟踪,从而判定哪些内存是正在使用的。如果GC线程通过这种方式,无

2017-05-25 23:24:39 280

转载 java中的基本数据类型存放位置

基本数据类型是放在栈中还是放在堆中,这取决于基本类型声明的位置。  一:在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因      在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量。

2017-05-25 22:56:39 2659 1

转载 为什么不能在BroadcastReceiver中开启子线程

如果开发者需要在Service处理耗时任务,建议在Service中另外启动一条新线程来处理该耗时任务.就像前面BindService中看到的,程序在BindService中的onCreate()方法中启动了一条新线程来处理耗时任务.可能有读者感到疑惑:直接在其他程序组件中启动子线程来处理耗时任务不行吗?这种方式也不可靠,由于activity可能会被用户退出,Broadcast Receiver

2017-05-04 13:25:03 5147

原创 简单的构建者模式

public class Person{ public Person(){ } private String name; private int age; private String sex; public Person(String name,int age,String sex){ this.name=name

2017-03-22 21:50:57 314

原创 同步代码块。同步方法 synchronized

package com.antiy.avlpro.manager;import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import java.util.List;/** * Created by zhangbing

2017-03-17 15:51:18 588

转载 同步异步与阻塞与非阻塞

老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。3 老张把响水壶放到火上,立等水

2017-03-16 19:17:23 293

转载 Java 构造方法和成员变量初始化顺序

一定要注意,成员变量按照其声明的顺序会被初始化,并且立刻被初始化为二进制的0,这个动作发生在所有事件之前,也就是编译器会立刻将分配给对象的空间初始化。最后就是调用类的构造方法了。执行顺序:执行父类静态代码 执行子类静态代码初始化父类成员变量(我们常说的赋值语句)初始化父类构造函数初始化子类成员变量初始化子类构造函数

2017-01-12 19:41:50 11976

转载 ListView的性能优化之convertView和viewHolder

最近碰到的面试题中经常会碰到问”ListView的优化”问题。所以就拿自己之前写的微博客户端的程序做下优化。自己查了些资料,看了别人写的博客,得出结论,ListView优化大致从以下几个角度:1.复用已经生成的convertView;2.添加viewHolder类;3.缓存数据(图片缓存);4.分页加载。一、复用convertView首先

2017-01-06 20:41:50 283

转载 String 和 CharSequence 关系

String 是java中的字符串,它继承于CharSequence。String类所包含的API接口非常多。为了便于今后的使用,我对String的API进行了分类,并都给出的演示程序。String 和 CharSequence 关系String 继承于CharSequence,也就是说String也是CharSequence类型。CharSequence是一个接口,它只包括l

2016-09-02 14:00:54 417

android 7.0非root下 实现静默安装 多种方式

android 7.0 非root下 具有system权限下 实现静默安装 静默卸载 的多种实现方式

2018-07-24

Android程序员面试题精编版

搜集了android的基础知识以及高级知识点,以及面试的常见问题。Android程序员面试题精编版

2018-03-26

android 4.4 原生闹钟源码

android 系统的基于4.4 源码进行了摘取 闹钟源码 通过AlarmManager 实现定时闹钟

2018-03-26

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除