栈的结构:
如笔记2中的内存布局图,在应用程序的内存中有两块数据是程序员最应该关心的:“堆”和“栈”。用户态引用程序中的堆一般由C语言标准库管理,即使对于汇编语言来说也是如此(用汇编语言实现的程序和C语言实现的程序本质上是一模一样的)。Linux内核态的“堆”的管理也由Linux管理,所以一般情况下还是使用系统提供的组件进行管理比较合适。与堆不同,在c语言程序中栈的管理是由编译器负责,而在汇编语言编程中栈就需要我们自己进行维护了。
栈是实现函数调用的基石,栈的结构大致如下: read more…
elf的类型: Linux下的可执行文件格式叫做elf,全称是Executable Linkable Format。其实不仅仅是可执行文件,linux中常见的目标文件有目标文件.o、可执行文件如/bin/bash、共享目标文件(.so)、和核心转储文件core dump。可以使用file命令确定文件格式。 read more…
本系列文章是我Linux下汇编语言的学习笔记。我的目的是能够看懂x86程序的反汇编、并学会c语言中內联汇编的编写。本人大学时学过一点实模式下的汇编语言,不了解保护模式汇编和AT&T语法。参考的材料主要是ArtOfAssambly和《程序员的自我修养》这两本书,以及网上搜索的文章。为了方便嵌入gcc,本文使用AT&T的汇编语法,使用gas作为汇编器。再加一句,我觉得学会学会汇编语言是理解应用程序的运行原理,而不是寻址模式和指令集。也许笔记应该先记录内存布局和堆栈再记录寻址模式和指令集。
read more…
C language struct need alignment in memory. In fact, not just struct but all memory objects are need alignment in order to reduce memory operation when they accessed. First of all, let’s review some concept: byte (8bit), word (16bit), double word (32bit). The following text describe the internal reason of why data need alignment.
read more…
转载请声明出处。
c语言的结构体需要内存对齐,其实不止是结构体,为减少内存访问次数,任何内存对象都需要对齐。首先复习几个概念:字节(8bit)、字(16bit),双字(32bit)。下文分8位处理器、16位处理器和32位处理器分别说明内存对齐的原理。
read more…
除了常规的锁机制,Linux内核中还提供了两种用于同步的机制:内存屏障和编译器屏障。要说明白这两种机制的作用先从指令的乱序说起。
read more…
OpenBSD Crypto Framework(以后简称OCF)是OpenBSD最先引入的加密框架,其作用是为用户态和内核态软件提供统一的借口,使其可以方便的使用硬件加速加解密操作。OCF内置软件算法,如果没有硬件可用自动使用软件算法,还可以为多块硬件提供一定程度的负载均衡。

OCF Arch
read more…
前段时间脑袋一热,想用node编写一个简单的视频实时转换程序,将电脑上存放的各种视频实时地转换称ipad支持的视频格式,然后用html5页面将其包装起来共ipad观看。在appstore上已经有两个完成类似功能的应用分别是airvideo和stream2me。不过它们是本地应用的,而我想利用浏览器的html5 video特性做一个通用的视频转换服务程序,将来除了可以给ipad转换外,还可以轻松扩展支持android手机和平板(支持html5 video的浏览器)。
read more…
我想法太多了,同时刻有很多东西想做,而且几乎都是超出能力范围的。
最近几个月,陆续有如下的主意:
read more…