Android逆向 使用NDK编译c语言可执行程序

admin 2021年1月18日21:05:11Asura笔记本评论302 views965字阅读3分13秒阅读模式
摘要

hello.cAndroid.mkApplication.mk文件打开模拟器 将文件push进安卓虚拟机,赋予执行权限并且执行

使用ndk构建c语言可执行程序

1. 新建代码文件

hello.c

1 2 3 4 5 6 7 
#include <stdio.h>  int main() {     printf("hello android JNI!");     return 0; } 

2. 新建android编译make文件

Android.mk

 1  2  3  4  5  6  7  8  9 10 11 
LOCAL_PATH  := $(call my-dir)       # 获取jni文件路径 include $(CLEAR_VARS)               # 因为是全局变量 所以要清理设置 LOCAL_CFLAGS += -std=c99            #使用c语言c99规范 LOCAL_CFLAGS += -pie -fPIE          #相当于在源文件中增加宏定义,安卓5.0以上需要添加,否则编译出来无法使用 LOCAL_LDFLAGS += -pie -fPIE         #相当于在源文件中增加宏定义,安卓5.0以上需要添加,否则编译出来无法使用 LOCAL_ARM_MODE  := arm              # 编译后的指令集 LOCAL_MODULE    := hello            # 编译后的名字 唯一且不可以包含空格 不是so就不会加.so so模块=> libbuild.so LOCAL_SRC_FILES := hello.c          # 指定源文件 include $(BUILD_EXECUTABLE)         # 指定为构建可执行文件                                      # 如果是SO库为:    $(shared library)                                      # 如果是静态库为:   $(static library) 

Application.mk文件

1 
APP_ABI := x86 armeabi-v7a 

3. 编译ndk代码

1 
ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk 

Android逆向 使用NDK编译c语言可执行程序

4. 在android系统中执行

打开模拟器 将文件push进安卓虚拟机,赋予执行权限并且执行

1 2 3 4 5 6 
adb push libs/armeabi/hello /data/local/tmp adb shell su cd /data/local/tmp chmod 777 /data/local/tmp/hello ./hello 

运行结果

Android逆向 使用NDK编译c语言可执行程序

5. 可能出现的问题

如果代码中有中文输入输出,编译后cmd中执行发现是乱码的话 则需要在执行钱将cmd窗口字符集改为UTF-8

1 
chcp 65001 

相关代码:

Android_JNI/00_build_so at master · luodaoyi/Android_JNI

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年1月18日21:05:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Android逆向 使用NDK编译c语言可执行程序 https://cn-sec.com/archives/245752.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: