diff --git a/README.md b/README.md new file mode 100644 index 0000000..c768304 --- /dev/null +++ b/README.md @@ -0,0 +1,43 @@ +//## 汇编语言 +//iOS使用的是AT&T的汇编语言 +//### 常见的寄存器 +//16个常用的寄存器 +//* rax、rbx、rcx 、rdx、rsi、rdi、rbp、rsp +//* r8、r9、r10、r11、r12、r13、r14、r15 +// +//寄存器的具体用途 +//* rax、rdx常作为函数的返回值使用 +//* rdi、rsi、rdx、rcx、r8、r9等寄存器常用于函数的参数 +//* rbp、rsp用于栈操作 +//* rip作为指令指针 +// * 存储着CPU下一条要执行的指令的地址 +// * 一旦CPU读取一条指令,rip会自动指向下一条指令 +// +//```java +//r开头: 64bit, 8字节 +//e开头: 32bit, 4字节 +//ax bx cx: 16bit, 2字节 +//ah al: 8bit,1字节 +//bh bl +//``` +// +//### 常见的汇编指令 +// +//| 项目名称 | AT&T | Intel | 说明 | +//|:-----------:|:---------------------------------------------------:|:----------------------------------------------:|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +//| 寄存器名称 | %rax | rax| | +//| 操作数顺序 | mvq %rax, %rdx | mv rdx, rax | 将rax的值赋给rdx| +//| 常数\立即数 | movq $3, %rax
movq $0x10, %rax | mov rax, 3
mov rax, 0x10 | 将3赋值给rax
将0x10赋值给rax| +//| 内存赋值 | movq $0xa, 0x1ff7(%rip) | mov qword ptr [rip+0x1ff7], 0xa | 将0xa赋值给地址为rip + 0x1ff7的内存空间 | +//| 取内存地址 | leaq -0x18(%rbp), %rax | leaq -0x18(%rbp), %rax | 将rbp – 0x18这个地址值赋值给rax | +//| jmp指令 | jmp *%rdx
jmp 0x4001002
jmp *(%rax) | jmp rdx
jmp 0x4001002
jmp [rax] | call和jmp写法类似 | +//| 操作数长度 | movl %eax, %edx
movb $0x10, %al
eaw 0x10(%dx),%ax | mov edx, eax
mov al, 0x10
lea ax, [dx + 0x10] | b = byte (8-bit)
s = short (16-bit integer or 32-bit floating point)
w = word (16-bit)
l = long (32-bit integer or 64-bit floating point)
q = quad (64 bit)
t = ten bytes (80-bit floating point) | +// +// +//### lldb常见的命令 +//* thread step-over、next、n: 单步运⾏行行,把子函数当做整体⼀一步执⾏行行(源码级别) +//* thread step-in、step、s: 单步运⾏行行,遇到子函数会进⼊入子函数(源码级别) +//* thread step-inst-over、nexti、ni: 单步运⾏行行,把子函数当做整体⼀一步执⾏行行(汇编级别) +//* thread step-inst、stepi、si: 单步运⾏行行,遇到子函数会进⼊入子函数(汇编级别) +//* thread step-out、finish: 直接执⾏行行完当前函数的所有代码,返回到上一个函数(遇到断点会卡住) +// diff --git a/SwiftStudy.playground/Pages/07 汇编分析枚举.xcplaygroundpage/Sources/README.md b/SwiftStudy.playground/Pages/07 汇编分析枚举.xcplaygroundpage/Sources/README.md deleted file mode 100644 index c38cf65..0000000 --- a/SwiftStudy.playground/Pages/07 汇编分析枚举.xcplaygroundpage/Sources/README.md +++ /dev/null @@ -1,43 +0,0 @@ -## 汇编语言 -iOS使用的是AT&T的汇编语言 -### 常见的寄存器 -16个常用的寄存器 -* rax、rbx、rcx 、rdx、rsi、rdi、rbp、rsp -* r8、r9、r10、r11、r12、r13、r14、r15 - -寄存器的具体用途 -* rax、rdx常作为函数的返回值使用 -* rdi、rsi、rdx、rcx、r8、r9等寄存器常用于函数的参数 -* rbp、rsp用于栈操作 -* rip作为指令指针 - * 存储着CPU下一条要执行的指令的地址 - * 一旦CPU读取一条指令,rip会自动指向下一条指令 - -```java -r开头: 64bit, 8字节 -e开头: 32bit, 4字节 -ax bx cx: 16bit, 2字节 -ah al: 8bit,1字节 -bh bl -``` - -### 常见的汇编指令 - -| 项目名称 | AT&T | Intel | 说明 | -|:-----------:|:---------------------------------------------------:|:----------------------------------------------:|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| 寄存器名称 | %rax | rax| | -| 操作数顺序 | mvq %rax, %rdx | mv rdx, rax | 将rax的值赋给rdx| -| 常数\立即数 | movq $3, %rax
movq $0x10, %rax | mov rax, 3
mov rax, 0x10 | 将3赋值给rax
将0x10赋值给rax| -| 内存赋值 | movq $0xa, 0x1ff7(%rip) | mov qword ptr [rip+0x1ff7], 0xa | 将0xa赋值给地址为rip + 0x1ff7的内存空间 | -| 取内存地址 | leaq -0x18(%rbp), %rax | leaq -0x18(%rbp), %rax | 将rbp – 0x18这个地址值赋值给rax | -| jmp指令 | jmp *%rdx
jmp 0x4001002
jmp *(%rax) | jmp rdx
jmp 0x4001002
jmp [rax] | call和jmp写法类似 | -| 操作数长度 | movl %eax, %edx
movb $0x10, %al
eaw 0x10(%dx),%ax | mov edx, eax
mov al, 0x10
lea ax, [dx + 0x10] | b = byte (8-bit)
s = short (16-bit integer or 32-bit floating point)
w = word (16-bit)
l = long (32-bit integer or 64-bit floating point)
q = quad (64 bit)
t = ten bytes (80-bit floating point) | - - -### lldb常见的命令 -* thread step-over、next、n: 单步运⾏行行,把子函数当做整体⼀一步执⾏行行(源码级别) -* thread step-in、step、s: 单步运⾏行行,遇到子函数会进⼊入子函数(源码级别) -* thread step-inst-over、nexti、ni: 单步运⾏行行,把子函数当做整体⼀一步执⾏行行(汇编级别) -* thread step-inst、stepi、si: 单步运⾏行行,遇到子函数会进⼊入子函数(汇编级别) -* thread step-out、finish: 直接执⾏行行完当前函数的所有代码,返回到上一个函数(遇到断点会卡住) - diff --git a/SwiftStudy.playground/Pages/07 汇编分析枚举.xcplaygroundpage/Contents.swift b/SwiftStudy.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift similarity index 100% rename from SwiftStudy.playground/Pages/07 汇编分析枚举.xcplaygroundpage/Contents.swift rename to SwiftStudy.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift diff --git a/SwiftStudy.playground/playground.xcworkspace/xcuserdata/jiulinxiri.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftStudy.playground/playground.xcworkspace/xcuserdata/jiulinxiri.xcuserdatad/UserInterfaceState.xcuserstate index aaa203e..86d4572 100644 Binary files a/SwiftStudy.playground/playground.xcworkspace/xcuserdata/jiulinxiri.xcuserdatad/UserInterfaceState.xcuserstate and b/SwiftStudy.playground/playground.xcworkspace/xcuserdata/jiulinxiri.xcuserdatad/UserInterfaceState.xcuserstate differ