X86_64汇编学习记述四

X86_64汇编学习记述四

GNU 汇编器语法 示例 定义数据 nasm数据操作 GNU汇编器操作 使用直接操作数,要用$ 获取部分内存时,例如 64 寄存器的第一个字节 不在操作数中定义大小,而是在指令中定义 GNU汇编器操作后缀 b:1个字节操作数 w:2个字节操作数 l:4个字节操作数 q:8个字节操...

X86_64汇编学习记述三

X86_64汇编学习记述三

字符串 反转字符串 4个常量 解析 从_start开始 把INPUT地址放入rsi寄存器 通过异或将rcx清零 用cld清除方向标志位,让后续字符串操作从低地址向高地址进行。 保存返回地址,当exitFromRoutine结束后,正确返回 calculateStrLen 先判断r...

x86_64汇编学习记述二

x86_64汇编学习记述二 2

大小端 可以将内存想象为一个大数组。它包含字节。 每个地址存储内存“数组”的一个元素。每个元素都是一个字节。 例如我们有 4 个字节:AA 56 AB FF 小端字节序 低地址存低位字节 大段字节序 高地址存低位字节 汇编程序组成 data 用于声明初始化数据或常量 bss 用于...

汇编记述三

汇编记述三

关于栈空间大小 反汇编代码中的栈大小 栈帧的大小通常是由编译器在编译阶段计算出来的。 编译器在编译源代码时会分析函数的局部变量、函数参数、寄存器的使用情况等信息,然后根据这些信息计算出每个函数所需的栈帧大小。 自己写汇编 需要自己计算栈帧的大小,并为局部变量、参数、寄存器保存等分...

汇编记述二

汇编记述二

关于比较与跳转 cmp eax,ebx会比较两个寄存器,然后根据两个比较结果来来设置处理器标志位(例如“大于”标志) 执行到jg .L2时,这条指令会检查处理器中“大于”的标志位 如果“大于”标志位被设置了,则跳转到标签.L2所在到位置继续执行后续指令 如果“大于”标志位没有被设...

x86_64汇编学习记述一

x86_64汇编学习记述一

数据部分 数据部分用于声明常量。 该数据在运行时不会改变。 代码部分 文本部分用于代码。 该部分必须以声明 global _start 开始,它告诉内核程序执行的开始位置。 注释 hello,world 前面两行定义了数据,并在其中放置了具有hello, world值的msg常量...

汇编记述一

汇编记述一

通用寄存器 RAX 是一个 64 位寄存器,可以存储 64 位的数据。 RAX 寄存器在 x86 架构中广泛用于存储操作数、函数返回值以及执行算术和逻辑操作。它是通用寄存器,可以用于多种目的。 调用约定: 在函数调用中,RAX 寄存器通常用于存储函数的返回值。 根据不同的调用约定...

基础知识

基础知识

汇编 关于汇编的知识。 基础知识 汇编语言是人和计算机沟通的最直接的方式,它描述了机器最终所要执行的指令序列。 汇编语言是直接在硬件之上工作的编程语言。 机器语言 机器语言是机器指令的集合 机器指令展开来讲就是一台机器可以正确执行的命令 电子计算机的机器指令是一列二进制数字,计算...

寄存器

寄存器

汇编 寄存器部分。 寄存器 一个典型的CPU由运算器、控制器、寄存器等器件组成 这些器件靠内部总线相连,之前所说的地址总线、数据总线、控制总线相对CPU内部而言,是外部总线 内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系 CPU内部器件 运算器...

寄存器和内存访问

寄存器和内存访问

汇编 寄存器和内存访问部分。 字的存储 CPU中,用16位的寄存器来存储一个字 寄存器的高8位(高位单元)存放字的高位字节,寄存器的低8位(低位单元)存储字的低位字节 由于内存单元是字节单元(一个单元存放一个字节),则一个字要用两个地址连续的内存单元来存放 字单元,即存放一个字型...

扫一扫二维码分享