自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 523

原创 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 747

原创 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 610

原创 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 236

原创 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 286

原创 指向类成员的指针

    在C++语言中,可以定义一个指针,使其指向类成员或成员函数,然后通过指针来访问类的成员。这包括指向属性成员的指针和指向成员函数的指针。    指向非静态数据成员的指针在定义时必须和类相关联,在使用时必须和具体的对象关联。由于类不是运行时存在的对象。因此,在使用这类指针时,需要首先指定类的一个对象,然后,通过对象来引用指针所指向的成员。    与普通意义上的指针不一样。存放的是偏移量,通过对...

2018-03-05 21:19:05 427

原创 static

#if 0static全局变量 外延性 static 作用域 仅限于本文件局部变量 auto 生命周期 存储位置#endif#if 0static 在类内部的表现,用来实现族类对象间的数据共享。在生成对象的时候,普通数据员才有空间。而 static 成员在类志明的时候,就己经开辟了空间(data rw)static 数据成员,既属于类,也属于对象,但终...

2018-03-05 19:54:18 189

原创 动态绑定、多态

1、什么是绑定? 绑定就是将函数调用与地址关联起来. 只有virtual的函数是动态绑定,其它都是前期绑定。动态绑定也称为:多态,即用不同类型的指针访问一个对象的虚函数时,体现出不同的行为。 class Base { public: int x; public: Base() { x = 100; } ...

2018-03-04 20:49:21 465

原创 虚函数表之多继承有函数覆盖

多继承有函数覆盖 struct Base1 { public: virtual void Fn_1() { printf("Base1:Fn_1...\n"); } virtual vo...

2018-03-04 17:30:08 359

原创 以挂起的方式创建进程

BOOL CreateProcess( LPCTSTR lpApplicationName, // name of executable module LPTSTR lpCommandLine, // command line string LPSECURITY_ATTRIBUTES lp...

2018-03-01 19:19:22 2768

原创 进程句柄和线程句柄的继承

//CreateProcess的第3、4个参数为结构体,控制子进程,是否能继承主进程句柄表中存储的,其它子进程的进程句柄或线程句柄 //创建进程时,会产生一个进程内核对象和线程的内核对象,进程和线程也是内核对象 //例如,主进程A创建了1、2子进程, 1、2的进程句柄和线程句柄,就存储在主进程A的内核对象句柄表中BOOL CreateProcess( LPCTSTR ...

2018-03-01 16:53:10 1562

原创 信号量

创建信号量 HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName ); 函数说明: 第一个参数表示安全控制...

2018-03-01 14:42:05 146

原创 事件

//事件和互斥体的区别在于,互斥体创建即为已通知状态,而事件初始状态可以设置,即第三个参数//第二个参数如果为TRUE,事件被捕捉后,需要自己调用ResetEvent将事件标记为未通知,如果为False,会自动调用ResetEvent将事件标记为未通知// 1、事件对象的创建 HANDLE CreateEvent( LPSECURITY_ATTRIBUTES...

2018-03-01 14:34:06 154

原创 互斥体

进程一: 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 308

原创 WaitForSingleObject WaitForMultipleObjects

2018-03-01 13:51:19 276

原创 CRITICAL_SECTION临界区

只能用于进程内的线程控制

2018-03-01 13:47:56 221

原创 句柄的继承

2018-03-01 12:28:32 882

原创 进程创建、终止及句柄表

#include <stdio.h>#include <windows.h>//使用多字符集#if 0笔记:BOOL CreateProcess( LPCTSTR lpApplicationName, // name of executable module LPTSTR lpCommandLine, ...

2018-03-01 12:12:24 325

原创 消费者问题及线程同步与互斥练习

//使用多字符集#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 192

原创 WaitForSingleObject

DWORD WaitForSingleObject(   HANDLE hHandle,        // handle to object   DWORD dwMilliseconds   // time-out interval ); 注意:此函数根据传进来的不同内核对象,操作也不同,如果传进来的内核对象是进程或线程,不会把对象的通知状态改为未通知状...

2018-02-27 15:29:42 1010

原创 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 191

原创 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 228

原创 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 536

原创 复习笔记-构造-继承

#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 132

转载 GDT与LDT

转载:https://www.cnblogs.com/hicjiajia/archive/2012/05/25/2518684.htmlGDT 与 LDT很长时间没碰组成原理和操作系统,忘得差不多了,今天学内核需要一些基础知识,搜了些文章补习一下,这篇讲描述符表的文章比较不错:原文地址:http://blog.csdn.net/billpig/article/d

2017-12-08 12:11:33 157

转载 中断及中断处理过程

(From:http://www.cppblog.com/aaxron/archive/2011/11/16/160280.html)中断及中断处理过程1. 中断和异常的概念区别   Intel的官方文档里将中断和异常理解为两种中断当前程序执行的不同机制。这是中断和异常的共同点。不同点在于:   中断(interrupt)是异步的事件,典型的比如由I/O设备触发;异

2017-12-08 12:08:20 2125

转载 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 1639

转载 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 12440 4

原创 计算机组成原理-微程序和微指令

1.一条机器指令就是一个微程序,机器指令需要几个cpu周期就包含几个微指令,微指令包含若干微命令,微命令发送给部件执行微操作。

2017-12-06 14:49:04 19309

原创 typedef

typedef关键字 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。 这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 1、对已有类型定义别名 typedef unsigned char BYTE; typedef unsigned sh

2017-11-21 21:41:39 209

原创 结构体字节对齐

对齐参数是结构体内成员数据宽度的上限,二者取较小值

2017-11-21 11:03:57 139

原创 反汇编——结构体作为局部变量的传参和返回值的本质测试

结构体传参:# 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 737

原创 反汇编——多维数组

二维数组: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 227

原创 桶排序

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 133

原创 参数传递

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 198

原创 返回值超过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 408

原创 找出数组最大值

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 2032

原创 数据类型

整数类型分为有符号(signed)和无符号(unsigned)两种:char cTest = 0xFF; unsigned char cuTest = 0xFF;总结: 1、在内存中存储的方式完全一样,2、在做运算的时候需要注意,某些指令,比如跳转指令会根据有符号和无符号而不同

2017-11-16 22:45:58 126

原创 参数调用约定

常见的几种调用约定: 调用约定 参数压栈顺序 平衡堆栈 __cdecl 从右至左入栈调用者清理栈 __stdcall 从右至左入栈自身清理堆栈 __fastcall ECX/EDX传送前两个,剩下的从右至左入栈自身清理堆栈

2017-11-15 22:39:46 241

原创 汇编指令整理

1. PUSH本质:sub esp,4mov dword ptr ds[ESP],数据---------把数据存储到ESP所指向的地址,也就是栈顶2. POP本质:mov eax,esp地址指向的值,也就是栈顶存的值add esp,4

2017-11-12 22:39:33 536

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除