汇编总结

作者: eagleyz | 来源:发表于2019-07-01 20:17 被阅读0次

为了表示我对简书『饱醉豚』事件的不满,简书不再更新,后续有文章只更新 个人博客掘金

欢迎移步 个人博客或者 掘金

本文首发于 个人博客

汇编语言的种类

  • 8086汇编(16bit)
  • x86汇编(32bit)
  • x64汇编(64bit)
  • ARM汇编(嵌入式、移动设备) p......

x86、x64汇编根据编译器的不同,有2种书写格式

  • Intel:Windows派系
  • AT&T :Unix派系

作为iOS开发工程师,最主要的汇编语言是

  • AT&T汇编 -> iOS模拟器
  • ARM汇编 -> iOS真机设备

常见的汇编指令

项目 AT&T Intel 说明
寄存器命名 %rax rax
操作数顺序 movq %rax, %rdx mov rdx, rax 将rax的值赋值给rdx
常数\立即数 movq $0x10, %rax mov rax, 0x10 将0x10赋值给rax
内存赋值 movq $0xa, 0x1ff7(%rip) mov qword ptr [rip+0x1ff7], 0xa 将0xa赋值给地址为rip + 0x1ff7的内存空间
取内存地址 leaq -0x18(%rbp), %rax lea rax, [rbp – 0x18] 将rbp – 0x18这个地址值赋值给rax
jmp指令 jmp *%rdx jmp rdx call和jmp写法类似
操作数长度 leaw 0x10(%dx), %ax 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)

寄存器

有16个常用寄存器

  • rax、rbx、rcx 、rdx、rsi、rdi、rbp、rsp
  • r8、r9、r10、r11、r12、r13、r14、r15

寄存器的具体用途

  • rax常作为函数返回值使用
  • rdi、rsi、rdx、rcx、r8、r9等寄存器常用于存放函数参数
  • rsp、rbp用于栈操作
  • rip作为指令指针
    • 存储着CPU下一条要执行的指令的地址
    • 一旦CPU读取一条指令,rip会自动指向下一条指令(存储下一条指令的地址)

lldb常用指令

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

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
    • 直接执⾏行行完当前函数的所有代码,返回到上一个函数(遇到断点会卡住)

规律

  • 内存地址格式为:0x4bdc(%rip),一般是全局变量,全局区(数据段)
  • 内存地址格式为:-0x78(%rbp),一般是局部变量,栈空间
  • 内存地址格式为:0x10(%rax),一般是堆空间

参考资料:

从入门到精通Swift编程

相关文章

  • IOS arm64常用的汇编

    导论 生成汇编文件 寄存器 arm64 汇编条件域 arm64 汇编指令 总结 1. 生成汇编文件 2. 寄存器 ...

  • 汇编总结

    为了表示我对简书『饱醉豚』事件的不满,简书不再更新,后续有文章只更新 个人博客和 掘金 欢迎移步 个人博客或者 掘...

  • 汇编学习总结

    汇编总结 汇编的发展史 机械语言 由0和1组成的机器指令(如:0101 0001 1101 0110) 汇编语言(...

  • JVM汇编总结

    无关性的基石 计算机只认识0和1,所以我们写的程序需要被编译器翻译成0和1才能被计算机执行。10多年的时间过去了,...

  • 汇编总结(一)

    汇编的定位 通俗理解:汇编语言是高级语言与机器语言之间的语言,所有的高级语言在运行在终端设备上之前,都要先编译成汇...

  • <安全攻防之汇编基础>

    &关于汇编基础请点击 <汇编一> <汇编二> <汇编三> <汇编四> <汇编五> <汇编六> <汇编七> <汇编八...

  • 寄存器的寻址方式

    汇编语言的寻址方式的总结
    编写时间:2018.3.23作者:aclihui 最近...

  • linux内核分析第一周作业

    C程序源代码 汇编代码 汇编代码分析 总结 计算机由软件和硬件结合而成,硬件包括处理器,存储器和各种各样的接口及外...

  • 2021年年终总结100篇汇编(工作总结、各单位年终总结、工作计

    1、(10篇)2021年公安年终个人工作总结汇编.docx 2、(10篇)公司年终工作总结.docx 3、(11篇...

  • 汇编语言--汇编指令系统总结

    [数据传送指令] 一、通用数据传送指令 1、传送指令 MOV (move) 指令的汇编格式:MOV DST,SRC...

网友评论

    本文标题:汇编总结

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