
Windows编程
文章平均质量分 72
jcwKyl
吾尝终日而思矣,不如须臾之所学也。
展开
-
关于字符串比较的一点讨论---strcmp与memcmp的效率及实现原理
要求写一个比较高效的文件比较程序,竟然发现memcmp比strcmp要快很多,于是跟踪调试,发现它们的实现原理:intel/strcmp.asm: mov edx, dword ptr [esp + 4] ;取第二个参数地址 mov ecx, dword ptr [esp + 8] ;取第一个参数地址 test edx, 3 ;edx是第二个参数的地址,这里即检验该地址是否是4原创 2008-03-25 18:41:00 · 16617 阅读 · 3 评论 -
vc++ express edition中禁止XXX was declared deprecated提示信息
我使用的是VC++2005和VC++2008 Express Edition,MS提供了一套安全字符串处理函数和I/O函数,例如使用scanf时会遇到以下warning:warningC4996: scanf was declared deprecated取消这条提示的方法很简单。但对它的提示很有兴趣,先看看sc原创 2009-07-14 15:24:00 · 3869 阅读 · 0 评论 -
大话windows script host编程
转自:http://dev.yesky.com/117/2482617.shtml大话Windows Script Host编程2006-07-12 08:00作者:郑建标出处:天极开发责任编辑:方舟 1.引言 WSH的全称是Windows Script Host,是一种支持ActiveX(COM)的独立脚本语言。WSH脚本程序本来是为了替代DOS时代的批处理文件而产生转载 2009-03-14 20:59:00 · 1684 阅读 · 0 评论 -
谈谈windows程序中的字符编码
转自http://www.utf.com.cn/article/s13-1 谈谈Windows程序中的字符编码(1) 写这篇文章的起因是这么一个问题:我们在使用和安装Windows程序时,有时会看到以“2052”、“1033”这些数字为名的文件夹,这些数字似乎和字符集有关,但它们究竟是什么意思呢? 研究这个问题的同时,又会遇到其它问题。我们会谈到Windows的内部架构、Win32 API的A/W转载 2008-12-24 00:06:00 · 1267 阅读 · 0 评论 -
函数开始处的MOV EDI, EDI的作用
调试程序调试到系统库函数的代码时,总会发现系统函数都是从一条MOV EDI, EDI指令开始的,紧接着这条指令下面才是标准的建立函数局部栈的代码。对系统DLL比如ntdll.dll进行反汇编,可以发现它的每个导出函数都是如此,并且每个导出函数开始处的MOV EDI, EDI上面紧接着5条NOP指令。比如在WinDbg中查看TextOutA周围的代码: 0:000> u TextOutA-0x0a原创 2008-12-24 21:33:00 · 8140 阅读 · 3 评论 -
使用windows api实现任意两种字符编码的转换
用到两个函数:MultiByteToWideChar, WideCharToMultiByte。 使用这两个API实现任意两种字符编码的转换非常简单:将源字符串使用MultiByteToWideChar转换成unicode编码,再将转换后的unicode编码使用WideCharToMultiByte转换成指定的字符编码。 下面是一段演示程序: #include #includ原创 2008-12-19 22:54:00 · 4223 阅读 · 0 评论 -
TextOutA函数与TextOutW函数
这仍然是在学习字符编码的时候引出来的。 原意是感觉字符编码既然这么普遍地存在,那么操作系统又是如何做的呢?所以想到要调试一下TextOutA函数,看看它输出文本的时候是怎样对付字符编码问题的。最后的结果是: TextOutA实际上是封装了一个另外的函数调用。TextOutA的流程大概是这个样子: BOOL TextOutA( HDC hdc, // handle to DC原创 2008-12-18 09:29:00 · 7913 阅读 · 0 评论 -
《编程之美》“让CPU占用率听你指挥”学习笔记
CPU占用率可理解为忙的时间与总的时间的比。若此,自然有第一种解法:空循环与Sleep。具体的方法和代码在《编程之美》的原著中有详述。须注意的是,测出CPU一秒钟能执行的空循环次数(假设能执行C次空循环)后,不能简单地空循环C/2次,然后休息半秒钟。这样得出的曲线虽然大致上是所要求的开头,但是抖动非常厉害。解决方法是什么呢?解决方法就是使用更小的时间片。如果原来一秒钟可以做C次空循环,那么可以原创 2009-02-16 20:22:00 · 3017 阅读 · 6 评论 -
在C/C++代码中使用windows性能监视器
《编程之美》中的“让CPU占用率曲线听你指挥”一题,作者给出的解法3非常清晰简洁。其思想就是直接查询当前CPU占用率,若过高则Sleep一段时间,否则一直循环。代码使用C#编写。于是自己想将这一思路使用C/C++来实现。那么首先需要查清楚windows提供了哪些操作性能监视器(perfmon.msc)的API。在网上搜索一下,在vckbase上有一篇文章恰好是讲解这一主题的。这些操作性能监视器的A原创 2009-01-23 18:18:00 · 6658 阅读 · 0 评论 -
浅谈C/C++中的内存泄漏
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题;Garbage Collection技术在Java中已经比较成转载 2009-01-16 23:11:00 · 1363 阅读 · 0 评论 -
bss段和.data段的区别
bss段和.data段的区别 .bss段和.data段的区别 【例一】用cl编译两个小程序如下:程序1:int ar[30000];void main(){ ......} 程序2:int ar[300000] = {1, 2, 3, 4, 5, 6 };void main(){ ......} 发现转载 2008-11-02 13:02:00 · 1179 阅读 · 0 评论 -
初学COM
因为要给同学用COM组件技术写一个简单的demo程序。然而两天前还对COM是一片空白,这两天在网上到处找资料来看,现在把自己这两天来学习的结果记录一下做为备忘。首先,COM的基础是C++语言,至少自己这两天学习COM的感觉如此。在《COM本质论》中也说,COM是更好的C++。而贯穿于这些技术中最最重要的,则是C++中的虚函数这一类的技术。但是假如是在学校的课堂上,每个人捧着一本C++教材,老师原创 2008-10-29 08:29:00 · 1478 阅读 · 0 评论 -
API HOOK学习笔记一
内容: 从EXE文件的运行过程中分析导入表和IAT表 一个最简单的API HOOK程序 关于绑定 从EXE文件的运行过程中分析导入表和IAT表 样本程序代码: #include #include void func() { printf("func/n"); } int main() { printf("hello world/n"); func();原创 2008-06-06 19:33:00 · 2400 阅读 · 0 评论 -
PE文件格式学习笔记
1.PE文件在磁盘上的数据结构布局与加载到内存后的数据结构布局完全一模一样。加载PE文件的过程就是把PE文件的某个部分映射到内存的地址空间的过程。因而,像IMAGE_NT_HEADERS这样的数据结构在内存中和在磁盘上完全一模一样。这样带来的一点极大的好处就是如果你知道如何在一份PE文件中寻找某些东西,你也可以用相同的方法在加载到内存的映像上寻找相同的东西。(这是很重要的一点,从原文翻译过来。)2原创 2008-04-26 18:56:00 · 1864 阅读 · 1 评论 -
XP系统启动全过程
xp系统启动过程详解 (2008-1-23转载 2008-05-01 09:42:00 · 4148 阅读 · 1 评论 -
关于绘图的效率
需要一个十六进制显示分析可执行文件的小程序。 可WinHex令人郁闷的是在一个文件上做完书签后,下次无论打开什么文件它都还会按照做过的那个书签格局显示,翻遍所有的菜单项也没能再打开一个干干净净的文档。而网上其它的此类程序则很少有书签功能的,于是想自己写 一个。无奈自己酷爱命令行操作,数天来细读MSDN,收获不小,在此做一个小小的总结。1.关于双缓存绘图的技术。幸好以前接触过OPENGL,知道有双缓原创 2008-04-17 07:43:00 · 1329 阅读 · 0 评论 -
OnDraw与OnPaint的区别
先看MSDN 怎么说:CWnd::OnPaint afx_msg void OnPaint( );RemarksThe framework calls this member function when Windows or an application makes a request to repaint a portion of an application’s windo原创 2008-04-09 11:11:00 · 3581 阅读 · 1 评论 -
VC6.0编译msdn例子时找不到mfc42ud.dll的问题之解决
这是因为这个project使用了UNICODE的缘故。在VC菜单Build----->Configuration下把 unicode的选项删掉。在Build-------->Set Active Configuration中选中WIN32DEBUG再重新编译即可。以前在project-------->setting里修改,可是在这里修改好像根本不起作用。不知道上面的修改方法到底更改了项目的哪些文件原创 2008-04-08 14:05:00 · 4120 阅读 · 0 评论 -
递归下载FTP目录的win32 api实现和php实现
这里的递归下载指的是用recursive方式处理目录,即把该目录下的所有文件和子目录原样下载到本地。一个目录就是一棵树,子目录就是树中的内结点,文件和空目录就是树中的叶子结点,遍历树的算法就是深度优先和广度优先,因此写程序递归下载的思路也就是深度优先或者广度优先这两种思路。思路和代码实现都非常简单。这里最主要的地方在于FTP协议规定在一次session原创 2009-06-18 13:01:00 · 2662 阅读 · 0 评论