使用NDK make編譯so檔案

2021-10-02 08:39:15 字數 3702 閱讀 5251

首先開啟ndk的官網

選擇不受支援的舊版本。

將ndk的編譯路徑d:\android-ndk-rxx\prebuilt\windows-x86_64\bin;e:\androidcrack\platform-tools;

放到系統變數環境的path裡面

英文的。

開啟cmd 輸入make 若出現下面這樣則配置成功

到這裡配置就算完成了,接下來就是編譯了。

makefile的編寫執行

筆者在這裡用的是非蟲大佬在《android軟體安全與逆向分析》提供的makefile檔案修改而來,到目前為止還能用。筆者在pc端的安卓模擬器測試還能用。

makefile**如下:

ndk_root=d:\android-ndk-r17c #ndk 安裝解壓的目錄

toolchains_root=

$(ndk_root)

\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64

toolchains_prefix=

$(toolchains_root)

\bin\arm-linux-androideabi

toolchains_include=

$(toolchains_root)

\lib\gcc\arm-linux-androideabi\4.9.x\include-fixed

platform_root=

$(ndk_root)

\platforms\android-14\arch-arm

platform_include=

$(platform_root)

\usr\include

platform_lib=

$(platform_root)

\usr\lib

module_name=user

build_type=c

path_android=/data/local/tmp/

rm=del

flags=-i$(toolchains_include)

\ -i$(platform_include)

\ -l$(platform_lib)

\ -nostdlib \

-lgcc \

-bdynamic \

-lc \

-pie -fpie \

objs=

$(module_name)

.o \

$(platform_lib)

/crtbegin_dynamic.o \

$(platform_lib)

/crtend_android.o

all:

$(toolchains_prefix)

-gcc $(flags)

-e $(modale_name)

.c -o $(modale_name)

.i #產生 .i檔案

$(toolchains_prefix)

-gcc $(flags)

-c $(module_name)

.c -o $(module_name)

.o #產生 .o檔案

$(toolchains_prefix)

-gcc $(flags)

-s $(module_name)

.c -o $(module_name)

.s #產生 .s彙編檔案

$(toolchains_prefix)

-gcc $(flags)

$(objs)

-o $(module_name)

clean:

$(rm)

*.oinstall:

adb push $(module_name)

/data/local/tmp

adb shell chmod 755 /data/local/tmp/$(module_name)

adb shell /data/local/tmp/$(module_name)

run:

adb shell /data/local/tmp/$(module_name)

例子:

#include

intmain()

儲存放到同乙個資料夾

然後在位址 然輸入cmd 回車

輸入make

到這裡的話編譯已經完成我們開啟資料夾

接著開啟模擬器執行輸入

當你要再次執行時只需要輸入

make run

找不到stdio.**件

only position independent executables (pie) are supported

解決方法:

找不到stdio.**件

這個問題只會出現在一些較高版本的ndk裡面,筆者用的是r17c也遇到了同樣的問題,筆者在這裡的解決方法是將r10e裡的 android-ndk-r10e\platforms\android-14\arch-arm\usr 裡的 include檔案 複製到 ==d:\android-ndk-r17c\platforms\android-14\arch-arm\usr == 裡面至此完美解決。

只需要在makefile裡的裡新增 == -pie -fpie \ ==

flags=-ikatex parse error: undefined control sequence: \ at position 22: …hains_include) \̲ ̲ -i(platform_include)

-l$(platform_lib)

-nostdlib

-lgcc

-bdynamic

-lc

-pie -fpie \

參考文件:

1.豐強生 《android軟體安全與逆向分析》

2.only position independent executables (pie) are supported的解決問題.

3ndk生成arm彙編(附**).

ndk 編譯 so檔案

使用ndk build編譯,如果windows需要cygwin環境,cygwin android ndk linux就好辦了 直接在專案路徑使用 ngk build指令碼就能編譯了 引用 一 準備工作 cygwin android ndk 二 安裝cygwin可以搜尋一下比較簡單。安裝時注意選擇包時...

AS編譯c c 生成so檔案

本文講如何用androidstudio生成so檔案 1.新建乙個android專案 2.新建乙個類,並新增native方法 3.生成class檔案4.開啟as的命令終端,輸入命令生成.h檔案 do not edit this file it is machine generated include ...

SO檔案的編寫,編譯,使用方法

linux下的.so檔案為共享庫,相當於windows下的dll檔案。在系統目錄 usr lib 下,我們可以看到很多應用程式庫檔案 常用的動態鏈結庫和軟體包的配置檔案 我們首先編寫簡單的兩個函式,然後把它編譯成so檔案 int max int a,int b int add int a,int b...