01 ndk编译c文件了解arm与thumb

首先我们要保证自己的 ndk 配置成功

接着可以建一个目录jni:

Android.mk

# 一个Android.mk file首先必须定义好LOCAL_PATH变量。
# 它用于在开发树中查找源文件。在这个例子中,宏函数’my-dir’, 
# 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。
LOCAL_PATH := $(call my-dir)
# CLEAR_VARS由编译系统提供,
# 指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。这是必要的,
# 因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。
include $(CLEAR_VARS)
# LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。
# 注意编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'foo'的共享库模块,将会生成'libfoo.so'文件。
LOCAL_MODULE    := hello-jni
# LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的C或C++源代码文件。注意,你不用在这里列出头文件和包含文件,
# 因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。
LOCAL_SRC_FILES := hello-jni.c
#   是否将所有的指令都生产为arm模式
LOCAL_ARM_MODE := arm
# BUILD_EXECUTABLE 表示以一个可执行程序的方式进行编译
# BUILD_SHARED_LIBRARY 表示动态链接库的方式进行编译
include $(BUILD_EXECUTABLE)

Application.mk

#### 0APP_ABI := arm64-v8a 后面接的是需要生成的.so平台文件,
#### 正常手机使用arm64处理器的即可。 all是全平台
APP_ABI := armeabi-v7a
# APP_PLATFORM :=后面接的是使用SDK的最低等级
APP_PLATFORM := android-16
# 指定mk文件
APP_BUILD_SCRIPT := Android.mk

我的hello-jni.c

#include <stdio.h>
 int main()
{
    while(1){
        printf("Hello Android!\n");
        getchar();
    }
    return 0;
}   

然后 cmd窗口执行:ndk-build

就会生成libs和obj目录

接着吧obj里面的jni.c push 到我们的手机中并且给予权限

chmod 777 hello-jni

现在是可以运行的了在我们的手机中

使用ida进行调试:

打开ida中的dbgsrv ,因为arm是32位将android_server push 到我们的安卓手机中/data/local/tmp 并且给与权限 777

启动

等待我们的ida去附加他:

打开ida32

输入我们的手机ip

就会进入如图界面:

OpCode操作区: 该部分默认因此,需要Options->General->设置Number of opcode bytes为8显示出来,它是16进制数

32的so 分为ARM和Thumb模式

就是长短不一的是Thumb

程序入口一般都是arm 是 定长的

ida调试命令:

在运行过程中

这个T 0 代表 arm

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值