
ARM64汇编
文章平均质量分 89
ARM64汇编01 - 环境搭建
ARM64汇编02 - 寄存器与指令基本格式
ARM64汇编03 - PC寄存器
ARM64汇编04 - 条件码
ARM64汇编05 - MOV系列指令
二手的程序员
这个作者很懒,什么都没留下…
展开
-
ARM64汇编0C - inlinehook
本文是ARM64汇编系列的完结篇,主要利用前面学过的知识做一个小实验完整系列博客地址:https://www.lyldalek.top/article/arm这里只讨论 ARM64 下的 inlinehook,做一个简单的demo,只是抛砖引玉,有兴趣了解更多细节的可以去查找资料,看开源项目。ARM64 相比 ARM 的 inlinehook 要麻烦不少,因为有很多指令都没了,且无法直接访问 PC 寄存器。原创 2024-06-20 12:14:02 · 980 阅读 · 0 评论 -
ARM64汇编0B - 函数调用约定
建议先看《CSAPP》的3.7节,讲的很细。我们这里就直接看例子来分析了。原创 2024-06-20 12:10:14 · 710 阅读 · 0 评论 -
ARM64汇编0A - thumb模式与IT块
本文主要讨论一下 32 位程序下的 thumb 模式相关东西,属于选读内容。原创 2024-06-03 10:25:44 · 1085 阅读 · 0 评论 -
ARM64汇编09 - 分支指令与模式切换
本文主要讨论两部分内容:分支指令,B、BL 等v7中的模式切换,arm切thumb,thumb切arm。理解了模式切换就会明白为什么在做 inline hook 时,有些地址需要加上1,加上 1 的作用是什么。原创 2024-05-14 13:02:12 · 1100 阅读 · 0 评论 -
ARM64汇编08 - 块访存指令
armv8 里面似乎没有了 v7 中的块访存指令,就是一次性访问一块内存的指令。我们还是先介绍下 v7 中的块访存指令。原创 2024-03-21 13:27:55 · 687 阅读 · 0 评论 -
ARM64汇编07 - 访存指令
访存指令是ARM64汇编语言中的一部分,涵盖了数据访问和内存操作的指令。这些指令使处理器能够与内存进行交互,包括读取数据、写入数据以及执行其他内存相关的操作。理解这些指令对于理解处理器如何与内存交互以及如何管理数据至关重要。访存指令介绍两个:ldrstr。原创 2024-03-21 13:25:11 · 2273 阅读 · 0 评论 -
ARM64汇编06 - 基本整型运算指令
将 Xn 与 imm 相加,结果赋值给 Xd,imm 是无符号数,范围为 0 - 4095。shift 是对 imm 进行移位,shift 为 0 的时候,表示左移 0 位,即不变。shift 为 1 的时候,表示左移12 位:由于 imm 有效位只有 12 位,所以无法表示 0x1234 之类的数,但是可以表示 0x123。且有左移操作,所以也可以表示 0x123000 之类的数。原创 2024-03-12 13:08:55 · 1419 阅读 · 0 评论 -
ARM64汇编05 - MOV系列指令
由于ARM64指令集是定长的4字节指令,这就决定了它无法在指令里面描述一个任意的数字,比如:0x123456789,这个就无法在指令中表示。看其 hw 对应的位是 01,所以需要将 0x8000左移 1*16 位,得到 0x80000000。这种 mov 指令还是比较常见的,但是由于指令的限制,它只能描述16位的立即数。所以,Rd 的值是 0,表示 X0 寄存器,Rm 的值是1,表示 X1 寄存器。MOV 有个别名指令,ORR,它可以用到 shift,imm6,Rn的值。原创 2024-03-12 13:04:41 · 2199 阅读 · 0 评论 -
ARM64汇编04 - 条件码
关于分支控制与条件码的作用可以去看 《CSAPP》的第 3.6 节,讲的非常清楚,建议看看,这里就不重复了。编译后,使用 ida 打开,查看其核心逻辑:1处的 w19 与 w20 储存着 a 与 b 的值,CMP 会对这两个值做比较。cond 是有一个表可以查的,我们后面会说。这个指令的意思是,如果 cond == true,Xd = Xn,否则 Xd = Xm。2 处的 CSEL 指令的意思是如果 LT 的值是 true,那么 x8 = x9,否则 x8 = x8。x9 的值是 b win。原创 2024-03-07 09:44:54 · 1919 阅读 · 0 评论 -
ARM64汇编03 - PC寄存器
本文主要讨论 pc 寄存器的一些行为。我们使用前文编译的 arm32 程序来做实验,由于 arm64 里面已经没有了mov pc r0这样的指令,无法直接对 pc 寄存器进行读写操作,所以只能采用 arm32 来演示。原创 2024-02-29 13:18:46 · 1399 阅读 · 0 评论 -
ARM64汇编02 - 寄存器与指令基本格式
最近的文章可能会有较多修改,请关注博客哦。原创 2024-02-29 13:15:52 · 1840 阅读 · 0 评论 -
ARM64汇编01 - 环境搭建
这是非常有必要的,因为所有的编译文件都在同一个GUN MKAE执行环境中,所有的变量都是全局变量,不清除容易引起解析错误。LOCAL_ARM_MODE:默认情况下,构建系统会以 thumb 模式生成 ARM 目标二进制文件,其中每条指令都是 16 位宽,并与。现在的应用在googleplay与国内商店的推动下,都已采用了 arm64-v8a,所以我们可以不用太关心 thumb 指令了。前面我们说了,这个选项是用来表明生成的目标文件里面,它的汇编代码是使用 arm 还是 thumb 指令。原创 2024-01-19 11:00:08 · 1184 阅读 · 0 评论