【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | 使用 Makefile 构建 Android 平台 NDK 应用 )(二)

简介: 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | 使用 Makefile 构建 Android 平台 NDK 应用 )(二)

这是编译 NDK 项目的通用 Makefile 配置 : 使用前只需要修改 NDK 和 NDK_ROOT 中的自己的 NDK 即可 ;


NDK = D:/001_Develop/001_SDK/Sdk/ndk/android-ndk-r14b/ndk-build.cmd
NDK_ROOT = D:/001_Develop/001_SDK/Sdk/ndk/android-ndk-r14b
MAKE = "$(NDK_ROOT)/prebuilt/windows-x86_64/bin/make.exe"
BUILD_SCRIPT = "$(NDK_ROOT)/build/core/build-local.mk"
PROJ_PATH = NDK_PROJECT_PATH=.
APP_SCRIPT = APP_BUILD_SCRIPT=./Android.mk NDK_APPLICATION_MK=./Application.mk
BUILD_COMMAND = $(NDK) NDK_PROJECT_PATH=. $(APP_SCRIPT)
# D:/001_Develop/001_SDK/Sdk/ndk/android-ndk-r14b/ndk-build.cmd NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk NDK_APPLICATION_MK=./Application.mk
.PHONY:all
all:
  $(NDK) $(PROJ_PATH) $(APP_SCRIPT)
  @echo done!
clean:
  $(NDK) $(PROJ_PATH) $(APP_SCRIPT) clean
  @echo done!
rebuild:
  $(NDK) $(PROJ_PATH) $(APP_SCRIPT) -B
  @echo done!






三、配置 Android.mk


Android.mk :


LOCAL_PATH    := $(call my-dir)
include     $(CLEAR_VARS)
# 链接 log 日志库
LOCAL_LDLIBS    += -llog 
# 编译可执行程序名称
LOCAL_MODULE    := hello
# 指定源码
LOCAL_SRC_FILES   := main.c
# 指定输出目录
# NDK_APP_DST_DIR   := ../Debug/$(TARGET_ARCH_ABI)
# 编译可执行程序
include     $(BUILD_EXECUTABLE)






四、配置 Application.mk


Application.mk :


# 指定要编译的 CPUU 架构
APP_ABI     := armeabi armeabi-v7a x86
# 指定用于此应用的 C++ 标准库
APP_STL     := gnustl_static
# 指定编译的 Android 平台 , 一般是 Android 兼容的最低版本 
APP_PLATFORM    := android-19






五、主函数源码


main.c 源码 :


#include <stdio.h>  
int main(int argc, char** argv) {
  printf("Hello World");
  return 0;
}





六、编译 NDK 项目


右键点击 " 解决方案资源管理器 " , 在弹出的菜单中 , 选择 " 仅用于项目(J) -> 仅生成 VS_NDK_Makefile(B) " 选项 ;

image.png



编译结果 :


image.png



目录
相关文章
|
5月前
Android.mk(makefile)中几个符号的区别:=、 :=、 ?=、 +=
本文解释了在Android.mk文件中使用的几种赋值符号的区别,包括`=`(基本赋值)、`:=`(覆盖赋值)、`?=`(条件赋值,仅在变量未赋值时操作)、`+=`(追加赋值),并通过实验演示了这些符号的具体行为和效果。
274 1
|
2月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
59 8
|
2月前
|
运维 JavaScript jenkins
鸿蒙5.0版开发:分析CppCrash(进程崩溃)
在HarmonyOS 5.0中,CppCrash指C/C++运行时崩溃,常见原因包括空指针、数组越界等。系统提供基于posix信号机制的异常检测能力,生成详细日志辅助定位。本文详解CppCrash分析方法,涵盖异常检测、问题定位思路及案例分析。
66 4
|
2月前
|
运维 监控 JavaScript
鸿蒙next版开发:分析JS Crash(进程崩溃)
在HarmonyOS 5.0中,JS Crash指未处理的JavaScript异常导致应用意外退出。本文详细介绍如何分析JS Crash,包括异常捕获、日志分析和典型案例,帮助开发者定位问题、修复错误,提升应用稳定性。通过DevEco Studio收集日志,结合HiChecker工具,有效解决JS Crash问题。
65 4
|
3月前
|
数据挖掘 程序员 调度
探索Python的并发编程:线程与进程的实战应用
【10月更文挑战第4天】 本文深入探讨了Python中实现并发编程的两种主要方式——线程和进程,通过对比分析它们的特点、适用场景以及在实际编程中的应用,为读者提供清晰的指导。同时,文章还介绍了一些高级并发模型如协程,并给出了性能优化的建议。
42 3
|
4月前
|
负载均衡 Java 调度
探索Python的并发编程:线程与进程的比较与应用
本文旨在深入探讨Python中的并发编程,重点比较线程与进程的异同、适用场景及实现方法。通过分析GIL对线程并发的影响,以及进程间通信的成本,我们将揭示何时选择线程或进程更为合理。同时,文章将提供实用的代码示例,帮助读者更好地理解并运用这些概念,以提升多任务处理的效率和性能。
71 3
|
4月前
|
安全 开发者 Python
Python IPC大揭秘:解锁进程间通信新姿势,让你的应用无界连接
【9月更文挑战第11天】在编程世界中,进程间通信(IPC)如同一座无形的桥梁,连接不同进程的信息孤岛,使应用无界而广阔。Python凭借其丰富的IPC机制,让开发者轻松实现进程间的无缝交流。本文将揭开Python IPC的神秘面纱,介绍几种关键的IPC技术:管道提供简单的单向数据传输,适合父子进程间通信;队列则是线程和进程安全的数据共享结构,支持多进程访问;共享内存允许快速读写大量数据,需配合锁机制确保一致性;套接字则能实现跨网络的通信,构建分布式系统。掌握这些技术,你的应用将不再受限于单个进程,实现更强大的功能。
73 6
|
5月前
|
人工智能 PyTorch 算法框架/工具
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
【8月更文挑战第6天】Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
|
4月前
|
数据采集 消息中间件 并行计算
进程、线程与协程:并发执行的三种重要概念与应用
进程、线程与协程:并发执行的三种重要概念与应用
86 0
|
5月前
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
75 1

相关实验场景

更多