1. 程式人生 > 其它 >c程式碼利用ndk-build來生成elf可執行檔案

c程式碼利用ndk-build來生成elf可執行檔案

技術標籤:安卓逆向安卓

原文章地址:https://www.ssfiction.com/andiordadb/9931.html--猴子技術宅

當然這個是我們在實踐中,在cmd視窗中能看到檔案生成流程,讓我們知道ndk-build生成elf可執行檔案原理:對於後期在破解中更能得到啟發;

寫一個簡單的冒泡演算法:(結尾:.c結尾)maopao.c

#include "stdio.h"
#include "assert.h"
void maopao(int *arr, int sz){
	int i =0;
	int j =0;
	assert(arr); //判斷異常
	for(i=0; i<sz-1; i++){
		for(j=0; j<sz-i-1; j++){
			if(arr[j] > arr[j+1]){
				int tmp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = tmp;
			}
		}
	}
}
int main(){
	int i =0;
	int arr[] ={111,3,3,4,5,6,7};
	int as = sizeof(arr)/sizeof(arr[0]);
	maopao(arr,as);
	printf("從小到大:");
	for (i=0; i<as; i++){
		printf(" %d",arr[i]);
	}
	printf("\n");
	getchar();
}

Android.mk檔案

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_ARM_MODE := arm      
LOCAL_MODULE    := maopao
LOCAL_SRC_FILES := maopao.c
include $(BUILD_EXECUTABLE)
LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE

如果是生成.so檔案

LOCAL_PATH := $(call my-dir)   
include $(CLEAR_VARS)  
LOCAL_MODULE    := maopao 	#模組名稱  
LOCAL_SRC_FILES := maopao.c #原始檔  .c或者.cpp
LOCAL_ARM_MODE := arm #編譯後的指令集 ARM指令
LOCAL_LDLIBS += -llog #依賴庫    
include $(BUILD_SHARED_LIBRARY) #指定編譯檔案的型別

Application.mk檔案

APP_ABI := x86 armeabi-v7a

debugwj

注意:將三個檔案放入jni檔案裡面,檔名jni一定要相同;

然後進入cmd中:

ndk-build

使用adb devices進入模擬器或者原生安卓手機;

將生成maopao檔案adb push xxxxx /data/local/tmp中;

賦予許可權:chmod 777 maopao;

./maopao執行即可;

pie

執行中出現pie問題出現:參考執行elf檔案出錯 error

執行成功