C/C++
handy周
Hello World...
展开
-
android中基于plt/got的hook实现原理
目录native-hook示例开始got全局符号表hook远程注入hook操作inline hook原理native内存泄漏检测常用方式概述由于android系统是基于linux内核开发的,因此我们日常编写的so文件,实际上也是一个ELF文件,类似于Windows下的PE文件,在开始了解native hook之前,我们要先了解一下ELF文件的格式,以及系统加载的一些过程。Lin...原创 2020-01-05 21:46:54 · 6601 阅读 · 6 评论 -
ubuntu移植crypto++到Android平台
简书排版 http://www.jianshu.com/p/eaeeed899251ubuntu移植crypto++到Android平台 官方Wiki http://www.cryptopp.com/wiki/Android_(Command_Line) 这个移植比较简单,官方直接就有文档了,而且有现成的脚本。 setenv-android.sh#!/usr/bin/env bash# =原创 2016-08-11 23:40:00 · 2222 阅读 · 0 评论 -
ubuntu移植libcurl到Android平台
简书排版 http://www.jianshu.com/p/332011ebd6e5最近移植了很多C++平台的库,很多都是后台开发的库,因为NDK开发,以后很可能会使用,提前预研一下。 libcurl这个库很有名,用的人比较多,下载源码,直接就可以编译使用,以前在Windows平台下开发网络模块的时候,用到过这个库,很强大 最近在跟后台的人聊天过程中了解了很多C++开发的相关库,这是其中一个,原创 2016-08-11 23:41:16 · 2111 阅读 · 1 评论 -
ubuntu移植libwebp到Android平台
项目来来回回换了几个图片框架,都不太理想 最后决定选用Glide+libwebp的模式 由于4.0以下Android对Webp的支持并不好 因此需要我们手动支持 1.下载libwebp的最新源码 下载地址 建议开个代理 2.配置相关 a.将源码文件夹改名为jni b.编辑Android.mk文件 开头加上#开启webp 共享库编译ENABLE_SHARED := 1如图原创 2016-05-03 13:38:58 · 905 阅读 · 0 评论 -
ubuntu移植jsoncpp到Android平台
简书排版 http://www.jianshu.com/p/02ccd73c927e本机OS: Ubuntu 14.04 x64NDK开发模块的时候,如果涉及到网络请求,类似json数据传递的时候,有现成的第三方json库可以移植,后台C++开发中使用的比较多的是jsoncpp,今天记录一下jsoncpp移植到Android平台的过程cmake编译此方法并非标准的NDK项目 采用的是cmake交原创 2016-08-11 23:38:49 · 1383 阅读 · 0 评论 -
NDK交叉编译之自定义工具链
简书排版 http://www.jianshu.com/p/3bbad4b1b099本机OS: Ubuntu 14.04 x64首先上官方文档 https://developer.android.com/ndk/guides/standalone_toolchain.html 可以自定义工具链进行交叉编译1.对不同的指令集APP_ABI设置 Architecture Toolchain原创 2016-08-11 23:35:50 · 5318 阅读 · 0 评论 -
Apache开始第一个cgi程序
简书排版 http://www.jianshu.com/p/2dd2fd2a8943服务器OS: Centos 6.5 x64本机OS: Ubuntu 14.04 x64基于源码安装配置准备#下载地址 http://apr.apache.org/download.cgiapr-1.5.2.tar.gzapr-util-1.5.4.tar.gz#官网 http://www.pcre.or原创 2016-08-11 23:31:26 · 586 阅读 · 0 评论 -
android平台下基于OpenSL ES实现音频录制功能
我们日常在处理音频录制的时候,大部分情况下都是使用AudioRecord录制原始的PCM数据,但是音频相关的处理通常都是在native层进行的,今天笔者要记录一下在native层通过OpenSL ES来完成音频的录制。原创 2019-01-31 23:38:09 · 2019 阅读 · 0 评论 -
android平台下基于MediaRecorder和AudioRecord实现录制AAC、PCM音频数据
在`android sdk`中提供了两种方式来实现音频的采集:`MediaRecorder`和`AudioRecord`,其中的`MediaRecorder`处于更上层,它可以对音频录制的数据编码成`AMR`,`MP3`等格式,并存储为文件,而`AudioRecord`则更灵活,因为它可以录制最原始的`PCM流数据`,这个在直播中很常见。原创 2018-12-03 12:09:34 · 3150 阅读 · 0 评论 -
androd平台下基于ffmpeg对AudioRecord录制的PCM音频数据编码为AAC文件
之前的博客写了关于使用Android SDK自带的MediaRecorder和AudioRecord录制音频数据,本次内容,主要是基于之前的内容,使用AudioRecord得到原始的PCM音频数据后用ffmpeg来完成编码工作原创 2018-12-03 12:16:55 · 1207 阅读 · 2 评论 -
android平台下基于ffmpeg采集Camera数据编码成H.264推流到RTMP服务器
音视频实践学习android全平台编译ffmpeg以及x264与fdk-aac实践ubuntu下使用nginx和nginx-rtmp-module配置直播推流服务器android全平台编译ffmpeg合并为单个库实践android-studio使用cmake编译ffmpeg实践android全平台下基于ffmpeg解码MP4视频文件为YUV文件android全平台编译ffmpeg支持...原创 2018-11-29 22:36:11 · 3116 阅读 · 3 评论 -
android全平台编译libyuv库实现YUV和RGB的转换
libyuv是Google开源的实现各种YUV与RGB之间相互转换、旋转、缩放的库。它是跨平台的,可在Windows、Linux、Mac、Android等操作系统,x86、x64、arm架构上进行编译运行,支持SSE、AVX、NEON等SIMD指令加速。原创 2018-11-25 12:57:46 · 8503 阅读 · 4 评论 -
YUV420P、YUV420SP、NV12、NV21和RGB互相转换并存储为JPEG以及PNG图片
YUV420和RGB转换存储为BMP和JPG以及PNG图片原创 2018-11-24 22:50:36 · 20837 阅读 · 2 评论 -
NDK支持的C++运行库
简书排版 http://www.jianshu.com/p/07856720339eAndroid平台自身带有一个微型的C++运行库支持库,称为系统运行库,但是功能有所限制,还有一些补充系统库的额外C++运行库 C++运行库 C++异常支持 C++ RTTI支持 C++标准库 系统库 No No No GAbi++ No Yes No STLpor原创 2016-08-16 00:19:41 · 2585 阅读 · 0 评论 -
NDK与Helloworld
1.下载最新版本NDK http://developer.android.com/tools/sdk/ndk/index.html原创 2014-08-28 11:23:43 · 517 阅读 · 0 评论 -
C Primer Plus-位,字节和字
最小的存储单位称为位(bit)。它可以容纳两个值(0或1)之一(或者该位位置被置为关或开)。不能在一个位中存储更多的 信息,位是计算机存储的 基本单位。字节(byte)是常用的计算机存储单位。几乎对于所有的机器,1个字节均为8位。由于每个位是0或1,所以一个8位的字节包含256(2^8)种可能的额0,1组合。这些组合可用于表示0到255的整数或一组字符。这种表示可以通过原创 2015-01-25 15:34:32 · 491 阅读 · 0 评论 -
C Primer Plus-printf和scanf
printf()和scanf()函数能够与程序通信。它们被称为输入/输出函数,简称为I/O函数。原创 2015-01-26 22:29:47 · 486 阅读 · 0 评论 -
NDK编程-局部和全局引用
大多数JNI函数返回局部引用,局部引用不能在后续的调用中被缓存及重用一旦原生函数返回,局部引用立即被释放例如FindClass函数返回一个局部引用,当原生方法返回时,它被自动释放,也可以用DeleteLocalRef函数显式释放原生代码删除一个局部引用 jclass clazz; clazz = (* env)->FindClass(env,"java/lang/St原创 2015-11-15 20:50:03 · 625 阅读 · 0 评论 -
C Primer Plus-C语言运算优先级
优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .原创 2015-01-28 22:09:17 · 689 阅读 · 0 评论 -
C Primer Plus-C数据类型
int类型是有符号整数,即int类型的值必须是整数,可以是正的,负的或者是0,取值范围依赖于计算机系统。旧的IBM PC兼容机有16位的字,因而使用16位来存储一个int值,取值范围为-32768到32767。目前个人计算机的整数一般为32位,使用32位的int值。正确的声明:int a;int b,c,d;都将为4个int大小的变量赋予名称并安排存储空间。但变量并未初始化。原创 2015-01-25 17:03:40 · 805 阅读 · 0 评论 -
NDK编程-线程
static JavaVM * jvm = NULL;static jobject jobj = NULL;缓存Java虚拟机接口指针jint JNI_OnLoad(JavaVM * jvm,void * reserved){ jvm = jvm; return JNI_VERSION_1_4;}创建一个全局引用/** * 初始化全局引用 */void na原创 2015-11-15 22:08:33 · 463 阅读 · 0 评论 -
C Primer Plus-C语言字符串操作
1)字符串操作strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串strncmp(p, p1, n) 比较指定原创 2015-01-28 21:56:13 · 745 阅读 · 0 评论 -
C Primer Plus-char数组类型和空字符
C没有为字符串定义专门的变量类型,而是把它存储在char数组中。字符串中的字符存放在相邻的存储单元,中每个字符占用一个单元;而数组由相邻存储单元组成,所以把字符串存储到数组中是很自然的。数组的最后一个位置显示字符\0。这个字符就是空字符,C用它来标记字符串的结束。空字符不是数字0;它是非打印字符,其ASCII码的值为0。C的字符串存储时通常以这个空字符结束。该字符的存在意味原创 2015-01-26 22:13:30 · 1002 阅读 · 0 评论 -
NDK编程-日志
利用宏生成简单的日志消息#include #include #ifndef NATIVESAMPLE_HOME_H#define NATIVESAMPLE_HOME_Hstatic const char * TAG="Home";#define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO, TAG, fmt原创 2015-11-15 21:22:28 · 494 阅读 · 0 评论 -
C Primer Plus-整数型和浮点型
对于人,整数和浮点数的区别在于它们的书写。对于计算机,区别在于它们的存储方式。整数就是没有小数部分的数。在C中小数点永远不会出现在整数的书写中。整数是以二进制数字存储。例如整数7的二进制表示为111在8位的字节中存储它需要将前5位置0,将后三位置1浮点数。加了小数点的数十浮点型值,所以7是整数类型,而7.00是浮点型。简单来说,3.16E7表示3.16乘原创 2015-01-25 15:48:25 · 1192 阅读 · 0 评论 -
C Primer Plus-char类型
char类型用于存储字母和标点符号之类的字符。但是在技术实现上char却是整数类型,这是因为char类型实际存储的是整数而不是字符。标准的ASCII码值得范围从0到127,只需7位即可表示。而char类型通常定义为使用8位内存单元,该大小容纳标准ASCII编码是戳戳有余的。char grade = 'A';单引号中的一个字符是C的一个字符常量,编译器遇到 'A' 时会将其转换为相应的编原创 2015-01-25 18:34:00 · 1391 阅读 · 0 评论 -
C Primer Plus-运算符
++增量运算符和--减量运算符有很高的结合优先级;只有圆括号比它们的优先级高。所以x*y++代表(x)*(y++)而不是(x*y)++。增量运算符和减量运算符只能影响一个变量。而组合x*y本身不是一个变量。int y =2;int n =3;int num = (y+n++)*6;用值来代替变量可以得到:num = (2+3)*6只有当使用了n之后,n的值才增加到4。优先级告诉原创 2015-01-27 21:53:29 · 768 阅读 · 0 评论 -
pthread_create 未定义的引用
Code::Blocks使用多线程加入头文件#include 编译提示pthread_create 未定义的引用百度搜索解决方案选择SettingsCompilerLinker Settings添加库选项/usr/lib/x86_64-linux-gnu/libpthread.a添加编译项-lpthread确定编译成功...!!!原创 2015-11-15 22:29:54 · 2563 阅读 · 0 评论