逆向-ARM64汇编二

一、ARM64汇编-内存操作ldr指令

load,从内存中读取数据

ldr 、 ldur

ldp (p是pair的简称)

1.1 ldr

ldr x0, [x1]

打印a 的地址值

ldr指令:从内存中读取数据

ldr x0, [x1]

ldr指令:从内存中读取数据

ldr w0, [x1]。改为准确的读取a的地址值 这样读取的就是a的地址值

1.2、-ldur指令

ldr w0, [x1, #0x4] 就是x1 内存地址值+一个立即数 然后再赋值给w0

ldr w0, [x1, #0x4]! 内存地址值+一个立即数 然后再赋值给w0 同时修改x1的值

ldr w0, [x1, #-0x4] 右边是正数的话就是ldr

ldur w0, [x1, #0x4] 右边是负数的话就是ldur

1.3 ldp

ldp指令:从内存中读取数据,放到一对寄存器中

ldp w0, w1, [x2, #0x10]

先取 [x2, #0x10] 开始的前四个字节给w0 ,再取接着的四个字节给w1

浮点数的赋值

二、ARM64汇编-str、stur、stp指令

store,往内存中写入数据

str 、stur

stp

零寄存器,里面存储的值是0

wzr (32bit , Word Zero Register)

xzr (64bit)

str指令:往内存中写入数据

str x0, [x1]

stur 和 stp 同上面的读取类似

2.1 零寄存器,里面存储的值是0

wzr (32bit , Word Zero Register)

xzr (64bit)

三、 程序计数器和链接寄存器

程序计数器

o pc (Program Counter)

。 记录CPU当前指令的是哪---条指令

。 存储着当前CPU正在执行的指令址 。 类似于8086汇编的ip寄存器

链接寄存器

lr (Link Register),也就x30 。

存储着函数的返回地址

三、堆栈

函数的类型

。 叶子函数

。 非叶子函数

3.1 叶子函数 函数的堆栈平衡

xcrun --sdk iphoneos clang -S -arch arm64 main.c -o main.s

sub sp, sp, #32 ; =16 和add x29, sp, #16 ; fp = sp + 16 申请和释放内存流程

3.2 非叶子函数的堆栈平衡

相关推荐
独小乐16 小时前
012.整体框架适配SDRAM|千篇笔记实现嵌入式全栈/裸机篇
c语言·汇编·笔记·单片机·嵌入式硬件·arm·gnu
C++ 老炮儿的技术栈1 天前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt
cch89182 天前
Java vs 汇编:高级与低级的终极对决
java·开发语言·汇编
2301_789015622 天前
C++:智能指针
c语言·开发语言·汇编·c++·智能指针
独小乐3 天前
007.GNU C内联汇编杂谈|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·汇编·单片机·嵌入式硬件·arm·gnu
Lzh编程小栈6 天前
数据结构与算法之队列深度解析:循环队列+C 语言硬核实现 + 面试考点全梳理
c语言·开发语言·汇编·数据结构·后端·算法·面试
cch89187 天前
汇编与C语言:底层对话VS高效指挥
c语言·开发语言·汇编
jwn9997 天前
PHP vs 汇编:编程语言的两极对决
开发语言·汇编·php
cch89187 天前
汇编vs易语言:底层与中文编程终极对决
汇编
cch89188 天前
汇编VS高级语言:从硬件操控到高效开发
汇编