- 博客(114)
- 资源 (19)
- 问答 (1)
- 收藏
- 关注
原创 【设计模式】图说设计模式
http://design-patterns.readthedocs.io/zh_CN/latest/index.html
2018-08-14 09:18:21 274
原创 【Inline Hook应用篇】限制打开文件选择对话框
我们要实现限制程序不允许发送文件,可以通过限制“文件选择对话框”实现。对于文件选择对话框的限制,基础点的就是Hook:GetOpenFileName、SHBrowseForFolder,对这两个API的Hook,可以限制市面上80%的文件发送,但对于QQ之类的在XP系统以上就不能成功限制了。具体是因为QQ在选择文件发送的对话框,采用COM接口来实现,所以要限制QQ发送文件,还需要额外Hook C...
2018-07-31 19:06:31 1343 1
原创 【Inline Hook应用篇】限制剪切板(针对文件类型)
限制剪切板,主要是限制不允许粘贴。我们对这两个系统API进行挂钩:GetClipboardData和OleGetClipboard//!<限制剪切板InitHook("user32.dll", "GetClipboardData", (DWORD)hook_GetClipboardData);InitHook("ole32.dll", "OleGetClipboard",...
2018-07-31 13:50:18 1062 2
原创 【Inline Hook基础篇】挂钩系统API
对于怎么挂钩系统API的实现,网上对此的解释有很多也很详细。这边暂不进行长篇大论,就简单的说明下原理:修改系统API的前几个字节,并写入 JMP 0x15a123 汇编指令,实现调用系统API自动跳转到我们的API的过程。对于API HOOK的实现,现成的有MHOOK、DETOUR等类似的框架实现。既然我们要清晰的认识具体怎么实现,那么我们就自己编写实现方式,不采用第三方库。其实也很简单,没啥...
2018-07-31 13:40:03 1466
原创 【Inline Hook基础篇】框架搭建
Windows程序员对于HOOK技术应该都很熟悉,HOOK俗称:钩子。即将自己想实现的功能,挂钩到系统的函数上,达到调用系统的函数时能自动执行我们实现的功能。对于HOOK,也分为:消息钩子,API钩子,内核钩子。消息钩子和API钩子都是在应用层(Ring3)上实现,内核钩子则是在内核层(Ring0)上实现的。此次开篇,逐重讨论下Inline Hook的实现方式,Inline Hook也是AP...
2018-07-31 10:27:52 1501 2
原创 【工具类】ZwQuerySystemInformation枚举进程
曾经基于兴趣搞过很多小功能,但后来工作中比较少用到,代码也就安静的沉没在磁盘中。最近打算整理下之前弄过的东西,也不算荒废之前的付出吧。。。void InitProcessList(){ ZWQUERYSYSSTEMINFORMATION MyZwQuerySystemInformation = (ZWQUERYSYSSTEMINFORMATION)GetProcAddress(Get...
2018-07-25 09:51:06 787
转载 【编程笔记】不同模块不同的堆
在linux下,每个进程只有一个heap,在任何一个动态库模块so中通过new或者malloc来分配内存的时候都是从这个唯一的heap中分配的,那么自然你在其它随便什么地方都可以释放。这个模型是简单的。但是在windows下面,问题变得复杂了。1、windows允许一个进程中有多个heap,那么这样就需要指明一块内存要在哪个heap上分配,win32的HeapAlloc函数就是这样设计的,...
2018-07-17 15:31:51 406
原创 【工具类】C++花式字符串操作
分割字符串void Separate(const wstring&amp; src, const wstring&amp; strSet, vector&lt;wstring&gt;&amp; container){ wstring::size_type pos = 0; pos = src.find_first_not_of(strSet, pos); w...
2018-07-06 14:03:23 711
原创 【编程笔记】随笔_20180619
经过了大半个月的忙碌,总算有了几天相对清闲的时间。之前大半个月基本上,天天在赶项目,一个接一个。虽然难度不大,但是也很烦,毕竟想要找个时间好好整理下思绪,5月末的时候,上头下了个死命令:最后4天,立马搞出个WebService服务,提供给以后项目做同步信息用。。。当初接到时候,内心还是有点小波澜,毕竟之前很少写过一整个服务器的框架,而且还是HTTP。不过出于自己对于新东西的好奇心,还是迅速的投...
2018-06-19 14:53:16 191
转载 【编程笔记】extern “C”和.def文件和__stdcall和__cdcel的作用
动态链接库的使用有两种方式,一种是显式调用。一种是隐式调用。 (1) 显式调用:使用LoadLibrary载入动态链接库、使用GetProcAddress获取某函数地址。(2) 隐式调用:可以使用#pragma comment(lib, “XX.lib”)的方式,也可以直接将XX.lib加入到工程中。DLL的编写 编写dll时,有个重要的问题需要解决,那就是函数...
2018-04-04 09:52:01 2620
原创 【工具类】格式化打印信息
#pragma once#include &lt;Windows.h&gt;void odprintf(PCWSTR format, ...){ va_list args; va_start(args, format); int len = _vscwprintf(format, args); if (len &gt; 0) { len +...
2018-03-21 10:24:27 391
原创 【MFC编程】屏幕截图,并保存成文件
获取屏幕位图代码:HBITMAP CScreenShotDlg::GetScreenBitmap(){ HDC hSrcDc; HDC hMemDc; HBITMAP hBitmap; HBITMAP hOldBitmap; int nWidth; //!&lt;有效宽度 int nHeigth; //!&lt;有效长度 int...
2018-03-15 15:49:40 1495
原创 【编程笔记】虚函数表
如果一个C++类中包含有虚函数,C++编译器在进行编译时,会通过动态联编机制,为这个类生成一个“虚函数表”。 我们通常把所有的方法都是纯虚函数的类,叫做:接口类。class BasicTable{public: virtual void Function1() = 0; virtual void Function2() = 0;};对于这个接口类里面方法的实现,...
2018-03-12 16:54:07 299
原创 【设计模式】单例模式之类模板实现
/** Copyright (c) 2018,Fzuim* All rights reserved.** 文件名称:SingletonObj.h* 摘 要: 单例模式,使用类模板* 用法示例 DECLARE_SINGLETON(CDestObject);** 当前版本:1.0* 作 者: Fzuim* 完成日期:2018年3月8日*/#pragma oncete...
2018-03-08 13:28:45 1816
原创 【设计模式】单例模式之线程类
好记性,不如烂笔头。对于单例模式的理解和应用还是需要多多实践,这次有感而发,写份基于线程运行的单例模式。 单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。 头文件:#pragma once#include &l...
2018-03-08 09:57:56 255
转载 Win32平台下OpenSSL编写SSL,TLS程序
一、简介:SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security)是IETF的TLS 工作组在SSL3.0基础之上提出的安全通信标准,目前版本是1.0,即RFC2246.SSL/TLS提供的安全机制可以保证应用层数据在互联网络传输不 被监听,伪造和窜改.ope...
2018-02-08 16:53:28 602
原创 【开源项目】FileZilla源码自带线程封装
#if !defined(AFX_THREAD_H__67621B15_8724_4B5D_9343_7667075C89F2__INCLUDED_)#define AFX_THREAD_H__67621B15_8724_4B5D_9343_7667075C89F2__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER >
2018-02-02 13:51:26 919
原创 【开源项目】POCO线程类分析
最简单的Poco线程调用方式:Thread thread;MyRunnable r;thread.start(r);关注的重点,就是MyRunnable:线程的运行体。class MyRunnable: public Runnable{public: MyRunnable(): _ran(false) { } void run() {
2017-12-04 14:00:56 859
原创 【开源项目】POCO线程池分析
一、接口 ThreadPool(int minCapacity = 2, int maxCapacity = 16, int idleTime = 60, int stackSize = POCO_THREAD_STACK_SIZE); /// Creates a thread pool with minCapacity thre
2017-12-01 11:14:04 3712
原创 【开源项目】微信后台PhxRPC编译教程
一、简介 PhxRPC是微信后台团队推出的一个非常简洁小巧的RPC框架,编译生成的库只有450K。 二、环境 首先,这份代码的编译得需在Linux的环境下,并检查下是否安装了git工具(命令行输入git,系统就会告诉你是否安装,并且提示你怎么安装)。环境确认无误。 三、获取源码 1、获取PhxRPC源码:git clone –recursive https://github
2017-11-30 19:15:23 685
原创 【MFC编程】MFC将ListCtrl列表导出到Excel-采用文件流写Excel兼容Html格式(不需要Excel环境)
如标题所言,将ListCtrl的内容导出到Excel文件。不需要Excel环境支持! TCHAR szFilter[] = _T("Excel文件(*.xls)|*.xls|所有文件(*.*)|*.*||"); CFileDialog file(FALSE, _T(".xls"), _T("TransForm"), OFN_HIDEREADONLY | OFN_OVER...
2017-11-29 17:30:14 1484
转载 【工具类】VLD(Visual LeakDetector)内存泄露库的使用
VLD简介由于C/C++语言没有所谓的垃圾收集器,内存的分配和释放都需要程序员自己来控制,这会给C/C++程序员带来一定的困难。当您的程序越来越复杂时,它的内存管理也会变得越来越困难。内存泄漏、内存越界是最常见的内存问题之一。 内存泄漏如果不是很严重的话,在短时间内对程序不会造成太大的影响,而且在进程终止的时候,所有分配的内存都会释放掉。但是对于长时间运行的程序,其破坏力是惊人的,从...
2017-11-29 10:49:29 296
原创 【算法】最长路径——百度2017校招机试题
解析:这道题目刚拿到手,很容易就确定是道优先搜索算法的题目,和我博客之前写的一道迷宫题目一致。根据题目,我们只要在输入的矩阵中找到最高点和最低点,然后从最高的地方开始4个方向的轮训,直到最后到达最低点。那既然是要求最长的奔跑路径,那么每次4个方向轮训肯定是要走当中值最大的那一个了。 #include <iostream>#include <stack>us...
2017-09-30 15:25:45 371
原创 【算法】等差数列——2017网易校招机试题
如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。小易现在有一个长度为n的数列x,小易想把x变为一个等差数列。小易允许在数列上做交换任意两个位置的数值的操作,并且交换操作允许交换多次。但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列 输入描述:输入包括两行,...
2017-09-08 10:26:59 458
原创 【网络编程】I/O完成端口模型详解
简答粗暴——完成端口例子:http://download.csdn.net/download/fzuim/9968393首先摘抄一段《Windows核心编程》I/O完成端口的一段话:Windows的设计目标是一个安全的、健壮的操作系统,能够运行各种各样的应用程序来为成千上万的用户服务。回顾历史,我们能够采用以下两种模型之一来架构一个服务应用程序。串行模型:一个线程等待一个客户发出的请求。当...
2017-09-07 14:56:26 1332
原创 【设计模式】简单工厂类模式<初探>
背景:主要是解决,在不同的情况下需要创建不同类型对象,然后对该对象进行操作。比如:任务类型,我们可能就分了:A任务,B任务,C任务...自然而然,我们首先会去定义个基任务类型:CBaskTask,然后派生出,CChildTask1、CChildTask2、CChildTask3...在不同的场景下,我们可能要建立不同的类型任务,然后对其进行操作。我们总不能用switch-case来...
2017-08-14 09:24:41 252
转载 ADO数据库编程
一、数据库操作准备// ---------------------------------------------------------------------------------------------------------------------------------1、导入ADO动态链接库 在工程的stdafx.h中加入如下语句: #import
2017-07-31 09:16:38 306
原创 【算法】深度优先搜索
以一道题目,作为介入点:定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5×5数组下所示:intmaze[5][5]={0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,...
2017-07-25 10:06:31 416
原创 【算法】打印顺序——2017华为招聘机试题
某个打印机根据打印队列执行打印任务。打印任务分为九个优先级,分别采用数字1~9表示,数字越大优先级越高。打印机每次从队列头部取出第一个任务A,然后检查队列余下任务中有没有比A优先级更高的任务,如果有比A优先级高的任务,则将任务A放到队列尾部,否则执行任务A的打印。请编写一个程序,根据输入的打印队列,输出实际打印顺序。函数原型:void printOrder(const int input[...
2017-07-21 15:50:57 11640 2
原创 【算法】括号匹配——2017华为招聘机试题
给定一个字符串,里边可能包含“()”、"{}"、“[]”三种括号,请编写程序检查该字符串的括号是否成对出现,且嵌套关系正确。输出:true:代表括号成对出现并且嵌套正确,或字符串无括号字符,false:未正确使用括号字符。分析:这个题目,如果有做过较多笔试题目的应该知道,简单的采用一个栈的特性,就能解决,左括号栈顶字符必须和第一个入栈的右括号字符匹配;#include "stdafx.h...
2017-07-21 15:40:22 2406
原创 【DLL注入】C++远程DLL注入
这是个很古老的DLL注入技术,采用的是创建远程线程的方式。将LdadLibraryA的函数地址当做线程的回调地址,线程参数采用待注入DLL的绝对路径值。这个参数我们得采用VirtualAllocEx和WriteProcessMemory的方式在目标进程进行内存空间的申请和写入。废话不多说,贴上自己写的代码:DLL注入函数: bool Dll_Inject(DWORD& v_d...
2017-06-28 16:53:54 1782
原创 【工具类】通过进程令牌启动新的进程
对于进程令牌(Token)比较常用的就是:explorer.exe这个进程的令牌,那么我们就以这个为例,通过explorer.exe的进程令牌启动一个新进程。启动进程的API为:CreateProcessAsUser。首先获取explorer.exe的进程令牌Token:lpName我们传:"EXPLORER.EXE",返回的令牌在hToken;BOOL GetTokenByName...
2017-05-27 15:33:25 940
原创 【编程笔记】UNICODE和UTF-8和ASCII互转
最近维护一个项目时发现,MFC的Cstring类型写到ini文本时,出现了乱码。因为写入的数据带有类似的特殊字符❀,由于ini默认创建的编码格式为GBK编码格式,但是这个特殊字符在默认的GBK编码下是不能识别的,会以?的形式存在。那这个特殊字符的编码是什么,暂时还没搞清楚。但是既然知道存在这样的bug,那么我们就有了相应的解决方法:在写入ini文件时,先将unicode编码的内容转成utf-8(u...
2017-05-25 16:10:23 3671
原创 C++操作Sqlite数据库
这篇文章,主要介绍的是:利用网上封装好操作sqlite3的类CppSQLite3DB,来进行数据的操作。由于源码是开放的,所以可以很清楚的知道执行open操作时,到底用了哪些Sqlite3接口,这里不再做详细介绍。1、下载CppSQLite3.h和CppSQLite3.cpp这个封装好的源码文件;2、下载Sqlite3文件,不知道的可以网上搜索下,主要有sqlite3.dll,sqlite3.h文...
2017-05-08 15:04:47 2090
原创 【工具类】C++封装线程类
/** \file * Thread.h,定义线程创建和停止接口,通过内联函数提供给其它模块使用** \author Fzuim** 版本历史* \par 2014-7-7*** */#pragma once#include <process.h>typedef unsigned int (WINAPI *THREAD_FUNC)(LPVOID lp...
2017-04-10 16:05:49 1465
原创 C++计算当前时间点间隔N天的时间(不使用CTimeSpan类)
涉及到有效期的设置,需要计算N天时间间隔的时间。其实这只是个工具代码,记录下与己方便,便是与人方便。。#define QUADPART 10000000i64std::string CalTime(int v_nTimeSpan){ char chTime[MAX_PATH] = {0}; SYSTEMTIME Curtime; SYSTEMTIME OutTime; GetL
2017-03-10 16:31:42 1823 1
原创 【设计模式】职责链模式<初探>
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。其思想很简单,考虑员工请假。公司的管理者一共有三级,总经理、总监、经理,如果一个员工要求请假,应该向主管的经理申请,如果请假天数在经理的职权内,那么经理可以直接批准,否则将申请上交给总监。总监的处理方式也一样,总经理可以处理所有请求。这就是典型...
2017-03-10 15:30:59 295
原创 【设计模式】观察者模式
观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它还有两个别名,依赖(Dependents),发布-订阅(Publish-Subsrcibe)。可以举个QQ订阅的例子,当QQ订阅号发表新文章的时候,即状态发生了改变,那些订阅的读者就会收到通知,然后进行相应的动作,比如去看文章,或者收藏起来。订阅号与读者之间存在种一对多的依赖关系。...
2017-03-10 13:57:54 414
原创 C++通过进程名获取进程句柄
记录下一段,比较常用的代码。#include <TlHelp32.h>//通过进程ID获取进程句柄HANDLE GetProcessHandle(int nID){ return OpenProcess(PROCESS_TERMINATE, FALSE, nID);}//通过进程名获取进程句柄HANDLE GetProcessHandle(LPCWSTR lpN...
2017-03-09 09:54:18 18371 1
翻译 FileZilla网络配置
FileZilla网络配置指南为FTP设置网络组件对于在LAN(局域网)外使用并不重要。 由于存在这么多防火墙和路由器,给出适合每个用户的详细的逐步指令是不切实际的。 重要的是了解FTP协议的基本知识,以便配置FileZilla和相关的路由器和/或防火墙。 本文档描述了FTP的历史以及协议的某些方面的工作原理。 仔细阅读它将为您节省大量的设置FTP的麻烦。1. 背景1.1 历史背景1.2 技术背
2017-02-24 17:31:13 13986
快速内存(内存复用)技术.zip
2020-01-02
libevent创建客户端&服务端demo
2019-03-20
C++ Doodle Jump源码
2017-03-06
TCPSocketSelect模型框架
2016-12-14
win10任务管理器,隐藏指定服务?
2019-03-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人