c 程式移植到android

2021-08-17 15:11:58 字數 1214 閱讀 4178

**

在android 4.4之後新增了新的保護機制,可執行檔案必須是採用pie編譯的。

如果是使用ndk進行編譯的(需要使用到android.mk指令碼),則在指令碼中新增:

local_cflags +=

-pie

-fpie

local_ldflags +=

-pie

-fpie

如果是手動採用交叉編譯鏈進行編譯的,則在編譯選項上新增-pie -fpie即可. 

也就是說,可以採用***(編譯器名) -o output ***.c -pie -fpie -sysroot=$sysroot的方式進行編譯.

注:向下相容,測過可以在android4.2.2系統跑。

1.採用winhex修改不能執行的二進位制可執行檔案,將第17個位元組的02改為03即可(elf_header e_type = et_dyn)。

2.自定義linker

文章:3.替換/system/bin/linker, 有系統無法重啟的風險。

**在 lcweik的帖子 中,說明了修改/system/bin/linker的方法去繞過android 5.0以上的pie機制。但是關於如何修改?修改細節並沒有說明。

我的測試機器上紅公尺3,miui版本是8.0,android版本是5.1.1。

可以通過搜尋下方的error資訊定位,需要修改的位置即是beq。

2、在hex介面,可以知道,對應的數值是07 d0,將其修改為07 e0即可:

3、儲存linker檔案,然後重新上傳到手機覆蓋原檔案,注意上傳之後需要在/system/bin/下使用chmod命令,修改其許可權為777。

linux 上thread 

在編譯時要引入執行緒庫 

-lpthread

但是android

中該庫在

libc.so

中,在編譯時要引入 

-lc

Linux程式移植到Android上

序言 由於本人還是比較偏重於先說明原理在說明實際操作步驟,要知其然更要知其所以然,如下圖所示 一般情況下,有兩種方法。1.乙個就是將程式靜態編譯,將程式中所有需要的庫全部編譯進可執行檔案中。這樣程式在android中執行就不需要鏈結任何動態庫了。但是帶來乙個非常大的弊端就是這個程式會非常大,資源利用...

gloox移植到android平台

最近需要在android平台是使用gloox,官方gloox沒有沒有對應的android.mk檔案,那當然也可以用android ndk來編譯,但是我覺得用ndk編譯有點麻煩,就寫乙個android.mk來使用mm編譯。首先,進入src目錄,configure該專案 configure host a...

samba移植到android流程

參考這一篇文章 然後結合自己實際操作過程中遇到的一些問題總結出來這個流程 所以把自己記得的流程記錄下來,結合網上一些文章總結,並將自己實際遇到的問題貼出來 廢話少說 下面是具體流程 我用的samba包是samba 3.5.9,交叉編譯工具包是arm linux gcc 4.4.3.tar.gz 首先...