C++编程
文章平均质量分 55
jackey3Lin
这个作者很懒,什么都没留下…
展开
-
m_hWnd和this指针
一)m_hWnd① m_hWnd这个成员变量,最早是定义在类CWnd中,而且是类CWnd的第一个数据成员,先看一下MSDN的解析: The handle of the Windows window attached to this CWnd. The m_hWnd data member is a public variable of type HWND.由此可知,它是窗口类的一个句柄转载 2015-04-09 12:01:39 · 553 阅读 · 0 评论 -
MSVC CRT运行库启动代码分析
在程序进入main/WinMain函数之前,需要先进行C运行库的初始化操作,通过在Visual Studio中调试,通过栈回溯可以找到位于crt0.c中的_tmainCRTStartup函数,这个函数负责进行一些初始化操作,_tmainCRTStartup的上一层调用来自kernel32.dll。这里简单分析一下crt0.c的代码。实际上,C运行库代码又有两个版本,如果是静态编译的话代码位于c转载 2015-11-19 15:40:50 · 1041 阅读 · 0 评论 -
浅述extern C的用法 和 无导入表PE的实现
一:extern C的用法#ifdef __cplusplus //如果下面的myFunc函数的实现是在c文件中,则当需要和cpp混编时这些代码是必不可少的extern "C"{#endifvoid myFunc();#ifdef __cplusplus }#endifextern "C"包含双重含义,从字面上可以知道,首先,被它修饰的目标是"extern"原创 2015-10-09 14:37:20 · 618 阅读 · 0 评论 -
Windows NT WinLogon Notify(转载+修改版)
方法一:在NT系列Windows操作系统中,恶意软件可以通过关联Winlogon特定的事件来使自身被启动,如Lock,Logoff,Logon,Shutdown,StartScreenSaver,StartShell,Startup,StopScreenSaver,Unlock等,这甚至能够使得恶意软件在安全模式下被加载。WinLogon的通知事件在注册表的位置是:HKEY_LOCAL_M转载 2015-11-20 14:52:04 · 1251 阅读 · 0 评论 -
通过异步过程调用(APC)注入DLL
关于APC的介绍,可以参考MSDN对Asynchronous Procedure Calls的介绍(索引APCs),下面是简单翻译的一段文字。APC(Asynchronous Procedure Calls,异步过程调用)是指在一个特定的线程环境中异步的执行代码。当一个APC被添加到一个线程的APC队列的时候,系统会产生一个软中断;当线程下一次被调度的时候APC函数将被执行。操作系统产生的AP转载 2015-11-20 15:44:00 · 619 阅读 · 0 评论 -
vs2010出现如下错误: VCEnd" exited with code 1.
1> The system cannot find the path specified.1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0Microsoft.CppCommon.targets(113,5): error MSB3073: The command "copy C:projectscompnametckappappnameDeb转载 2015-12-14 16:19:34 · 2126 阅读 · 0 评论 -
值得推荐的C/C++框架和库
值得推荐的C/C++框架和库【本文系外部转贴,原文地址:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm】留作存档下次造轮子前先看看现有的轮子吧值得学习的C语言开源项目- 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们转载 2015-12-29 14:13:59 · 633 阅读 · 0 评论 -
VS2013 中MFC程序编译过程出现 RC2108错误
之前一个在vs2010下编译运行都正常的程序 ,后面鉴于编译器换成了vs2013,将之前的程序拿过来编译,有些小问题但解决后能通过编译,程序运行正常,但问题在于当我对该项目中的控件进行修改并保存后再编译,就出现了如下的问题:error RC2108: expected numerical dialog constant无论如何都提示这个错误,当你撤销修改编译都一样,拿到vs2010下也原创 2015-12-15 15:57:16 · 2794 阅读 · 0 评论 -
类构造函数小谈
最近做一个项目,因为在基类构造函数中创建了一个新的线程,导致最后程序崩溃等待。。。 此处的意思并不在于不能做构造函数中创建线程,而是提醒自己以后在构造类时,尽量多构造成员函数,尽量减少全局函数的使用,不然在多线程的环境下,很多时候你完全感受不到错误的原因所在,谨此提醒!谨记!原创 2016-01-17 17:42:36 · 462 阅读 · 0 评论 -
DLL共享数据
在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的,因为所有的进程用的都收同一块地址空间;而在Win32环境中,情况却发生了变化,每个进程都有了它自己的地址空间,DLL函数中的代码所创建的任何对象(包括变量)都归调用它的进程所有。当进程在载入DLL时,操作系统自动把DLL地址映射到该进程的私有空间,也就是进程的虚拟地址空间,而且也复制该DLL的全局数据的一份拷贝到该进程空间。(在转载 2015-11-30 13:08:59 · 730 阅读 · 0 评论 -
VS ToolBar怎样删除按钮?
拖拽到左边空白的地方就ok啦!转载 2015-12-17 18:00:38 · 692 阅读 · 0 评论 -
关于普通端口映射的原理
对于端口隐射,我们并不陌生,因为在很多场合,我们都会使用到它,比如:交换机、比如路由器、比如内网转外网等但如果用编程者的角度来解释的话,可能大多数人会有点晕,到底该如何实现这样的功能呢?下面我根据自己的理解站在 远程控制类软件 的角度来解释一下普通数据转发的端口映射:大致的原理如下:假设B处于内网且为服务端所在机器,A处于外网,且为控制端所在机器,A想访问B的338原创 2016-01-06 16:46:35 · 2854 阅读 · 0 评论 -
代码注入技术
代码注入相对DLL注入来说更加隐蔽,但是对技术的要求要更高,个人以为代码注入最好注入稳定的Shellcode。代码注入需要用到的API有VirtualAllocEx、WriteProcessMemory、CreateRemoteThread,类似于DLL注入。通常VirtualAllocEx和WriteProcessMemory会被调用两次,分别是处理线程函数以及线程函数参数,然后通过调用Crea转载 2015-11-18 17:47:52 · 897 阅读 · 0 评论 -
winrar 命令行操作汇总(持续更新)
第一条(查找并显示123.rar中lpk.dll文件):cmd /c C:\PROGRA~1\WinRAR\rar.exe vb "C:\123.rar" lpk.dll第二条(查找并显示123.rar中lpk.dll是否存在):cmd /c C:\PROGRA~1\WinRAR\rar.exe vb "C:\123.rar" lpk.dll | find /i "lpk.dll"原创 2015-12-10 14:19:07 · 738 阅读 · 0 评论 -
CComboBox使用技巧:
1. CComboBox风格CBS_AUTOHSCROLL //自动水平滚动条CBS_DISABLENOSCROLL //选中时始终显示滚动条 CBS_DROPDOWN //下拉式 CBS_DROPDOWNLIST //下拉列表 CBS_HASSTRINGS //为字符串提供GetText()函数CBS_LOWERCASE //转换为小写 CBS_NOINTEGRALHEIGH转载 2015-11-02 15:58:57 · 1998 阅读 · 0 评论 -
网络字节顺序和本机字节顺序小谈
字节顺序定义 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、大端两种字节顺序。小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处;大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。(一个字节的数据当然就无需谈顺序的问题)。在大部分的开发中我们不需要考虑字节序的问题。唯有在跨平台以及网络程序应用中字节序才是一个应该被原创 2015-07-29 14:49:41 · 1129 阅读 · 0 评论 -
TAKEOWN 和 ICACLS 的用法
TAKEOWN:这个软件是win7自带的工具,利用它可以获得对文件或文件夹的所属权,操作如下:takeown /f 文件名 获取该文件的所属权或者takeown /f /r /d n 文件夹 获取整个文件夹及其下面子目录文件的所属权ICACLS:这个也是win7下自带的工具,利用它可以获得文件或文件夹的控制权,操作如下:ic原创 2015-07-22 16:17:41 · 9688 阅读 · 0 评论 -
记录wcslen,strlen,sizeof,_coutof等的用法和区别
记录wcslen,strlen,sizeof,_coutof等的用法和区别wcslen: 返回宽字节字符串的字符个数,其计算方法是从该字符串开始位置处到遇到结束符终止,因此当没有对其赋值时,其返回的字符个数可能会出错。 strlen:ascll字符串的长度计算函数,基本原理同上。 sizeof:返回字符串、基本类型数据的字节数,该大小是根据字符串声明时分配的大小决定。 _coutof:返回字符原创 2015-07-23 17:35:15 · 1784 阅读 · 0 评论 -
关于MFC中CString的用法小结
今天被两个问题折腾了好久,一个是关于结构体数组传递值的问题,就是不知道结构体指针传递形参到子函数后,如何被子函数分解并继续使用,测试过程中老是只能在结构体数组的第一个元素进行操作,后面的操作就会提示“访问越界”之类的提示,真是伤透了脑筋。第二个问题是关于遇到结构体数组不知道如何直接进行传递值的问题,我思考了很久,也查阅了不少资料,终于找到了下面一条比较麻烦的方法,不过测试基本可行,先贴原创 2015-08-17 17:19:05 · 1888 阅读 · 0 评论 -
关于sprintf_s的使用问题
在开发一个项目过程中,由于使用了最新版的开发环境,因此sprintf函数默认被开发环境禁止,出于养成好习惯的心思,我开始使用了sprintf_s函数,但这个函数着实坑了我一把,见下面代码:DWORD mcoluncunt = 500;LPBYTE mConfigInfoList = (LPBYTE)zalloc(mcoluncunt*200);CString mTemp = "test f原创 2015-08-18 14:20:31 · 2025 阅读 · 1 评论 -
搭建VS2010+ACCESS2003环境遇到的问题
1、 提示连接数据库失败,错误信息:无效指针解决方法:可能是没有进行COM初始化,应该在使用下列代码前: _ConnectionPtr m_pConnection; _variant_t RecordsAffected; _RecordsetPtr m_pRecordset;加入:CoInitialize(NULL); //初始化 如下原创 2015-08-12 14:44:51 · 687 阅读 · 1 评论 -
VS2010-2013 fatal error LNK1117: syntax error in option 'pdbpath:none'
把工程文件XX..vcxproj和XX.vcproj两个文件所以有pdbpath:none的地方改成/PDBALTPATH:%_PDB%就可以了。1)XX..vcxproj改成(两个地方):/PDBALTPATH:%_PDB%(AdditionalOptions)2)XX.vcproj改成:AdditionalOptions="/PDBALTPATH:%_PDB%"够详细了,不懂at我转载 2015-10-12 17:16:48 · 1095 阅读 · 0 评论 -
关于STRUCT命名的问题
c++中经常会用到各种struct结构,有微软提供的,也有自定义的,但这次在一个项目中遇到了一个比较奇怪和奇葩的问题,就是在定义struct结构时的规则上出现了问题,看下面的例子:struct { CString receivecout; CString sendcout;}mailcoutInfo;我若向上面的书写规则命名结构体,则在后面使用时会出现 mailcoutIn原创 2015-08-17 13:32:45 · 2623 阅读 · 0 评论 -
使用def文件简化dll导出
在C++中,我们可以通过 __declspec(dllexport) 将函数导出为Dll中供其它程序使用,例如: _declspec(dllexport)int add(int a,int b);在这种方式下,如果调用该dll的是一个c++程序(同一个编译器的版本)是没有问题的。但是,如果调用该dll是一个其它语言的程序(如C#、VB),则会出错。究其原因,是因为在C++转载 2015-11-20 14:57:45 · 539 阅读 · 0 评论 -
SYSTEM权限引发的系列问题
Windows下的服务程序(S程序)都是以SYSTEM权限启动的,通过服务程序启动的程序(N程序)自然也会是SYSTEM权限的,而如果开发N的时候没有考虑到SYSTEM权限这种情况,那么有可能N就无法正常的运行于SYSTEM权限下。场景:客户需要在服务下运行我的程序,在这样的情况下我的程序崩溃了:(为了方便调试,我给程序添加了崩溃转储功能,把DUMP文件拿回来之后用Windbg调试了一下,发现转载 2015-11-18 15:56:02 · 5091 阅读 · 0 评论 -
一种基于TLS的高级反调试技术
盗版行为日益猖獗,严重影响到软件开发者和开发商的知识产权及利益,反盗版技术的重要性也越来越引起人们的重视。在反盗版技术中,起最大作用的当属反调试技术。然而传统的反调试技术都存在一个弱点:他们都在程序真正开始执行之后才采取反调试手段。实际上在反调试代码被执行前,调试器有大量的时间来影响程序的执行,甚至可以在程序入口处插入断点命令来调试程序。对于使用C/C++语言编译的程序来说,问题通常会更严重,在执转载 2015-12-10 16:18:04 · 737 阅读 · 0 评论 -
关于CreateEvent的简单理解
CreateEvent 用来创建或打开一个命名的或无名的事件对象,对于它的其他解释,请自行百科,这里只简单描述它的两种常用用法!CreateEvent 的官方定义如下:HANDLE WINAPI CreateEvent( _In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes, //安全属性 _In_ BOOL原创 2015-12-22 16:13:14 · 6161 阅读 · 0 评论