Android NDK介绍

Android NDK静态注册 动态注册:

Android NDK静态注册 动态注册_so静态注册不安全嘛_Codeooo的博客-CSDN博客

1. 如何编译原生程序

        Application.mk(ARM硬件指令集/工程编译脚本/stl支持等)

        Android.mk(编译选项/头文件/源文件及依赖库等)

        local_path(call my-dir)

        include $(clear_vars)

        local_arm_mode:= arm指令模式

        local_module:=模块名称

        local_src_files:=源文件

        build_executable(可执行文件)

        build_shared_library(动态链接库)

        build_static_library(静态链接库))

2. 原生程序的启动流程

        原生程序的入口函数  

        动态库的加载/程序参数argc和argv的初始化

        静态链接/动态链接(动态链接程序/动态链接库)

        静态链接(crtbedin_static.o/crend_android.o)

        动态链接(crtbegin_dynamic.o/crtend_android.o/加载 器 (system/bin/linker))

        静态链接程序在启动时不需要额外的加载其他的动态库 (init/adbd/linker)

        静态链接与动态链接程序的入口函数相同,动态链接程序 在执行入口函数前需要通过linker进行额外的初始化

main函数究竟何时被执行

        静态链接(libc_init_static)/动态链接程序 (libc_init_dynamic)

3. 原生C++程序逆向分析

        C++类的逆向

        C++中的类可以理解为C语言中的结构体,每一个成员变 量就是一个结构字段,每一个成员函数的代码都被优化到 了类的外部,它们不占据存储空间

        Android NDK对C++特性的支持(app_stl)

        system

        gabi++(rtti)=>gabi++_static/gabi_shared

        stlport(rtti/stl)=>stlport_static/stlport_shared

        gnustl(c++异常/rtti/stl)=>gnustl_static/gnustl_shared

4. Android NDK JNI API逆向分析

        Android NDK提供了那些函数

        Linux C/C++

        Android NDK<=>JNI接口<=>java

        JNINativeInterfasce(jni本地接口)

        JNIInvokeInterface(jni调用接口)

移植/保护核心代码

如何静态分析Android NDK程序

     file=>load file=>parse c header file=>jni.h=>structures

猜你喜欢

转载自blog.csdn.net/qq_41369057/article/details/131227849
今日推荐