- 博客(51)
- 收藏
- 关注
原创 单实例
#ifndef DATA_H#define DATA_Hclass Data{private: Data();public: static Data* instance(); static void release(); inline int cellSize(); inline void setCellSize(int cellSize);...
2018-03-30 10:17:09
562
原创 QT——记事本
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QFile>class QTextEdit;class MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWindow(QWidget *p...
2018-03-27 11:54:20
810
原创 QT练手
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QLineEdit>class Widget : public QWidget{ Q_OBJECTpublic: Widget(QWidget *parent = 0); ~Widget();public slo...
2018-03-25 13:21:05
653
原创 MFC
#include <afxwin.h>class MyApp :public CWinApp//app类{public: virtual BOOL InitInstance();//重写父类的初始化函数};class MyFrame :public CFrameWnd//窗口框架类{public: MyFrame();//窗口类构造函数 DECLARE_M...
2018-03-22 11:43:10
269
原创 C++链表实现
#include <iostream>#include <malloc.h>#include <windows.h>#define SUCCESS 1 // 执行成功#define ERROR -1 // 执行失败#define INDEX_IS_ERROR -2 // 错误的索引号#define...
2018-03-20 19:12:31
317
原创 指向类成员的指针
在C++语言中,可以定义一个指针,使其指向类成员或成员函数,然后通过指针来访问类的成员。这包括指向属性成员的指针和指向成员函数的指针。 指向非静态数据成员的指针在定义时必须和类相关联,在使用时必须和具体的对象关联。由于类不是运行时存在的对象。因此,在使用这类指针时,需要首先指定类的一个对象,然后,通过对象来引用指针所指向的成员。 与普通意义上的指针不一样。存放的是偏移量,通过对...
2018-03-05 21:19:05
461
原创 static
#if 0static全局变量 外延性 static 作用域 仅限于本文件局部变量 auto 生命周期 存储位置#endif#if 0static 在类内部的表现,用来实现族类对象间的数据共享。在生成对象的时候,普通数据员才有空间。而 static 成员在类志明的时候,就己经开辟了空间(data rw)static 数据成员,既属于类,也属于对象,但终...
2018-03-05 19:54:18
215
原创 动态绑定、多态
1、什么是绑定? 绑定就是将函数调用与地址关联起来. 只有virtual的函数是动态绑定,其它都是前期绑定。动态绑定也称为:多态,即用不同类型的指针访问一个对象的虚函数时,体现出不同的行为。 class Base { public: int x; public: Base() { x = 100; } ...
2018-03-04 20:49:21
512
原创 虚函数表之多继承有函数覆盖
多继承有函数覆盖 struct Base1 { public: virtual void Fn_1() { printf("Base1:Fn_1...\n"); } virtual vo...
2018-03-04 17:30:08
397
原创 以挂起的方式创建进程
BOOL CreateProcess( LPCTSTR lpApplicationName, // name of executable module LPTSTR lpCommandLine, // command line string LPSECURITY_ATTRIBUTES lp...
2018-03-01 19:19:22
2855
原创 进程句柄和线程句柄的继承
//CreateProcess的第3、4个参数为结构体,控制子进程,是否能继承主进程句柄表中存储的,其它子进程的进程句柄或线程句柄 //创建进程时,会产生一个进程内核对象和线程的内核对象,进程和线程也是内核对象 //例如,主进程A创建了1、2子进程, 1、2的进程句柄和线程句柄,就存储在主进程A的内核对象句柄表中BOOL CreateProcess( LPCTSTR ...
2018-03-01 16:53:10
1640
原创 信号量
创建信号量 HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName ); 函数说明: 第一个参数表示安全控制...
2018-03-01 14:42:05
176
原创 事件
//事件和互斥体的区别在于,互斥体创建即为已通知状态,而事件初始状态可以设置,即第三个参数//第二个参数如果为TRUE,事件被捕捉后,需要自己调用ResetEvent将事件标记为未通知,如果为False,会自动调用ResetEvent将事件标记为未通知// 1、事件对象的创建 HANDLE CreateEvent( LPSECURITY_ATTRIBUTES...
2018-03-01 14:34:06
184
原创 互斥体
进程一: HANDLE g_hMutex = CreateMutex(NULL,FALSE, "XYZ"); 进程二: HANDLE g_hMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE, "XYZ"); WaitForSingleObject(g_hMutex,INFINITE);//互斥体本身是一个已通知量,此处得到后被置为未...
2018-03-01 13:52:15
345
原创 进程创建、终止及句柄表
#include <stdio.h>#include <windows.h>//使用多字符集#if 0笔记:BOOL CreateProcess( LPCTSTR lpApplicationName, // name of executable module LPTSTR lpCommandLine, ...
2018-03-01 12:12:24
405
原创 消费者问题及线程同步与互斥练习
//使用多字符集#include <windows.h>#include "resource.h"#include <stdio.h>HWND hEditRES;HWND hEditBUF;HWND hEditBUF2;HWND hEditA;HWND hEditB;HWND hEditC;HWND hEditD;//缓冲区文本框句柄数组HWN...
2018-02-28 17:02:24
222
原创 WaitForSingleObject
DWORD WaitForSingleObject( HANDLE hHandle, // handle to object DWORD dwMilliseconds // time-out interval ); 注意:此函数根据传进来的不同内核对象,操作也不同,如果传进来的内核对象是进程或线程,不会把对象的通知状态改为未通知状...
2018-02-27 15:29:42
1085
原创 PE:copyBaseRelocation2NewSection
DWORD copyBaseRelocation2NewSection(IN PVOID pFileBuffer,OUT PVOID* pNewFileBuffer){ PIMAGE_DOS_HEADER pDosHeader = NULL; PIMAGE_NT_HEADERS pNTHeader = NULL; PIMAGE_FILE_HEADER pPEHeader
2018-01-15 15:54:13
226
原创 PE:AddNewSection
DWORD AddNewSection(IN PVOID pFileBuffer, OUT PVOID* pNewFileBuffer){ PIMAGE_DOS_HEADER pDosHeader = NULL; PIMAGE_NT_HEADERS pNTHeader = NULL; PIMAGE_FILE_HEADER pPEHeader = NULL; PIM
2018-01-14 22:23:45
261
原创 PE:GetFunctionAddrByName
DWORD GetFunctionAddrByName(IN PVOID pFileBuffer,IN DWORD NameOfFunction){ PIMAGE_DOS_HEADER pDosHeader = NULL; PIMAGE_NT_HEADERS pNTHeader = NULL; PIMAGE_FILE_HEADER pPEHeader = NULL; ...
2018-01-13 22:22:38
588
原创 复习笔记-构造-继承
#include "Class.h"#include struct DateInfo{int year;int month;int day;DateInfo(){year = 2015;month = 04;day = 02;}DateInfo(int year, int month, int day){this->year = year;this->month = month;this->day
2017-12-16 16:23:21
156
转载 GDT与LDT
转载:https://www.cnblogs.com/hicjiajia/archive/2012/05/25/2518684.htmlGDT 与 LDT很长时间没碰组成原理和操作系统,忘得差不多了,今天学内核需要一些基础知识,搜了些文章补习一下,这篇讲描述符表的文章比较不错:原文地址:http://blog.youkuaiyun.com/billpig/article/d
2017-12-08 12:11:33
178
转载 中断及中断处理过程
(From:http://www.cppblog.com/aaxron/archive/2011/11/16/160280.html)中断及中断处理过程1. 中断和异常的概念区别 Intel的官方文档里将中断和异常理解为两种中断当前程序执行的不同机制。这是中断和异常的共同点。不同点在于: 中断(interrupt)是异步的事件,典型的比如由I/O设备触发;异
2017-12-08 12:08:20
2199
转载 8086段寄存器偏移
http://www.cnblogs.com/cyttina/archive/2013/03/03/2942128.html都知道8086的寄存器是16位的,也就是 只能寻址 64K(64k=2^16),但是却有20根地址线,那要肿么办呢。于是就想出了一个分段寻址的方法,也就是 段基址+偏移量,其中段基址和偏移量都是16位的,但是在计算地址的时候,将段基
2017-12-07 12:27:45
1704
转载 Cache和主存的效率计算问题
第一,看命中率的定义:CPU欲访问的信息已经在Cache中的比率称之为命中率。 设程序在执行期间,Cache的命中次数是Nc,访问主存的次数是Nm,则命中率H=Nc/(Nc+Nm)平均访问时间Ta = H⋅Tc+(1−H)⋅Tm.看一道习题理解两种策略的不同:同时访问Cache和主存,Cache命中时中断访存 || 先访问Cache,没有时再访问主存调入Cache再从Cache
2017-12-06 17:25:24
12770
4
原创 计算机组成原理-微程序和微指令
1.一条机器指令就是一个微程序,机器指令需要几个cpu周期就包含几个微指令,微指令包含若干微命令,微命令发送给部件执行微操作。
2017-12-06 14:49:04
19536
原创 typedef
typedef关键字 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。 这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 1、对已有类型定义别名 typedef unsigned char BYTE; typedef unsigned sh
2017-11-21 21:41:39
230
原创 反汇编——结构体作为局部变量的传参和返回值的本质测试
结构体传参:# includestruct st{ char a; short b; int c; int d; int e;};void Function(st s){}int main(int argc, char* argv[]){ st s; s.a = 1; s.b = 2; s.c = 3; s.d = 4; s.e = 5; Func
2017-11-20 23:08:12
800
原创 反汇编——多维数组
二维数组:int arr[2][3] ={{1,2,3}{4,5,6}};编译器分配空间:int arr[2*3] = {................};编译器寻找数据位置:arr[1][2]arr[1*3+2] //编译器直接计算出下标三维数组:arr[1][2][1] 编译器如何计算下标: arr[1*4*3 + 2*3 + 1]
2017-11-20 00:05:33
260
原创 桶排序
void Function(){ int t = 0; int arr[8] = {2,4,5,6,3,1,2,7}; int ret[8] = {0}; //0 1 2 1 1 1 1 1 arr数组中,与ret数组下标相同的元素的个数 //0 1 2 3 4 5 6 7 ret数组的下标 for (int i = 0; i < 8; i++)//此循环结束,ret[8]={0,
2017-11-19 20:02:27
148
原创 参数传递
1、8位参数传递 void Function(char x,char y,char z) { } 2、16位参数传递 void Function(short x,short y,short z) { } 3、32位参数传递
2017-11-19 16:14:01
233
原创 返回值超过32位时的存储
#include__int64 Function(){ __int64 x = 0x1234567890; return x; /* 使用两个32位的寄存器返回64位的值 mov eax,dword ptr [x] mov edx,dword ptr [ebp-8] */}int main(){ __int64 x = 0; x= Function();
2017-11-19 16:03:52
455
原创 找出数组最大值
void SortArray(){int arr1[5] = { 2,5,3,1,4 };int len = 5;int k = 0;while(k<len-1){for (int i=0;i arr1[i + 1]){int t = arr1[i];arr1[i] = arr1[i + 1];arr1[i + 1] = t;}}k++;}for (int x=0;x<len;x++){print
2017-11-19 13:11:21
2131
原创 数据类型
整数类型分为有符号(signed)和无符号(unsigned)两种:char cTest = 0xFF; unsigned char cuTest = 0xFF;总结: 1、在内存中存储的方式完全一样,2、在做运算的时候需要注意,某些指令,比如跳转指令会根据有符号和无符号而不同
2017-11-16 22:45:58
144
原创 参数调用约定
常见的几种调用约定: 调用约定 参数压栈顺序 平衡堆栈 __cdecl 从右至左入栈调用者清理栈 __stdcall 从右至左入栈自身清理堆栈 __fastcall ECX/EDX传送前两个,剩下的从右至左入栈自身清理堆栈
2017-11-15 22:39:46
275
原创 汇编指令整理
1. PUSH本质:sub esp,4mov dword ptr ds[ESP],数据---------把数据存储到ESP所指向的地址,也就是栈顶2. POP本质:mov eax,esp地址指向的值,也就是栈顶存的值add esp,4
2017-11-12 22:39:33
608
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人