root@hlte:/data/local # ./tcpdump -p -s 0
error: only position independent executables (PIE) are supported.
由于使用了NDK編譯的可執(zhí)行文件在應(yīng)用中調(diào)用志衍,在4.4及之前的版本上一直沒出問題寿弱。最近由于要測(cè)試在Android L上的運(yùn)行情況發(fā)現(xiàn)馁痴,當(dāng)運(yùn)行該可執(zhí)行文件時(shí),報(bào)上面的錯(cuò)誤簿晓。
PIE這個(gè)安全機(jī)制從4.1引入眶拉,但是Android L之前的系統(tǒng)版本并不會(huì)去檢驗(yàn)可執(zhí)行文件是否基于PIE編譯出的。因此不會(huì)報(bào)錯(cuò)憔儿。但是Android L已經(jīng)開啟驗(yàn)證忆植,如果調(diào)用的可執(zhí)行文件不是基于PIE方式編譯的,則無法運(yùn)行谒臼。解決辦法是在Android.mk中加入如下flag就行朝刊。
LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE
基于tcpdump的Android智能移動(dòng)終端數(shù)據(jù)包捕獲完整解決方案