0%

Say hello to x86_64 Assembly 系列的第五篇,这篇会看到宏(macros)。但这与 x86_64 并没有关系,仅仅是 nasm 这种汇编工具与其预处理的。若有兴趣的话可以接着阅读。

宏(Macros)

NASM 支持以下两种形式的宏:

Read more »

堆栈(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 »