- 博客(46)
- 收藏
- 关注
转载 Visual Assist X使用
Visual Assist X的用法open file in solution 打开文件中的解决办法open Corresponding file 打开相应文件list methods in current file 列表方法在当前文件file symbol 文件标记find references 找到参考资料find references in file 找到参考文件clone find referenc...
2020-08-20 10:15:49
425
转载 MFC中用c++实现连接SQLServer2008(附操作)
一.安装好vs2015和SQL Server 2008 R2(各版本区别不大)所以以我现有软件为基础向大家展示一下。二. 先配置SQL Server 2008 ...
2020-08-07 16:11:11
1634
转载 ADO编程详解(C++)
一、概述 ADO即Microsoft ActiveXData Object,是Microsoft继ODBC之后,基于OLE DB技术的一种数据库操作技术,使您能够编写通过 OLE DB 提供者对在数据库服务器中的数据进行访问和操作的应用程序。ADO同OLE DB、数据库之间的关系可以用下图来表示...
2020-07-24 17:03:30
654
原创 Win32线程同步 - 原子访问
1. 对原子访问的说明情形:线程同步中大部分情况与原子访问有关。作用:原子访问可以保证一个线程在访问资源的同时没有其他线程访问同一资源。原因:Windows是抢占式多线程环境,多个线程同时操作同一个全局变量时,可能并不是如预期中的先后执行,而是抢占式执行,最终结果难以预期。2. 未使用原子访问时,代码示例及执行结果说明#include "stdafx.h"#include &l...
2018-10-10 16:20:41
431
原创 Win32线程同步 - 事件
/** 说明:线程同步中Event对象的使用* 特点:核心对象* 目的:成为激发或未激发状态,两种状态完全由程序控制* 执行状态:* 1. 线程编号的输出没有重复,说明主线程与子线程达到了同步。* 2. 全局资源的输出是递增的,说明各子线程已经互斥的访问和输出该全局资源。*/ #i...
2018-10-09 16:57:45
245
原创 Win32线程同步 - 信号量
/** 说明:使用信号量进行线程同步* 特点:允许多个线程在同一时刻访问同一资源* 解释:Win32中的Semaphore可以被锁住最多n次,其中n是Semaphore被产生时指定的* 使用:1.多个线程可以同时锁定一个semaphore,不存在拥有权概念* 2.一旦Semaphore现值...
2018-10-09 16:40:02
832
1
原创 Win32线程同步 - 互斥器
/** 说明:Mutex(互斥器)的使用* 特点:1.一个时间只能有一个线程拥有mutex,这点类似critical section* 2.可以跨进程使用,需要创建时指定名称* 3.可以指定“结束等待”时间长度*/ #include <iostream>...
2018-10-09 16:34:07
214
原创 Win32线程同步 - 临界区(关键段)
/** 临界区(关键段):线程同步方式,用于限制“公用代码”一次只能被一个线程使用* 使用示例:全局变量* 使用限制:只能用于同一个进程中的线程,不能跨进程同步*/#include <windows.h>#include <stdio.h>#include <process.h>#includ...
2018-10-09 16:21:54
382
原创 硬盘安装双系统
1、工具准备分区助手:一款免费、专业级的无损分区工具,提供简单、易用的磁盘分区管理操作。WinToUSB:将Windows操作系统从ISO/WIM/ESD/SWM文件或者CD/DVD光驱安装到USB移动硬盘或者U盘,还可以将当前操作系统(Windows 7 及以后版本)克隆到USB移动硬盘或者U盘。EasyBCD:修复系统引导,设置多系统启动。使用以上三款工具,能完成很多系统相关的
2017-02-24 09:57:09
1019
原创 Git 学习
教程地址:http://www.liaoxuefeng.com/wiki/0x0.安装Windows:https://git-for-windows.github.io0x1.运行Git - > Git Bash0x2。输入名称和电子邮件$ git config --global user.name“Flywish”$ git config --glob
2017-01-18 21:43:46
452
原创 【MFC】 多国语言设置
设置方法: 1、准备好中文对话框 2、在资源视图中右键中文对话框,选择“插入副本”,选择目标语言。 3、在对话框副本中进行修改成对应的目标语言 4、判断系统语言类型LANGID lid = GetSystemDefaultLangID();5、根据获取到的系统语言设置对应语言的应用程序 //多国语言支持 LANGID lid = GetSystemDefaultLangID();
2017-01-13 18:07:20
4149
转载 定时消失的对话框API函数 -- MessageBoxTimeout
我们在微软官方文档上找不到MessageBoxTimeout()的记录,它是由user32.dll导出的。 使用时只需在.cpp文件中包含了以下部分,就可以调用MessageBoxTimeout。// 添加MessageBoxTimeout支持extern "C"{ int WINAPI MessageBoxTimeoutA(IN HWND hWnd, IN LPCSTR lpText
2016-12-29 15:25:48
7766
2
转载 数据在内存中对齐方式 #pragma pack
在程序中,有的时候我们定义结构体的时候,要用#pragma pack(push,1) & #pragma pack(pop)类似代码将结构体包起来。一般形式如下:#pragma pack(push,1);struct A{ } ;#pragma pack(pop);这么做有什么目的呢? 注:下列内容来自网络。2 #pr
2016-12-26 17:31:30
441
转载 从一个logger引发的lib和dll探讨
一. 问题来由项目写了个logger,本来是代码的,大家单独包含都可以使用,但是后来项目整合,每个人的部分打成lib,而前端将logger打包一起编译成lib,后台按道理应该是不用包含 .cpp 文件也可以用到logger,因为如果后台也包含并编译,应该会和前端的编译单元中的 logger 重定义。但是奇怪的是,非但不重定义,反而这边获取不到 io 流 (流是静态变量),匪夷所思,
2016-12-07 10:39:21
541
转载 VC++动态链接库(DLL)编程深入浅出
1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DL
2016-03-08 16:40:10
3727
原创 记录一个简单的ASM程序破解过程
1、双击打开程序随意输入(333),点击check,弹出MessageBox2、将程序拖入PEid,查看编译器、链接器、PE区段、导入表等。 导入表中函数如下:3、将程序拖入OD中,根据以上信息,搜索MessageBoxA,双击进入,下断F9运行,断在Mess
2016-02-23 10:44:25
6056
原创 逆向分析细节总结
1、函数识别及参数传递 Call指令 == 跳转指令+返回地址 Call指令跳转的地址即被调用函数的起始地址 函数参数传递方式: 1)堆栈传递参数 2)寄存器传递参数(__fastcall、thiscall(寄存器传递this指针)) 参数入栈顺序,平衡堆栈: 1)C/C++和MFC程序默认使用__cdecl调用约定,参数从右到左入栈,由调
2016-02-23 00:45:38
1012
原创 mian( )函数查找(Windows下逆向分析)
以 Visual Studio编译的Hello World程序为例:1、字符串分析法 搜索字符串Hello World并进入,跳转到上层函数(信息窗口),寻找标志:函数参数(main函数后两个参数是指针),exit等。2、API下断栈回溯法 找到main函数中的Hello World并进入,在函数入口处下断,F9运行,查看堆栈情况,找到
2016-02-22 07:59:36
1276
原创 进程与线程
1、进程介绍 进程是60年代初首先由麻省理工学院的系统和IBM公司的CTSS/360系统引入的。进程是操作系统结构的基础,是一个正在执行的程序,是计算机中正在运行的程序实例,是可以分配给处理器并由处理器执行的一个实体。 进程是惰性的,它仅仅是一个包含有线程的容器,其本身并没有执行代码的能力,因此每个进程在创建之初都会创建一个主线程用于执行代码,如果此主线程结束
2016-02-21 23:09:19
417
原创 GDI编程与动态链接库
1、GDI(图形设备接口) Windows应用程序不支持标准输出函数(如printf),应用程序输出包括文字在内的所有数据都是以图形方式“绘制”到窗口上。Windows通过图形设备接口GDI对图形输出进行支持。GDI由函数和相关数据类型、宏定义以及结构体组成。主要有:获取和释放设备描述表函数、获取设备信息函数、使用GDI绘图对象函数、绘图函数、设置和获取设备参数函数等,其显
2016-02-20 00:46:19
898
原创 Windows窗口及对话框
1、Windows窗口介绍 在Windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表。系统的窗口管理器通过这个list来获取窗口信息和管理窗口,这个数据结构中有四个数据用来构建list,即child、sibling、parent、owner四个域。而窗口之间的关系有两种:owner-owned(拥有-被拥有关系)、parent-child(父-子关
2016-02-18 22:19:46
6685
原创 Windows编程概念及框架
1、控制台程序与Windows窗口程序比较 在控制台程序中,入口函数是 main 函数,预处理宏为_CONSOLE,用于在预处理时包含控制台程序用到的一些宏或头文件; 在Windows窗口程序中,入口函数是 WinMain 函数,预处理宏为_WINDOWS; Windows系统为开发者提供了很多函数,这些函数被包含在Windows软件开发工具包(全称:S
2016-02-14 13:59:54
1767
原创 OPCode及汇编
1、OPCode 操作码(Operation Code,OPCode):描述机器语言指令中,指定要执行某种操作的机器码。 OPCode与指令的对应关系: 同类型的指令,OPCode不一定相同; B8 01000000 mov eax,1 B8C7 mov eax,edi OPCode相同,
2016-01-26 20:13:07
9965
原创 80X86寻址方式与常见汇编指令
1、指令 指令:操作码和操作数组成(不定有操作数); 操作码:执行操作,用一个唯一的助记符表示,对应着机器指令的一个二进制编码; 操作数:操作对象,可以是数值,寄存器或存储器地址; 助记符格式: 操作码 目的操作数,源操作数;注释 指令操作数: r8:任一8位通用寄存器; r16:任一16位通
2016-01-25 21:31:08
3794
原创 汇编基础
前面粗略地整理了C和C++的一些基础性的知识点,在这过程中也加深了其中一些重要知识点的理解。虽然还远谈不上有多么地深入浅出,至少还算符合当初写博客的初衷:乐于分享,利人利己!接下来对汇编语言作一个大致的整理和总结。1、汇编语言的特点 a.与机器相关性 b.执行的高效率 c.编程的复杂性 d.调试的复杂性2、数据表示
2016-01-25 17:01:02
582
原创 命名空间与异常处理
1、命名空间 命名空间是一个逻辑上的类型组织系统,用来对程序中的类型进行逻辑上的分组,并使定义在同一个命名空间中的类可以利用命名空间直接相互调用。C++有命名空间机制,关键字为 namespace。库或程序中每个C++定义集被封在一个命名空间中,若其他定义中有相同的名字,则由于在不同的命名空间不会产生命名冲突。 命名空间用来限定名称的解析和使用范围解决同名冲突。 四个由大到小的作用域
2016-01-24 20:51:29
1256
原创 输入输出流、模板
1、输入输出流 在C++中,用面向对象的方法实现流。为了实现流,从上到下定义了几种流类: a. ios 是抽象流基类 b. ios 的派生类 istream 是输入流基类 c. ios 的派生类 ostream 是输出流基类 d. iostream 是输入/输出流类,由 istream 和 ostream 两个基类共同派生出来 在 I/O 流类中定义了若干成员函数,其中两个比较特殊的成员:
2016-01-24 12:33:52
798
原创 继承与多态
1、派生与继承 在C++中,继承分为单继承和多继承: 单继承:派生类只有一个直接基类的继承方式; 多继承:派生类有多个直接基类的继承方式; 派生类定义格式: class : 继承方式有三种: public 公有继承:基类中的每个成员在派生类中保持同样的访问权限; pr
2016-01-23 22:03:20
453
原创 运算符重载
1、 特性 使用运算符重载,可以将C++运算符的定义扩展到运算分量为对象,即将对象作为操作数进行运算。 运算符重载实际上通过定义一个函数来实现,即运算符重载函数,只不过用运算符表示。在定义运算符重载时,要注意到重载后的运算符仍然保持原有的优先级、结合性,并且操作数和语法结构不变,那么运算符重载不能创造新的运算符也就理所当然了。按照我的想法,我们暂时可以这样理解:既然作为运算符重
2016-01-23 15:23:13
638
原创 静态成员与友元函数
1、静态成员 由来:使用全局对象实现数据共享,由于其处处可见,不够安全,故可使用静态成员实现类的多个对象之间的数据共享。 包括:静态数据成员、静态成员函数 特点:静态数据成员属于类,而不属于某个对象独有,类的所有对象共享静态数据成员 静态数据成员使用关键字static,在类体中声明,在类体外定义,以分配存储
2016-01-22 21:50:19
2048
原创 构造与析构函数
1、构造函数 作用:创建类对象,并初始化其成员。(可定义多个进行重载) 注:构造函数可以有参数,无返回类型,不能是虚函数,在类体外定义时其函数名前加上“类名 : :”,可重载 若一个类对象是另一个类对象的数据成员,那么在构造函数创建对象时,作为数据成员的类对象要先调用自身的构造函数;(局部到整体)2、析构函数
2016-01-22 14:04:26
547
原创 类的声明、定义及应用
1、类是对现实世界中事物的抽象,将具有相同属性的一类事物称作类,类的实例称为对象。类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体,类具有对数据的抽象性、隐藏性和封装性。类对象的行为类的内部数据和方法决定,外部行为通过操作接口实现。2、类、对象的定义 包括两部分: a.说明部分:数据成员、成员函数 b.实现部分:成员函数实现 访问权限: public(公有)
2016-01-21 20:22:49
1433
原创 类与面向对象
前面简介似的整理完了C语言的笔记,真是汗颜,不过这样开始也要比一直就那么放着要有意义,这段时间就趁着所学还未完全冷却,好好回忆、整理、总结一下吧!接下来是C++的笔记...1、从 C 到 C++ C++是在C语言的基础上,增加了面向对象程序设计的支持,是C语言的超集。与C相同的是,C++程序结构同样采用函数驱动机制,实现类的封装,数据隐藏,继承及多态。既可以进行过程化程序设计,又可进行面向对象程序
2016-01-21 15:32:14
362
原创 文件操作
1、基础知识 文件:存储在计算机外部存储器中数据的集合 操作:计算机根据文件名对文件进行操作 单位:C语言将文件看作字符序列,即字符流,其基本存储单位是字节 形式:按ASCII码存放,称为ASCII文件(文本文件) 按二进制存放,称为二进制文件 二者的比较: ASCII文件:字节与字符一一对应,方便字符处理和阅读,占用存储空间较大 二进制文件:节省存储空间,无需ASC
2016-01-20 15:08:58
374
原创 内存管理
1、C程序运行时的内存结构 静态数据区:全局变量,static修饰的局部变量 代码区 : 程序指令,大部分字面常量 栈区 :函数形参,局部变量(大部分) 堆区 :动态分配的内存 寄存器组 :函数形参,局部变量(小部分)2、变量生存期 定义:一个变量占有内存空间的时间段 C++将变量的生存期分为3种:静态、自动、动态 静态生存期:全局变
2016-01-20 10:54:36
292
原创 结构体、联合体、枚举
1、结构体 结构体类型一般形式: struct 结构体名 { 类型名1 成员名1; 类型名n 成员名n; }; struct :结构体类型标志 结构体名:用户定义标识符 成员 :结构体组成成分,成员名命名规则与变量名相同 注:定义结构体类型,只是说明结构体的组成,编译系统并未给其分配内存空间,就像系统不为 int 等类型本身分
2016-01-19 22:07:31
874
原创 数组、指针、字符串
1、数组 数组元素个数必须是一个固定的值,可以是整形常量、符号常量及整形常量表达式 数组下标可以是整形常量、整形变量或者整形表达式 数组可以全部初始化,此时元素个数可以省略;也可部分初始化,元素个数不可省略 数组初始化的赋值方式只能用于数组的定义,定义之后再赋值只能一个一个元素赋值2、内存地址 计算机内存是以字节为单位的存储空间,内存的每一个字节都有一个唯一的编号,这个编号就是地址。当C程序中定义
2016-01-19 20:04:56
549
原创 函数
1、C程序由一个主函数和其他函数构成,主函数是必须的,其他函数被主函数调用或者其他函数之间相互调用 分为三类:主函数main() 库函数 自定义函数 C程序从主函数开始执行,其他函数只有在被主函数或其他正在执行的函数调用时才能被程序执行,执行后返回调用
2016-01-19 18:20:34
366
原创 编译预处理
1、所有编译预处理命令均以“ # ”开头 编译预处理共分为: a.宏定义 b.文件包含 c.条件编译2、宏定义 作用:在编译预处理时,将源程序中所有标识符替换成语句序列 分为:有参宏 和 无参宏 无参宏:纯替换 示例:#define PI 3.14 有参宏: 源程序中所有标识符替换成字符串,并将字符串中的参数用实际参数替换 #define 标识符(参数表) 字符串 #define S(a
2016-01-19 14:22:32
483
原创 变量初窥
1、局部变量 定义在函数内部,只对当前函数有效 与外部变量重名时,以内部为准(局部作用域)2、全局变量 定义在函数外部,对所有函数有效 作用域:从定义到程序结束 作用:主要用于函数之间数据的传递 注:全局变量所有函数共享,其值发生改变时,将会造成全局的影响,即影响程序
2016-01-19 11:05:12
338
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人