文章目录

  • 一、Visual Studio 安装 " 使用 C++ 的移动开发 "
  • 二、Visual Studio 中创建 " 动态共享库(Android) " 类型应用
  • 三、设置编译选项
  • 四、生成 ARM 架构 SO 动态库
  • 五、生成 x86 架构 SO 动态库

一、Visual Studio 安装 " 使用 C++ 的移动开发 "


使用 Visual Studio 2019 开发环境 , 参考 【Visual Studio】Visual Studio 2019 社区版 CMake开发环境安装 ( 下载 | 安装相关组件 | 创建编译执行项目 | 错误处理 ) 博客 ;

在 Visual Studio Installer 中 , 安装 " 使用 C++ 的移动开发 " ;

等待安装完成 ;

二、Visual Studio 中创建 " 动态共享库(Android) " 类型应用


在 Visual Studio 2019 欢迎界面 选择 " 创建新项目 " ,

在 创建新项目 对话框中 , 选择 " 动态共享库(Android) " 类型的项目 ;

设置项目的存放路径 ;

下面是创建项目时 , 自动生成的代码 ; 所有代码都在 extern "C" {} 包裹中 , 是以标准 C 格式导出 ;

#include "VS_NDK_Demo.h"#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "VS_NDK_Demo", __VA_ARGS__))
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "VS_NDK_Demo", __VA_ARGS__))extern "C" {/*此简单函数返回平台 ABI,此动态本地库为此平台 ABI 进行编译。*/const char * VS_NDK_Demo::getPlatformABI(){#if defined(__arm__)#if defined(__ARM_ARCH_7A__)     // 64 位 arm #if defined(__ARM_NEON__)           // 64 位 arm #define ABI "armeabi-v7a/NEON"#else#define ABI "armeabi-v7a"        // 32 位 arm #endif#else#define ABI "armeabi"#endif#elif defined(__i386__)             // x86 架构#define ABI "x86"#else#define ABI "unknown"#endifLOGI("This dynamic shared library is compiled with ABI: %s", ABI);return "This native library is compiled with ABI: %s" ABI ".";}void VS_NDK_Demo(){}VS_NDK_Demo::VS_NDK_Demo(){}VS_NDK_Demo::~VS_NDK_Demo(){}
}

三、设置编译选项


右键点击 " 解决方案资源管理器 " , 在弹出的菜单中 , 选择 " 属性 " 设置 ;

设置预处理器 :

设置预编译头文件 :


预编译头文件是一些常用的头文件 : pch.h 内容如下 ;

#include <jni.h>
#include <errno.h>#include <string.h>
#include <unistd.h>
#include <sys/resource.h>#include <android/log.h>

四、生成 ARM 架构 SO 动态库


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

生成动态库结果 : 生成的动态库导出到了 D:\002_Project\006_Visual_Studio\VS_NDK_Demo\VS_NDK_Demo\ARM\Debug\libVS_NDK_Demo.so 路径中 ; 项目的目录是 D:\002_Project\006_Visual_Studio\VS_NDK_Demo\VS_NDK_Demo ;

五、生成 x86 架构 SO 动态库


上面导出的 ARM 架构的动态库 , 可以选择 x86 架构 , 再次编译 ; 可选择的架构有 ARM , ARM64 , x86 , x64 ;

【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | VS 自带的 Android 平台应用创建与配置 )相关推荐

  1. 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )

    文章目录 一.Visual Studio 中安装 " 使用 C++ 的移动开发 " 开发库 二.Visual Studio 中安装的 Android SDK 和 NDK 位置 三. ...

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

    文章目录 一.Visual Studio 中创建 Makefile 项目 二.配置 Makefile 文件 三.配置 Android.mk 四.配置 Application.mk 五.主函数源码 六. ...

  3. 【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★

    文章目录 一.Android 进程注入工具开发系列博客 二.Android 进程注入工具 源码下载编译 三.逆向环境搭建 四.使用注入工具进行逆向操作 1.获取远程进程号 2.注入工具准备 3.注入动 ...

  4. 【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )

    文章目录 一.编译注入工具 二.编译结果文件说明 三.注入过程说明 一.编译注入工具 在 Visual Studio 2019 中打开了一个 " 生成文件项目 " , 该项目就是注 ...

  5. 【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )

    文章目录 前言 一.x86 架构的返回值获取 二.ARM 架构远程调用 前言 在之前的博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 ...

  6. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入的动态库 | 恢复寄存器 | 脱离远程调试附着 )

    文章目录 一.dlclose 函数简介 二.关闭注入的 libbridge.so 动态库 三.恢复寄存器 四.脱离远程调试附着 一.dlclose 函数简介 dlclose 函数的作用是 卸载一个 指 ...

  7. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlsym 函数简介 二.获取 目标进程 linker 中的 dlsym 函数地址 三.远程调用 目标进程 linker 中的 dlsym 函数 获取 注入的 libbridge.so ...

  8. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlopen 函数简介 二.获取 目标进程 linker 中的 dlopen 函数地址 三.远程调用 目标进程 linker 中的 dlopen 函数 一.dlopen 函数简介 dlo ...

  9. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...

最新文章

  1. Docker Buildx插件
  2. HG522-C 刷Openwrt记录
  3. java应用中spring自动注入_java-Spring Security会自动过滤注入吗?
  4. [原] XAF How to Edit multiple objects in a ListViewAndDetailView
  5. [react] react中setState的第二个参数作用是什么呢?
  6. 【Keras】从两个实际任务掌握图像分类
  7. python vb 哪个好学_最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几...
  8. [转]《帮我买个单》
  9. yum 安装vsftp_CentOS 8.1 配置vsftp和yum
  10. 产品选型“神器” TIA Selection Tools 之选择 S7-1500T 全程详解
  11. 自己怎么制作搞笑动态表情包?小妙招分享给你
  12. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
  13. python之路day3_python之路:day3
  14. 梯度下降法and随机梯度下降法
  15. 注意: 如何解决Windows Server 2008 R2 EFI启动模式安装2019年8月更新KB4512486 KB4512506  KB4512514后自动进入修复模式,无法正常启动问题!!!
  16. php判断pad访问,JS判断是否手机或pad访问实现方法
  17. supervisor启动进程时报错“gave up: monitor entered FATAL state, too many start retries too quickly”
  18. 【无标题】使用Ping命令制作的批量Ping工具,可对指定Ip进行ping测试,并将结果记录到txt文件
  19. 编程和数学基础不佳如何入门人工智能?
  20. LAMP PHP介绍

热门文章

  1. JAVA中的反射()
  2. glusterfs4.0.1 mempool 分析笔记
  3. 洛谷 P1985 翻转棋
  4. 通过Loadruner对mysql数据库进行增删改查
  5. 与善淘网一起做慈善商店
  6. python字符类型的一些方法
  7. 【BZOJ1123】 [POI2008]BLO (tarjan)
  8. POJ2699_The Maximum Number of Strong Kings
  9. FileStream 和StreamWriter 一起用时
  10. .NET设计模式系列文章