随意记一些东西吧,我还不太会记笔记。
- DISCARDABLE很重要。在琢石成器中定义的资源都没有用到这个关键词,结果生成的EXE即使很小执行起来也很慢。我试着加上DISCARDABLE结果立马变快了
- 关于获取控件文本的方法,这里有详细说明http://www.cnblogs.com/02xiaoma/archive/2012/07/10/2583944.html
- 下面的代码将从szSource开始的dwSize大小的内存块移动到saDest处:
1 mov esi,offset szSource 2 mov edi,offset szDest 3 mov ecx,dwSize 4 cld 5 rep movsb
- 下面的代码将szDest处的dwSize字节填充为0:
1 xor eax,eax 2 mov edi,offset szDest 3 mov ecx,dwSize 4 cld 5 rep stosb
- 用CreateFileMapping创建内存映射文件对象的时,第一个参数hFile指定一个文件句柄。如果句柄是属于一个已经打开的文件的,那么内存映射文件将在这个文件上面建立;如果需要建立存在于页文件中的内存映射文件供不同进程共享,那么hFile指定为-1。
- 大部分类型的对象部属于创建它的线程,而是属于进程,这表现在创建对象的线程结束时,如果线程不去主动删除它们,系统不会自动删除它们,只有当整个进程结束时对象还没有被删除,系统才会自动删除它们。但是窗口和钩子这两种对象比较特殊,它们首先是由创建窗口和安装钩子的线程所拥有的,如果一个线程创建一个窗口或安装一个钩子,然后线程结束,那么系统会自动摧毁窗口或卸载钩子。
- 线程对象可以提前被释放。对于大部分的句柄来说(如文件句柄hFile,文件寻找句柄hFindFile等),使用CloseHandle函数关闭句柄意味着整个对象被释放,但对于线程句柄来说,关闭它仅释放线程的统计信息,并不会终止线程的执行,所以如果不再需要使用线程句柄的话,在调用CreateThread后马上就可以将它关闭掉,线程的执行并不会受影响。
- 学习SEH中设置回调函数的三条指令让我纠结了好久,最后忽然豁然开朗:原来是把EXCEPTION_REGISTRATION结构放在堆栈中的啊!汇编真好玩!
代码如下:
1 ;********************************************** 2 ;在堆栈中构造一个EXCEPTION_REGISTRATION结构 3 ;********************************************** 4 assume fs:nothing 5 push offset _Handler;SEH Handler异常处理程序 6 push fs:[0] 7 mov fs:[0],esp 8 ;********************************************** 9 ;指令 10 ;********************************************** 11 ;恢复原来的SEH链 12 ;********************************************** 13 pop fs:[0] 14 pop eax 15 ;**********************************************