美文网首页
简单汇编

简单汇编

作者: 纳兰沫 | 来源:发表于2019-08-12 17:56 被阅读0次

程序的本质

软件\程序的执行过程

软件\程序的执行过程.png

寄存器和内存

通常 CPU会先将内存中的数据存储到寄存器中 然后再对寄存器内的数据进行运算
例子.png

编程语言的发展

1.机器语言
 - 由0和1组成
2.汇编语言
 - 用符号代替了0和1 比机器语言便于阅读和记忆
3.高级语言
 - C/C++/Java/JavaScript

5C3FC3F4-147C-492C-B0CC-D2136B2A9736.png
1.汇编语言和机器语言一一对应 每一条机器指令都有与之对应的汇编指令
2.汇编语言可以通过编译得到机器语言 机器语言可以通过反汇编得到汇编语言
3.高级语言可以通过编译得到汇编语言/机器语言 但是汇编语言/机器语言几乎不可能还原成高级语言

汇编语言的种类

- 8086汇编(16bit)
- x86汇编(32bit)
- x64汇编(64bit)
- ARM汇编(嵌入式 移动设备)
x86 x64汇编根据编译器的不同 有2种书写格式
1.Intel Windows派系
2.AT&T Unix派系

ios 最主要的汇编语言 AT&T汇编 ios模拟器
ARM汇编 ios真机

汇编指令.png

lea 地址赋值 mov 值赋值
mov 是把地址里面的值取出来再复制 lea是把地址值直接赋值
jmp 是跳转到相应的地址 然后继续往下执行 永远不回头
call 函数调用 后面跟的函数地址 跳到这个地址 然后执行 跟retq配合使用 函数执行完 会跳回到call执行代码的下一行语句

寄存器

有16个常用寄存器
1.%rax   %rbx     %rcx     %rdx    %rsi     %rdi     %rbp    %rsp
2.%r8    %r9      %r10     %r11    %r12     %r13     %r14    %r15
寄存器的具体用途
1.%rax 常用作函数返回值使用
2.%rcx   %rdx    %rsi    %rdi    %r8    %r9等寄存器常用于存放函数参数
3.%rsp   %rbp用于栈操作
4 rip 作为指令指针
   - 存储着CPU下一条要执行的指令的地址
   - 一旦CPU读取一条指令 rip会自动指向下一条指令(存储下一条指令的地址)

r开头 64bit 8字节
e开头 32bit 4字节
ax bx cx 16bit 2字节
ah al 8bit 1字节

lldb常用指令

读取寄存器的值
register read rax 读取rax寄存器的值
修改寄存器的值
register write  寄存器名称  数值
register write  rax 0
读取内存中的值
x/数量-格式-字节大小  内存地址
x/3xw 0x0000010
3 - 3组数据
x - 16进制
w - 字节大小 4个字节为一组
字节大小
- b  ---- byte  1字节
- h  ---- half word  2字节
- w  ---- word   4字节
- g  ---- giant word  8字节
格式
-  x 16进制
-  f 浮点
-  d 是十进制
修改内存中的值
memory write  内存地址 数值
memory write  0x0000010 10
表达式
- 可以简写  expr表达式
- expression $rax
- expression $rax = 1
po 表达式
print 表达式
po/x $rax
po (int)$rax

thread step-over、 next、 n

单步运行 把子函数当做整体一步执行(源码级别)

thread step-in、 step、 s

单步运行 遇到子函数会进行子函数(源码级别)

thread step-over、 nexti、 ni

单步运行 把子函数当做一个整体一步执行(汇编级别)

thread step-insert 、stepi 、si

单步运行 遇到子函数会进入子函数(汇编级别)

thread step-out、 finish

直接执行完当前函数的所有代码 返回到上一个函数(遇到断点会卡主)

rip 存储的是指令的地址
CPU要执行的下一条指令地址就存储在rip中

相关文章

  • 从 简单汇编基础 到 Swift 不简单的 a + 1

    从 简单汇编基础 到 Swift 不简单的 a + 1从 简单汇编基础 到 Swift 不简单的 a + 1

  • 简单汇编

    程序的本质 软件\程序的执行过程 寄存器和内存 编程语言的发展 汇编语言的种类 ios 最主要的汇编语言 AT&T...

  • 汇编(四)

    1. if语句的汇编代码 一个简单的if语句 main函数汇编 2. while语句的汇编代码 do while的...

  • 简单汇编指令

    1, NOP(无操作) 运行这条指令不会对寄存器,内存以及堆栈造成任何影响,英文单词的意思是”无操作”,也就是说,...

  • arm 简单汇编

    1、寻址方式: mov r0, #1234 相当于:r0=#1234。#开头,表示16进制时,以0x开头,如#0x...

  • 《编码》24章 高级语言与低级语言 18/71天阅读

    使用汇编语言编写程序要比使用机器语言简单得多,但微处理器并不能解释汇编语言。 使用汇编器将源文件汇编成机器指令。 ...

  • OC 反汇编

    OC block 汇编 在 main 方法中,写一个最简单的 Block: 汇编 打印 isa 指针: 可以看到为...

  • 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    实验: 首先,写一个简单的c程序 通过命令编译c程序为汇编代码 打开汇编代码 简化汇编代码 假设目前栈底位置为10...

  • 属性的setter和getter方法

    函数调用 简单声明四个属性 arr 转换成arm64汇编的方法,去除汇编指令,并加上简单的注释 arr1 arr2...

  • c语言逆向分析之函数1

    从汇编的角度去理解函数会让你更加的深刻。。。。。。 看这篇文章需要一定的c语言基础和汇编基础(能基本看懂简单的汇编...

网友评论

      本文标题:简单汇编

      本文链接:https://www.haomeiwen.com/subject/situjctx.html