11 2008 档案
摘要:在 Win32 API 中,创建线程的基本函数是 CreateThread,而 _beginthread(ex) 是C++ 运行库的函数。为什么要有两个呢?因为C++ 运行库里面有一些函数使用了全局量,如果使用 CreateThread 的情况下使用这些C++ 运行库的函数,就会出现不安全的问题。而 _beginthreadex 为这些全局变量做了处理,使得每个线程都有一份独立的“全局”量。所以,如果你的编程只调用 Win32 API/SDK ,就放心用 CreateThread;如果要用到C++ 运行时间库,那么就要使用 _beginthreadex ,并且需要在编译环境中选择 UseMul
阅读全文
摘要:PE 的意思是 Portable Executable(可移植的执行体)。它是 Win32环境自身所带的执行文件格式。它的一些特性继承自Unix的Coff(common object file format)文件格式。“Portable Executable”(可移植的执行体)意味着此文件格式是跨Win32平台的;即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识别和使用该文件格式。 PE文件在文件系统中,与存贮在磁盘上的其它文件一样,都是二进制数据,对于操作系统来讲,可以认为是特定信息的一个载体,如果要让计算机系统执行某程序,则程序文件的载体必须符合某种..
阅读全文
摘要:上次在《关于内联汇编的几个技巧》一文中只是简单地介绍了如何在C++中使用内联汇编,这一次先对上一次的文章作一补充,然后介绍如何使用MMX指令。 一、 内联汇编的一般原则:1、 自由使用通用寄存器;(EAX,EBX,ECX和EDX)2、 其它寄存器利用堆栈保留,使用,最后恢复;一般的像下面这样: __asm{ push ebp push esp ……….//使用EBP和ESP pop esp pop ebp} 二、 内联汇编__asm可以单独使用:例如:__asm mov eax,anyval1__asm mov ebx,anyval2 三、 函数返回值可以直接放到eax中,可以不理会警告例如:
阅读全文
摘要:有时我们的程序需要一些很高的执行效率或者执行系统底层的功能模块,这些关键的部分我们可以采用内联汇编直接插入汇编指令来达到我们的要求,以下是几个技巧与大家共同探讨. 1. 内联汇编嵌入VC语句:在VC中内联汇编非常方便,只需要按照如下格式__asm{ //汇编语句}请看如下示例代码void CAlcmemDlg::OnButton3() { DWORD d=(m_size*1024*1024)/sizeof(DWORD); DWORD*p=(DWORD*)m_p; DWORD s; m_pr.SetMin(0); m_pr.SetMax((float)d); m_pr.SetEnabled(T.
阅读全文
摘要:问题源自一段简单的代码: 在以上代码中,如果你输入:abcd,那么如你所望,你会看到"正确"的输出"c"。但是会有错误提示出现: Debug Error!Program: test.exeDAMAGE: after Normal block(#64) at 0x003429f8更离奇的是,如果将代码
阅读全文