Compile tcpdump for Android Lollipop

       今天发现一个问题,在Android5.0系统下用tcpdump抓包失败,但是在5.0之前的系统上可以正常抓包,报如下错误

       这是由于PIE安全机制所引起的,从Android4.1开始引入该机制,但是Android L之前的系统版本并不会去检验可执行文件是否基于PIE编译出的。因此不会报错。但是Android L已经开启验证,如果调用的可执行文件不是基于PIE方式编译的,则无法运行。解决办法非常简单,编译的时候加上如下的flag就行。

编译tcpdump

准备编译环境

       系统环境:Ubuntu
       Android NDK:Android NDK rev 10e (32 bit)
       源码:Libpcap v1.7.4, Tcpdump v4.7.4
       在编译之前首先确保有lex和yacc工具,如果没有则需要安装,执行如下脚本。

执行编译脚本

       接下来在NDK目录下执行如下脚本,这个脚本会自动下载tcpdump和libpcap,注意脚本的216,217行,设置了-pie -fPIE标志

       如果一切顺利的话,你将会在脚本的执行路径下看到一个tcpdumpbuild目录,其中包含源代码,和编译结果tcpdump。如果你比较懒,可以用我已经编译好的tcpdump。看完这篇文章,就可以完美移植tcpdump到Android系统。

tcpdump-build

tcpdump-build

参考链接:
http://muzso.hu/2015/07/14/how-to-compile-tcpdump-for-android-5.-lollipop



  copyright@黑月神话,转载请注明出处:vjson.com

发表评论