0%

堆栈(Stack)

这是 Say hello to x64 Assembly 系列的第三篇,有关于堆栈的部分。堆栈是寄存器的特殊区域,它的原理为后入先出(LIFO. Last Input, First Output)。

中央处理器中有 16 个通用寄存器用于存储临时数据,他们为 RAX, RBX, RCX, RDX, RDI, RSI RBP, RSP, 与 R8 - R15。但这对海量的程序来说,这太少了。因此计算机把数据存储到堆栈中。堆栈这么使用:调用一个函数的之前,把当前的地址返回,这个地址会被复制到堆栈中。函数执行结束后,地址复制到指令计数器(commands counter, RIP)中,程序接着函数后的地址继续执行。
例如:

Read more »

看一看一些字符串与字符串操作。

字符串反转(Reverse string)

既然谈论汇编语言,当然不能遗漏__字符串(string)__数据类型,通常来说,它就是我们使用单位字节长度的数组来构建字符串数据类型。写一些简单的栗子:我们将会定义字符串数据,反转他们后输出。这个例子非常简单,但也很有用,尤其学习一门新语言的时候。

Read more »

术语和概念

第一篇文章中,不少人抱怨内容并不清晰,这也是我为啥阐述一些术语的原因。

寄存器(Register) – 寄存器在处理器内部,它是很小的存储器。数据处理占处理器的大部分工作。处理器从内存中获取数据,但是它太慢了。这就是为啥处理器拥有自己的内部存储空间,它的名字是 - 寄存器。
小端序(Little-endian) – 可以把内存想象成一个大的数组。字节(bytes)存储在里面。每个地址存储一个内存“数组”的一部分元素。每一个元素是一个字节。举个例子,我们有 4 比特数据: AA 56 AB FF (译者注:十六进制表示,1 字节 = 8 比特,即 8 位二进制)。小端序是下面这样:

Read more »

这里记录下 iptables 原理等相关的东西,相信读者们不会看完,我写(抄)了三天,抄完已经歇菜。

数据包的流向

基本概念

Read more »

再识 JavaScript,对廖雪峰教程的一些总结。

数据类型和变量

  • Number
    • 整数
    • 浮点数
    • NaN – Not a number,无法计算的结果用它表示
    • Infinity – 无穷大
  • 字符串
    • 'abc'等价于"abc"''""本身只是一种表示方式
  • 布尔值
    • true
    • false
    • 布尔运算 – && || !
  • 比较运算符
    • > >= < <= == ===
    • == – 自动转换数据类型再比较
    • === – 不会自动转换数据类型,若数据类型不一致,返回false,若一致则再比较
    • 建议使用===
    • NaN == NaN // falseNaN与所有值都不相等,包括自己。判断NaN方法是通过isNaN()函数
    • 1 / 3 === (1 - 2 / 3); // false – 比较两浮点数是否相等,只能计算他们只差的绝对值 – Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true
    • null & undefined
      • null表示一个“空”的值,0是一个数值,''表示长度为0的字符串
      • undefined表示未定义。
  • 数组
    • 创建数组的方法是通过Array()函数实现 – new Array(1, 2, 3)
    • 出于代码的可读性,建议直接使用[]
    • 数组元素可以通过索引访问
  • 对象
    • 是一组由键-值组成的无序集合
    • 键都是字符串类型,值可以是任意数据类型
    • 获取一个对象的属性,用对象变量.属性名的方式
  • 变量
    • 变量名是大小写英文、数字、$_的组合,且不能用数字开头,变量名野不能是 JavaScript 的关键字
    • 申明一个变量用var语句
  • strict 模式
    • 启用 strict 模式的方法是在 JavaScript 代码的第一行写上 'use strict'
    • 此模式强制通过var申明变量
Read more »