
lua学习记述一
概述 通过标准库和 C API,Lua 可以轻松地与 C 和其他编程语言集成 语法简述 数据结构 nil: 用于表示不存在的值。 boolean: 包括 true 和 false。 number: 默认情况下,Lua 5.3 之后的版本使用双精度浮点数表示。 string: 用于...
概述 通过标准库和 C API,Lua 可以轻松地与 C 和其他编程语言集成 语法简述 数据结构 nil: 用于表示不存在的值。 boolean: 包括 true 和 false。 number: 默认情况下,Lua 5.3 之后的版本使用双精度浮点数表示。 string: 用于...
GNU 汇编器语法 示例 定义数据 nasm数据操作 GNU汇编器操作 使用直接操作数,要用$ 获取部分内存时,例如 64 寄存器的第一个字节 不在操作数中定义大小,而是在指令中定义 GNU汇编器操作后缀 b:1个字节操作数 w:2个字节操作数 l:4个字节操作数 q:8个字节操...
字符串 反转字符串 4个常量 解析 从_start开始 把INPUT地址放入rsi寄存器 通过异或将rcx清零 用cld清除方向标志位,让后续字符串操作从低地址向高地址进行。 保存返回地址,当exitFromRoutine结束后,正确返回 calculateStrLen 先判断r...
大小端 可以将内存想象为一个大数组。它包含字节。 每个地址存储内存“数组”的一个元素。每个元素都是一个字节。 例如我们有 4 个字节:AA 56 AB FF 小端字节序 低地址存低位字节 大段字节序 高地址存低位字节 汇编程序组成 data 用于声明初始化数据或常量 bss 用于...
关于栈空间大小 反汇编代码中的栈大小 栈帧的大小通常是由编译器在编译阶段计算出来的。 编译器在编译源代码时会分析函数的局部变量、函数参数、寄存器的使用情况等信息,然后根据这些信息计算出每个函数所需的栈帧大小。 自己写汇编 需要自己计算栈帧的大小,并为局部变量、参数、寄存器保存等分...
关于比较与跳转 cmp eax,ebx会比较两个寄存器,然后根据两个比较结果来来设置处理器标志位(例如“大于”标志) 执行到jg .L2时,这条指令会检查处理器中“大于”的标志位 如果“大于”标志位被设置了,则跳转到标签.L2所在到位置继续执行后续指令 如果“大于”标志位没有被设...
数据部分 数据部分用于声明常量。 该数据在运行时不会改变。 代码部分 文本部分用于代码。 该部分必须以声明 global _start 开始,它告诉内核程序执行的开始位置。 注释 hello,world 前面两行定义了数据,并在其中放置了具有hello, world值的msg常量...
通用寄存器 RAX 是一个 64 位寄存器,可以存储 64 位的数据。 RAX 寄存器在 x86 架构中广泛用于存储操作数、函数返回值以及执行算术和逻辑操作。它是通用寄存器,可以用于多种目的。 调用约定: 在函数调用中,RAX 寄存器通常用于存储函数的返回值。 根据不同的调用约定...
类图 对象的引用 获取静态对象的引用 构造目标对象 formatter 基类 default_formatter 派生类:消息构造 pattern_formatter 派生类 wincolor_sink GetConsoleMode可以帮助获取控制台的输入模式和输出模式的信息 G...
Windows 检查编译器 _MSC_VER 预处理指令 用于检查是否正在使用 Microsoft Visual C++ 编译器,并根据编译器的类型或版本执行相应的代码 __cplusplus_winrt 预处理指令 用于根据正在编译的代码是否为 Windows 运行时组件执行不...