摘要:接触ruby有一段时间了,说起来自己和这门语言倒挺有缘。学生时代的时候,曾经沉迷于一款叫做RPG Maker的软件。当时和朋友以班上的同学为原型写了一部武侠剧,并计划用RPG Maker制作成游戏,乐此不疲。这个RPG Maker在内部使用了一门脚本语言来描述其游戏逻辑,这门语言便是Ruby。于是乎为了修改游戏框架、拓展引擎原有特性,自己花了不少功夫学习Ruby。可惜最后,由于高考临近,Ruby随着RPG Maker一块儿,淹没在了记忆的深处。 最近突然间有了兴趣,又把Ruby拿出来看看,却发觉这五六年间,Ruby语言的变化之大,是我难以预期的。无论是语言特性本身,还是周边的开发工具、程...
阅读全文
摘要:最近开始了android上的编程之旅,在了解2D图形编程时,令人蛋疼的发觉android上仅支持ARGB8888、ARGB4444、RGB565以及Alpha 8这么几种颜色模式,而不支持RGB888这种格式。原本以为即使不支持RGB888我用ARGB8888总行吧,但后来了解到,即使我在内存中用ARGB888颜色模型表示图像,在该图像拷贝到屏幕帧缓冲区的过程中,它也会变成RGB565颜色模式。我们知道,RGB565最多只能表示2^16=65536种图像,这对于RGB888所能表示的2^24=16777216种颜色来说显然在表现力上要略逊一筹。这集中表现在显示某些带有渐变效果的图片时,出现..
阅读全文
摘要:我们都知道如何使用一个condition variable:1、Linux下:1 pthread_mutex_lock(&mutex);2 pthread_cond_wait(&cond, &mutex);3 doSomething();4 pthread_mutex_unlock(&mutex);2、java里:1 synchronized(this){2 wait();3 doSomething();4 }3、C#里:1 monitor.Enter();2 monitor.Wait();3 doSomething();4 monitor.Exit();4、使
阅读全文
摘要:近几个月实在是太忙了,偶然想起来博客上一看,离上次写文章居然过了两个月有余,于是手痒痒想加把劲,再码点儿技术文上来^_^这个系列是为了挖掘出一个简单的类似HelloWorld程序隐藏在CRT之下的复杂性,因此在上次分析了“编译器选项和CRT”之后,今天我想再来简单分析一下从程序进程建立直到程序运行到C/C++入口函数处发生的那点儿事儿。我们知道,在Windows下一个进程是使用CreateProcess函数创建的,这个函数调用的成功,标志着有一个程序被加载至内存并准备开始运行了。系统在建立进程时,会完成给进程分配资源,初始化进程的内存空间,初始化进程内核对象,初始化进程环境快(PEB),加载P
阅读全文
摘要:好的,文接上回,本文我就来讲讲微软link.exe连接器的Incremental Liking这个特性。当然这个其实不是微软linker独有的特性,很多链接器都有这个特性,这个特性实际上是为了提高链接速度的。 想象一下这个场景,我写了两个函数foo()和bar(),其中foo()在0x400100处而bar()紧接着保存在0x400200处。现在我将foo()改写了一下,添加了一些perfect的功能,然后编译了新的代码。不过现在的麻烦是foo()不可避免的变大了,他现在需要200h字节来保存了。那么链接器该怎么办? 一般的思考是——重新洗牌,将现有的编译好的exe删除了,然后重新布局所有的.
阅读全文
摘要:最近由于各种原因想要研究一下PE文件,要彻底研究PE和COFF文件格式当然是非研究微软自己的技术白皮书——《Microsoft Portable Executable and CommonObject File Format Specification》不可了。于是花了一点时间看看,有些心得,和大家分享一下。 首先本文不是讨论PE文件格式本身的,这属于技术规范的范畴,大家要是感兴趣可以参看上文中提到的微软的资料。要是不太喜欢E文的朋友也可以在网上找到很多描述PE格式的文章,在就不再这里赘述了。再说,就算我想讲,估计也讲不好(受限于本人的语文水平orz) 我们都很清楚,实际上PE格式文件里面的.
阅读全文
摘要:作为一个程序员,想必大家都会对HelloWorld这个程序是深有感触吧。是的,就是这个程序第一次带我们进入了神奇的计算机编程的世界,指引我们开始走上了程序员这条充满了艰辛和快乐的路。HelloWorld对我们这群程序员来讲意义是非比寻常的,因此我想更加深入的研究一下C语言版的HelloWorld程序,撕开它的外衣,将隐藏在简单表象下的运行时秘密拿出来给各位看看。 这个系列文章预计将通过对CRT源代码的分析,结合对C程序反汇编和动态调试得出的结果,试图阐述一个程序整个生命周期中CRT所起的作用,从而使各位对C语言的各种底层机制有所了解。但是值得注意的是,C语言的底层是高度依赖具体的OS来实现其.
阅读全文