吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2482|回复: 7
收起左侧

[Android 原创] luckfollowme arm学习篇 4 - 运行arm

  [复制链接]
2016976438 发表于 2023-4-26 07:42

luckfollowme arm学习篇 4 - 运行arm

上一章讲解了如何 编译 x86 x86_64 armeabi-v7a arm64-v8a 的架构文件

这章我们就要运行它,并且尝试使用 ida pro 进行 debug  

准备 emulator

我们需要准备 emulator (模拟器)

注意模拟器我们要用 arm64 的,这样才能运行我们 arm 文件

arm64 是在 android 5 出来的 也就是 android api 21 的时候开始,所以我们最低选择 android api 21

下面是图文教程:

1.create device 创建驱动

</p>

01.png

</p>

2.choose a device definition 选择您的手机驱动尺寸

</p>

02.png

</p>

3.选择 arm64 镜像 注意最好选 api level 21 的。 因为有的 cpu 不支持高版本的 arm

</p>

03.png
</p>

命令行运行 emulator

选择好后 您可以关闭 visual studio

再次之前 打开 SDK 的目录 。 找到 Android\Sdk\emulator\emulator.exe 文件

并参考下面的资料:

https://developer.android.google.cn/studio/run/emulator-commandline?hl=zh-cn

然后再在我们的项目的 scripts 目录中编写 emulator-start.bat 脚本

在此之前,先看我们的设备名字

emulator -list-avds
Pixel_4_API_21

然后您创建的脚本中添加如下内容:

C:\Users\hp\AppData\Local\Android\Sdk\emulator\emulator -avd Pixel_4_API_21 -netdelay none -netspeed full

然后通过 vscode 中终端启动它,启动你会发现它一直卡在如图所示的界面。

04.png

这种情况是正常的,因为 x86 架构 模拟 arm 是很慢

但是我们不用等到它启动,因为实际上它内置的 系统已经跑起来了

如果你正确配置了 android- studio platform-tools 到 path 环境下,您输入 adb  advices 应该可以看到这个设备

 adb devices
List of devices attached
emulator-5554   device

您输入 adb shell "ls -l" 应该就能看到里面的目录情况了

PS C:\Users\hp> adb shell "ls -l"
dr-xr-xr-x root     root              1970-01-01 00:00 acct
drwxrwx--- system   cache             2023-04-22 17:32 cache
lrwxrwxrwx root     root              1970-01-01 00:00 charger -> /sbin/healthd
dr-x------ root     root              1970-01-01 00:00 config
lrwxrwxrwx root     root              1970-01-01 00:00 d -> /sys/kernel/debug
drwxrwx--x system   system            1970-01-01 00:01 data
-rw-r--r-- root     root          281 1970-01-01 00:00 default.prop
drwxr-xr-x root     root              1970-01-01 00:00 dev
lrwxrwxrwx root     root              1970-01-01 00:00 etc -> /system/etc
-rw-r--r-- root     root        11276 1970-01-01 00:00 file_contexts
-rw-r----- root     root          922 1970-01-01 00:00 fstab.goldfish
-rw-r----- root     root          850 1970-01-01 00:00 fstab.ranchu
.....

运行我们的项目

修改项目

再次之前我们改进下我们的项目。 之前我们用的 hello.cpp 使用 c++ 标准库 导致生成的内容过大

这回我们创建个 hello2.cpp 只弄些简单的东西

结构大致如下

practice
    -source
        hello.cpp
        hello2.cpp
    CMakeLists.txt  

我们将 hello2.cpp 代码改成如下:

#include "stdio.h"

int main()
{
    printf("hello world!");
    return 0;
}

CMakeLists.txt 中 我们配置个 hello2.cpp 的构建可执行程序


# 使用最小版本号
cmake_minimum_required(VERSION 3.5)
# 我们的项目名称
project(InlineHookPratice)
# 启动支持 asm 汇编
enable_language(ASM)

# 设置 c++ 和 c 的标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_STANDARD 11)

# 查找的include 的位置
include_directories(
    ./source/    

)

# 设置我们要编译的资源 放入 SOURCE_CPP 变量里面
set(hello_source 
    ./source/hello.cpp
)

# hello2 的代码来源
set(hello2_source 
    ./source/hello2.cpp
)

# 将我们要编译的资源 加入可执行文件 InlineHookPratice 里面 到时候编译出来就叫 InlineHookPratice.exe 或者 InlineHookPratice... 根据环境变化
add_executable(hello ${hello_source})

# 将hello2 生成 可执行程序 
add_executable(hello2 ${hello2_source})

运行上一章的 ndk_bulder.py 脚本的时候注意下

if __name__ == "__main__":
    ndk_path = r"C:\Users\hp\AppData\Local\Android\Sdk\ndk\25.1.8937393".replace('\\',"/")
    cmake_path = r"F:\c++\msys2\mingw64\bin\cmake".replace('\\',"/")
    print("ndk_path:", ndk_path)
    print("cmake_path:", cmake_path)

    for abi in abis:
        # target_name 改成 hello2
        builder = AndroidPlatformBuilder(android_nkd_dir=ndk_path, cmake_dir=cmake_path, arch=abi,target_name="hello2")
        builder.build()

运行项目

通过 vscode 打开终端

进入到我们构建的目录: 然后将项目 通过 adb push/data/local/tmp 目录下

cd ..\build\arm64-v8a\  #进入build arm64
adb push .\hello2 /data/local/tmp/ # push hello2 到 模拟器上
adb shell "chmod 755 /data/local/tmp/hello2" # 修改执行权限
adb shell "/data/local/tmp/hello2" # 运行
hello world!

为了方便 我们将它写成 adb_execute_arm64.bat 脚本放在 scripts 目录下

然后我们可以直接在 vscode 终端 执行下面命令就可以完成运行了

.\adb_execute_arm64.bat

Ida Pro 进行 Debug

我们最终是要学习 arm  汇编的 所以使用 ida pro 肯定是少不了的。

后续我尽量讲清楚点。

由于我 ida pro 也不熟悉。 包括 arm64 ,因为我没学多久。

我也不太会找教程,因为我找教程只懂搜 B 站

但是我所见的教程都是着着书读,半天不讲正点,也不实践。 迷迷糊糊看上一篇下一篇就忘了,对于我这种喜欢速成实践才能记住的人属实消化不了。

稍微看着可以的就是要收费的,可俺是个穷光蛋呀。

大多学习也是通过 买的 gpt 账号,一通乱问。感觉它是我的ai导师也不为过。

在此 还是期待正己大佬的视频,从他这里入坑 看别的没味道。

准备 Ida pro

如果您是第一次使用 ida pro 那么就看本次教程

在 吾爱破解论坛上: https://www.52pojie.cn/forum.php?mod=viewthread&tid=1584115&highlight=ida%2Bpro

下载ida pro

这个包含了很多常用的插件,省去了麻烦

下载完双击 IDA_InitTool.exe 完成环境初始化

准备 android_server64

ida/dbgsrv 目录下有着 ida pro 用于 debug 的服务,我们将它放置 /data/local/tmp 目录下  然后运行后 转发端口到电脑上

adb push .\android_server64 /data/local/tmp/    # push 到模拟器
adb shell "chmod 777 /data/local/tmp/android_server64" # 设置执行权限
adb shell '/data/local/tmp/android_server64 & ' # 后台启动
adb shell 'netstat' # 查看端口使用情况
adb forward tcp:23946 tcp:23946 # 将 模拟器端口映射到电脑 

调试我们的程序

为了方便我们调试,我们得修改下代码,弄成死循环。

#include "stdio.h"

int main()
{
    while (true)
    {
        //阻塞等待输入
        getchar();
        printf("hello world!");
    }

    return 0;
}

然后执行脚本重新编译并运行

cd scripts
python3 ndk_builder.py
.\adb_execute_arm64.bat

接下来打开我们的 ida pro 然后选择 go

进去后选择 Debugger->Attach->Remote ARM Linux/Android debugger  

</p>

05.png

</p>

我们找到我们得 hello2 程序。然后选择 OK

</p>

06.png

</p>

进去后注意右下角,双击我们的模块

</p>

07.png

</p>

进去后注意一点,点击 main 方法,如果你是流程图 按 空格 切换下,然后再 hello world 字符串前面按 F2 下个断点

</p>

08.png

</p>

接下来按 F9 或者点击上面的 绿三角 △  运行程序。

运行后,在 vscode 终端 您启动 .\adb_execute_arm64.bat 的地方 按任意键 运行下去

</p>

09.png

</p>

接下来您应该就能断下来了。 您可以尝试看下右边的寄存器状态标志位

然后按 F8 步过 观察变化

后面的章节会分析下 arm64 的指令 以及 寄存器

免费评分

参与人数 6吾爱币 +6 热心值 +6 收起 理由
junjia215 + 1 + 1 用心讨论,共获提升!
zfpapio + 1 + 1 我很赞同!
debug_cat + 1 + 1 用心讨论,共获提升!
daoye9988 + 1 + 1 我很赞同!
LiRico + 1 + 1 谢谢@Thanks!
aka1Andrew + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
yuanjufeng1 发表于 2023-4-26 08:17
提示: 作者被禁止或删除 内容自动屏蔽
daoye9988 发表于 2023-4-26 08:30
wangliang1 发表于 2023-4-26 08:45
zmingzhi 发表于 2023-4-26 09:32
学习了,多谢分享
shanyoumuxi 发表于 2023-4-26 16:11
学习了,不错不错
p紫气东来 发表于 2023-4-26 21:05
学习下的了
qwennnnn 发表于 2023-4-27 14:00
阿达瓦大大大无多
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表