C语言内存地址对齐详解

什么是地址对齐?
现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排列,这就是对齐。

为什么要地址对齐?
对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定的类型的数据只能从某些特定的地址开始存取。其它平台可能没有这些限制,但是最常见是的如果不按照适合其平台的要求对数据存储进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶数地址开始,如果一个 int 型(假设是 32 位)如果存放在偶数地址开始的地方,那么一个时钟周期就可以读出。而如果是存放在一个奇数地址开始的地方,就可能会需要 2 个时钟周期,并对两次读出的结果的高低字节进行拼凑才能得到该 int 型数据。显然在读取效率上下降很多。这也是空间和时间的博弈。

对齐的实现
通常,我们写程序的时候,不需要考虑对齐的问题。编译器会替我们选择适合目标平台的对齐策略。当然,我们也可以通知给编译器传递预编译指令而改变指定数据的对齐方式。

但是,正因为我们一般不需要关心这个问题,又因为编译器对数据做了对齐处理。但我们不了解的话,常常会对一些问题感到迷惑。最常见的就是结构体(struct)的 sizeof() 结果,出乎意料。为此,我们需要对对齐算法有所了解。
Continue reading C语言内存地址对齐详解

Linux 快速创建大文件

很多用户需要创建一个大文件,并在这个文件上创建文件系统。多数用户是用下面两条命令完成的:

$ dd if=/dev/zero of=xxx.fs bs=1M count=4096
# mkfs.xxx xxx.fs

这样完全可以,但在创建映像文件 xxx.fs 时会比较慢,因为文件的内容都被写为0了,而我们创建这样的文件是不需要关注原有内容的,那我们可以通过下面的方法快速的创建一个大文件,然后在上面创建文件系统:

$ truncate -s 4096M xxx.fs
# mkfs.xxx xxx.fs

怎么样,快多了吧?

快速创建大文件:

truncate -s 文件长度 文件名

Over!

呼吁 Windows 程序员注意权限问题

Unix 系统一直注重用户权限的保护,这个机制也促使这个系统中的应用程序对权限保护的支持。现在的 Windows 操作系统越来越注重权限的控制,很多用户也开始通过权限来用户权限来保护系统文件和用户私有文件。

但是用户会遇到很多的问题,绝大多数是应用程序对权限保护机制的支持有问题,主要表现在这些问题应用程序需要读写程序的安装目录,而在权限保护下程序的安装目录一般应该设置为只读的,这样才能防止程序被恶意篡改。同时也让这些程序不能正常工作了。一些用户因此取消了对程序目录的保护,设置为可读可写,这样使安全性大打折扣。
Continue reading 呼吁 Windows 程序员注意权限问题

怎样为 Android 系统创建新的输入法

一.
1.创建一个新的输入法需要继承android.inputmethodservice.InputMethodService,这个类提供了一个输入法的基本实现,例子可以参考sdk中的SoftKeyboard的代码。

2.输入法跟其他application或service一样会被打包成一个apk,在AndroidManifest.xml,把它声明成一个 Service.
Continue reading 怎样为 Android 系统创建新的输入法

什么是 AT 指令?

AT 即Attention,AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter, TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。通过TA,TE发送AT指令来控制移动台(Mobile Station,MS)的功能,与GSM 网络业务进行交互。用户可以通过AT指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。

90年代初,AT指令仅被用于Modem操作。没有控制移动电话文本消息的先例,只开发了一种叫SMS BlockMode的协议,通过终端设备(TE)或电脑来完全控制SMS。几年后,主要的移动电话生产厂商诺基亚、爱立信、摩托罗拉和HP共同为GSM 研制了一整套AT指令,其中就包括对SMS的控制。AT指令在此基础上演化并被加入GSM 07.05标准以及现在的GSM07.07标准,完全标准化和比较健全的标准。如:对SMS的控制共有3种实现途径:最初的Block Mode;基于AT指令的Text Mode;基于AT指令的PDU Mode。到现在PDU Mode已经取代BlockMode,后者逐渐淡出。GSM 模块与计算机之间的通信协议是一些AT指令集,AT指令是以AT作首,字符结束的字符串,AT指令的响应数据包在中。每个指令执行成功与否都有相应的返回。其他的一些非预期的信息(如有人拨号进来、线路无信号等),模块将有对应的一些信息提示,接收端可做相应的处理。

Over!
From: http://blog.csdn.net/biaozai06/archive/2009/04/07/4054919.aspx

访问进程堆栈查找密码

本文描述一下如何在 Windows 系统里通过访问其它进程的堆栈来查找到密码。这种方法的局限就是在访问其它进程的地址空间时堆栈不能释放了(检查密码的那个函数不能返回了,这类情况多出现于有提示密码错误的窗口)。

下面我们以万象网管客户端这个程序为例说明查找密码的具体方法。需要的工具有 WinHex ,通过这个程序去访问其它进程的地址问题。
Continue reading 访问进程堆栈查找密码