- 博客(117)
- 资源 (6)
- 收藏
- 关注
转载 【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】一、FFmpeg so库编译
转自:https://juejin.im/post/5e130df55188253a8b42ebac目录一、Android音视频硬解码篇:1,音视频基础知识 2,音视频硬解码流程:封装基础解码框架 3,音视频播放:音视频同步 4,音视频解封和封装:生成一个MP4二、使用OpenGL渲染视频画面篇1,初步了解OpenGL ES 2,使用OpenGL渲染视频画面 3,Ope...
2020-04-17 21:57:42
960
原创 安卓动态调试七种武器之离别钩 – Hooking(上)
作者:蒸米地址:http://drops.wooyun.org/tips/93000x00 序随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的。另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器。因此,笔者将会在这一系列文章中分享一些自己经常用或原创的调试工具以及手段,
2020-04-17 21:53:08
659
转载 mediacodec和OpenGLES纹理共享方案
1、OpenGL生成纹理2、纹理绑定到SurfaceTexture上3、用SurfaceTexture做参数创建Surface4、MediaCodec解码的视频就往Surface发送,就显示出画面了直接上代码vertex_shader.glslattribute vec4 av_Position;attribute vec2 af_Position;varyin...
2019-11-11 20:58:58
2437
2
原创 SO文件包大小优化
1、编译参数--ffunction-sections,-fdata-sections,链接参数-Wl,--gc-sections, --ffunction-sections和-fdata-sections会把符号编译成单独的section,--gc-sections在链接的时候会去掉用不到的符号,从而减小包大小2、-Ox,各个级别的包大小关系:-O3 > -O2 &g...
2019-05-23 10:10:29
5248
1
原创 C++内存布局详解
C++类中有两种成员变量,三种成员函数:其中对象的内存布局中只包含非静态的成员变量,静态的成员变量是在全局数据区。C++中类的继承类型,以及对应的类实例内存布局如下图:1. 单继承继承情况如下:对应的对象内存布局:2. 一般多继承(非菱形)继承情况如下:对应的对象内存布局:3. 一般多继承(菱形)类继承情况:对应的对象内存布局...
2018-01-28 13:04:07
728
原创 FLV文件格式详解
具体格式可以参看 flv spec。下面主要介绍上图中的Tag里面的字段,每个Tag由两部分组成:Tag Header和Tag Data。1. Tag Header名称长度介绍Tag类型1 bytes8:音频9:视频18:meta其他:保留数据区长度3 bytes在数据区的长度
2017-12-29 17:34:18
6907
转载 git tag使用方法
原文地址:http://blog.sina.com.cn/s/blog_157abb48f0102wjcw.html标签管理发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。Git的标签虽然是版本库的快照,但其实它就是指向某个comm
2017-10-21 16:12:03
3264
转载 Android shell获取和模拟点击事件
1. 获取点击屏幕的坐标位置通过adb shell getevent命令获得点击屏幕的位置坐标的方法:第一步:计算比例首先通过命令adb shell getevent -p | grep -e "0035" -e "0036"获得event 体系里 宽(0035)和高(0036)以当前我使用的手机为例,命令会输出如下信息:0035 :
2017-04-05 16:13:50
11902
2
转载 Git永久删除commit
工作中有一次不小心提交了不该提交的代码到GIT上,而且在发现之前又提交了几个commit,现在想在GIT服务器上永久删除这个commit,具体步骤记录如下。 假设当前分支为master,当前的commit情况如下,现在需要删除commit_id_2和commit_id_4:commit_id_1commit_id_2commit_id_3commit_id_4
2017-03-21 22:25:03
5119
原创 Linux格式化Log宏
#define PRINTF_DEBUG(args) {\ struct tm *__now; \ struct timeb __tb; \ char __datestr[16];\ char __timestr[16];\ char __mss[4];\ ftime(&__tb); \ __now=localtime(&__
2017-03-16 22:36:53
766
原创 Android ELF文件编译之符号隐藏
编译系统是一套非常强大的系统,有众多的编译参数,但是大部分人只听过很少几个,希望以后能有时间好好看一下相关的资料研究清楚。今天来介绍Android下面NDK编译so时,怎样实现符号隐藏,gcc默认的情况下是将所有符号都导出的,为了安全启见可以将符号隐藏,可以给破解带来很大的麻烦,另外还可以有效减小so文件的大小,还有一个好处是可以加快程序的运行速度。隐藏符号基本有几种方式:一种是在函数定义
2017-02-21 14:59:49
2794
转载 Git远程分支和refs文件详解
原文地址:http://blog.csdn.net/forever_wind/article/details/37506389最近同时同步博客到github和gitcafe上,遇到一些问题,我们分如下几个方面来分析一下:推送远程分支到同一个服务器比如首先建立git服务器,顺便clone出两个副本mkdir servercd servergit init --bare
2017-01-13 11:03:34
6422
转载 Android SO 加壳(加密)与脱壳思路
原帖地址:http://blog.csdn.net/jltxgcy/article/details/522052100x01 常见的Android SO加壳(加密)思路 1.1 破坏Elf Header 将Elf32_Ehdr 中的e_shoff, e_shnum, e_shstrndx, e_shentsize字段处理,变为无效值。由于在链接过程中
2016-12-21 16:25:07
5308
原创 花指令文章
http://blog.csdn.net/qincode/article/details/16116091http://blog.csdn.net/yangbostar/article/details/6194133http://www.cnblogs.com/hrhguanli/p/3843298.htmlhttp://bbs.pediy.com/showthread.php
2016-12-19 19:18:41
666
原创 Android C语言_init函数和constructor属性及.init/.init_array节探索
了解C语言的程序猿都知道有两种方法可以让一部分代码在so或可执行文件被加载的时候先于其它任何函数执行,一种是定义一个void _init(void)函数,另一种是在函数后面声明constructor属性。那么这两种方式在执行的时候有什么区别吗?先后顺序呢?了解ELF文件格式的人又会问它们在文件中的位置又有什么差别呢?这篇文章就来解答这些问题。首先你需要了解一下ELF文件格式了,这里就不啰嗦了,
2016-12-13 11:42:51
4326
原创 ELF文件分析中的重要工具
1. file用于查看文件的简单信息BriansdeMacBook-Pro:armeabi-v7a brian$ file libcheckcert.so libcheckcert.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
2016-12-09 17:02:37
4016
转载 LeetCode 372. Super Pow解题思路(超详细)
这道题实际上是考察快速幂,所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。我们先从简单的例子入手:求。算法1.首先直接地来设计这个算法:int ans = 1;for(int i = 1;i<=b;i++){ ans = ans
2016-11-18 19:57:31
4074
1
原创 Android内核之运行自定义内核
获取Android内核的途径有两种,一种是从设备中提取内核,可以看我另外一篇文章;另一种方式是从官网去下载内核源码,编译然后刷到手机里。这里我们讲第二种方式。
2016-11-15 19:10:42
3450
原创 Mac下AOSP编译和刷机过程中的各种坑
常见的几个坑我这里就不记录了,大家可以Google,这里就记录一个我搞了半天的坑,是有关JDK的。这里我使用的AOSP是Android4.4。最开始我是使用jdk1.8版本编译,出现下面错误:host Java: doclava (out/host/common/obj/JAVA_LIBRARIES/doclava_intermediates/classes)external/docla
2016-11-14 15:34:47
2229
原创 Android内核之内核提取
Android设备启动的时候有两种模式:第一种是正常启动,使用boot分区;第二种是启动恢复过程,使用recovery分区。这两种分区的结构是相同的,后面会介绍到。两者的区别顾名思义,这里不多说了。这两个分区的镜像文件分别对应boot.img和recovery.img,我们可以从很多渠道去获取到,其中包含了系统非常重要的东西。boot.img镜像文件中包含了内核镜像文件(通常命名为zImage
2016-11-10 11:54:12
11202
1
转载 Android系统属性SystemProperty分析
原帖地址:http://www.cnblogs.com/bastard/archive/2012/10/11/2720314.html一 System Property 代码中大量存在:SystemProperties.set()/SystemProperties.get();通过这两个接口可以对系统的属性进行读取/设置,顾名思义系统属性,肯定对整个系统全局共
2016-10-25 10:29:03
822
原创 关于setpropex工具使用的几点问题记录
如果需要修改Android的ro.类型的系统属性,大概有两种方法:一种是需要解锁boot loader,定制自己的boot.img文件;另一种是用setpropex工具。两种方法都需要root权限,第一种方法比较复杂,但好处是可以永久性的修改属性,第二种方法很简单,但是只是暂时的,系统重启就失效了。我这里使用了第二种方法,只要用root权限去运行setpropex设置属性,然后adb ro
2016-10-24 18:57:42
2083
1
原创 Android系统/proc目录最全解析
1. /proc目录首先来介绍一下/proc目录,它是一个虚拟的目录,其下面的文件和目录也都是虚拟的,不占用实际的存储空间,而是存在于系统内存中。proc以文件系统的方式为访问系统内核的操作提供接口,它是动态从系统内核中读出所需信息的。/proc/cmdline:显示内核启动的命令行。/proc/cpuinfo:显示系统cpu的信息。 /proc/filesystems,显示当前注
2016-10-19 18:03:13
13763
3
转载 Android实用命令汇总——ps
ps进程命令在adb shell终端,输入 ps,可查看手机当前所有的进程状态,其中ps的英文全称是Process Status。1. ps命令参数-t 显示进程里的所有子线程-c 显示进程耗费的CPU时间-p 显示进程优先级、nice值、调度策略-P 显示进程,通常是bg(后台进程)或fg(前台进程)-x 显示进程耗费的用户时间和系统时间,格式:(u:0, s:0),
2016-10-19 15:38:41
3328
转载 Android实用命令汇总——am
一、概述作为一名开发者,相信对adb指令一定不会陌生。那么在手机连接adb后,可通过am命令做很多操作:(1) 拨打电话10086adb shell am start -a android.intent.action.CALL -d tel:10086(2) 打开网站www.gityuan.comadb shell am start -a androi
2016-10-19 11:36:17
1188
转载 Android实用命令汇总——pm
一、Pm命令命令格式:pm command>命令列表:命令功能实现方法list packages列举app包信息PMS.getInstalledPackagesinstall [options] >安装应用PMS.installPackageAsUser
2016-10-19 11:35:42
970
1
转载 Android实用命令汇总——dumpsys
dumpsys命令功能很强大,能dump系统服务的各种状态,非常有必要熟悉该命令的用法以及含义。一、 dumpsys命令1.1 服务列表不同的Android系统版本支持的命令有所不同,可通过下面命令查看当前手机所支持的dump服务,先进入adb shell,再执行如下命令:dumpsys -l。 这些服务名或许你并看不出其调用的哪个服务,那么这时可以通过下面指令:s
2016-10-19 11:13:54
741
转载 Android进程总结
在网上看到一篇比较全的Android进程整理文章,这里转载一下,原帖地址:http://gityuan.com/2015/12/19/android-process-category/一、概括系统启动架构图:上图在Android系统-开篇中有讲解,是从Android系统启动的角度来分析,本文是从进程/线程的视角来分析该问题。1.1 父进程
2016-10-19 11:03:00
903
原创 MacOS安装并使用Drozer总结
Drozer官网:https://labs.mwrinfosecurity.com/tools/drozer/1. 首先下载Drozer源码并编译安装:git clone https://github.com/mwrlabs/drozer/cd drozerpython setup.py buildpython setup.py install但是上面命令中最后一条安装的
2016-10-09 17:26:52
3350
3
原创 Android应用安全相关工具总结
1. AndroGuard,基于python的逆向工程和分析框架,主要用于静态分析Android应用。2. apktool,APK解包和打包相关工具。3. dexdump,Android SDK中自带的解析dex文件的工具。4. andbug,基于Java调试连线协议(JDWP)的Android Java动态调试工具。5. Drozer,可扩展的模块化Android APP安全测试
2016-10-09 14:57:38
390
转载 Android LLVM-Obfuscator C/C++ 混淆编译的深入研究
一、 LLVM是什么?(1)LLVM是lowlevel virtual machine的简称,是一个编译器框架。苹果公司的Xcode 4.0之后用的都是LLVM编译器。(2)LLVM 诞生于2003.10伊利诺伊大学香槟分校,创始人ChrisLattner,现任苹果公司『开发者工具』部门的主管。 二、 LLVM-Obfuscator 是什么?(1)LLV
2016-09-28 15:10:04
2649
原创 图解Dex文件结构及解析要点
Dex文件格式相当简单,看下图:上图是我从数据结构的角度画出来的Dex文件格式,每个数据结构在android源码dalvik/libdex目录下都有定义,关于上图有几点需要注意:1. 图中所有以(encoded)标注的数据结构在文件中对应的数据都是经过Leb128编码的,详细的可以自己去查,编码规则:以字节为单位,按照小端规则排列每字节最高位为标志。如果最高位为
2016-09-07 19:41:20
3930
转载 APK瘦身记,如何实现高达53%的压缩效果
原帖:http://bbs.pediy.com/showthread.php?t=209029&highlight=apk+%E7%98%A6%E8%BA%AB+%E8%BA%AB1、我是怎么思考这件事情的APK是Android系统安装包的文件格式,关于这个话题其实是一个老生常谈的题目,不论是公司内部,还是外部网络,前人前辈已经总结出很多方法和规律。不过随着移动端技术近两年的飞速发
2016-08-23 19:00:08
4663
转载 10条命令,一分钟分析Linux性能问题
当你登录到一台存在性能问题的Linux服务器上时,在头一分钟,你会检查什么?我们看看Netflix的性能工程师是怎么做的。Netflix大量使用EC2 Linux服务器,很多时候是用一些较为高层的工具做云或实例层次的分析。不过有时仍然需要登录到某个实例上,运行一些标准的Linux性能工具。在最开始的一分钟内,可以先利用手头的标准Linux
2016-08-22 16:16:26
681
转载 我脑海中的优秀技术团队
文中的“我”,其实不是一个单纯的角色,它可能会包含多层含义,不管是我作为一个团队的管理者,还是我作为一名技术团队的普通员工,都会对自己的团队有一些期许,一些定义,一些要求,而这就是今天我们要谈论的话题。希望这些思考能够对管理者或者求职者有些帮助。团队的首先组成就是人,那我理想中的技术团队中的人应该是怎样的呢?作为团队的负责人,其实对于人这方面的把关我一直是非常严格的,对于进入到我团队里的成
2016-08-22 15:16:13
526
原创 Arm汇编学习笔记(九)——高效的分支代码及非对齐数据的访问
分支代码switch(x)在我们平常的代码中是非常常见的,而且也是比较耗时的操作,如果优化以后可以对代码的效率有很大提升。1. 对于0 此种情况N不能太大,对于下面C代码:int ref_switch(int x){ switch (x) { case 0: return method_0(); case
2016-08-19 16:58:19
1720
2
原创 Arm汇编学习笔记(八)——寄存器的使用
在程序中,我们可以使用16个通用寄存器中的14个来保存自己的数据,r13和r15分别是sp和pc寄存器,我们无法使用。ATPCS规定,栈指针应该是8字节对齐。ATPCS规定,被调用函数必须保证在执行前和执行后r4-r11的内容不变,即被调用函数必须在开始保存r4-r11,返回前再恢复。如下图:可以用下面的保存模版:routine_name
2016-08-18 17:23:20
3074
原创 Arm汇编学习笔记(七)——ARM9五级流水及流水线互锁
本文主要是通过分析五级流水及流水线互锁的原理,从而可以编写出更加高效的汇编代码。1. ARM9五级流水线ARM7采用的是典型的三级流水线结构,包括取指、译码和执行三个部分。其中执行单元完成了大量的工作,包括与操作数相关的寄存器和存储器读写操作、ALU操作及相关器件之间的数据传输。这三个阶段每个阶段一般会占用一个时钟周期,但是三条指令同时进行三级流水的三个阶段的话,还是可以达到每个周
2016-08-17 17:26:06
10416
2
原创 Arm汇编学习笔记(六)——函数调用栈空间以及fp寄存器
Arm上函数调用的规则在ARM System Developer's Guide文档中的ATPCS部分有详细的定义,这里主要通过函数调用过程中函数栈的情况来说明fp和sp等寄存器的作用。有关ATPCS的详细内容可以去文档中看。fp叫做frame pointer寄存器,即栈帧指针寄存器;sp叫做stack pointer寄存器,即栈指针寄存器。那么它们具体的作用是什么呢?首先,大家知
2016-08-17 12:44:12
27976
2
语音交互的RSS阅读器
2010-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人