![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 76
轩动day
intel_do_flush_locked failed: Invalid argument
展开
-
const用法
简单的以char类型来进行解释。首先看const char a和char const a,这两个形式不一样,但是其结果是一样的——都是保证a的数值不被改变,所以在声明的时候需要对其进行赋初值。下面分析稍微复杂一点的形式,const char* ptr、char const *ptr和char* const ptr,前面两种其实是一样的,都用于保证*ptr当中的数据不被改变,但是后者却是保证原创 2014-03-12 20:45:05 · 665 阅读 · 0 评论 -
利用ffmpeg打开windows系统下面的摄像头源代码分析
首先在主函数里面调用两个注册函数:avcodec_register_all();avdevice_register_all();通过函数名称就很容易看出来这两个函数的实现了,前者主要注册所支持的编码器,而后者主要注册所支持的输入和输出设备.这两个函数的主要通过宏实现:原创 2014-05-17 20:36:22 · 1955 阅读 · 2 评论 -
MFC分析工具条和状态条的创建的分析
工具条和状态条的在comctl32.lib当中实现,要想得到TOOLBAR和STATUS的支持,程序必须添加CommCtrl头文件,并且在初始化TOOLBAR和STATUSBAR之前,调用函数InitCommonControls函数对整个库进行初始化。工具条和状态条都属于主窗口的子窗口,所以创建的时机是在主窗口的ON_WM_CREATE消息当中。第一步,需要调用相应的函数创建出窗口句柄出来,这原创 2014-06-15 08:16:40 · 867 阅读 · 0 评论 -
Rootkits——windows内核的安全防护(3)
NTSTATUS DriverEntry(IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath){ NTSTATUS ntStatus; gb_Hooked = FALSE; // We have not hooked yet ntStatus = PsSetLoadImage原创 2014-03-23 08:01:48 · 1219 阅读 · 0 评论 -
MFC创建浮动工具条
void CControlBar::EnableDocking(DWORD dwDockStyle){ ASSERT((dwDockStyle & ~(CBRS_ALIGN_ANY|CBRS_FLOAT_MULTI)) == 0); // CBRS_SIZE_DYNAMIC toolbar cannot have the CBRS_FLOAT_MULTI style ASSERT(((dw原创 2014-10-04 18:38:31 · 3383 阅读 · 0 评论 -
SLIC superpixel实现分析
我们生成超像素是通过基于颜色相似度和临近度的像素聚类。这是在5维中进行的,[labxy]。[lab]是指CIELAB颜色空间中的像素颜色向量。CIELAB颜色空间就是指HSV空间,亮度空间,xy指像素的位置。两种颜色的最大的空间是有限的,空间距离依赖于图片大小。不可能简单地采用欧式距离在这5维空间中,如果不对空间距离归一化的话。为了使5维空间中的像素聚类,我们因此引入了一种新的距离测量原创 2014-10-04 18:40:19 · 11624 阅读 · 17 评论 -
MFC控件的自主重画处理
MFC窗口消息的处理过程包含两个部分,父窗口和子窗口的处理。父窗口作为原创 2014-11-01 21:37:20 · 1858 阅读 · 0 评论 -
grub 0.97
在操作系统启动的初期,首先将PC指向磁盘的第一个块。这个区域大小为512字节,被称作MBR。这512字节组织性很好,包含了一些磁盘的基本参数和一些用于启动的代码。当然启动初期和文件系统是毫不相干的,因为文件系统和启动存在一个鸡生蛋和蛋生鸡的问题。举个很简单的例子,系统启动需要通过磁盘读取相应的执行文件,假如需要通文件系统来读取系统加载文件的话,那么先要找到文件系统以及文件系统依赖项。然而要找到文件原创 2015-02-01 09:00:17 · 934 阅读 · 0 评论 -
基于图分割代码解读
点击打开链接opencv支持的代码可以从上面的链接中下载。论文的思想主要是基于两方面考虑,第一:像素之间的差异值,第二:图像分割之后的各个区域。其中区域大小是作为一个阈值来限制分割时的合并。下面简单介绍下图的一下基础。在一维矩阵中有两种连通方式,一种是四连通,也就是一个点和自身的上下左右是连通的,而另外一种是八连通,也就是一个点和自身周围的八个点是连通的。然而,不论是四连通还是八连通都原创 2015-01-18 10:31:51 · 828 阅读 · 0 评论 -
Windows bitmap文件解析
首先需要介绍的是.bmp文件的存储格式,.bmp文件由四部分组成,文件头部,文件信息头部,调色板和实际的像素信息。文件的这种组织形式类似于一种嵌套形式。typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1;原创 2015-06-22 16:46:26 · 1579 阅读 · 0 评论 -
Windows 实现telnet协议
int kickoff_telnetd(void){ printf("Attempting to start Simple TelnetD\n"); SetConsoleCtrlHandler(Cleanup, 1); if (!StartSocketInterface()) ErrorExit("Unable to start socket interface\n");原创 2015-07-13 15:24:59 · 1837 阅读 · 2 评论 -
OpenGL初步
OpenGL是一个图形库,主要用于3D作图。然而,其并不提供窗口处理函数,如果想要与操作系统的窗口进行通信,需要引入GLUT也就是实用工具库。同时,由于OpenGL具有很好的平台兼容性,因此对一些函数的实现需要以指针形式进行调用。类似于动态链接库中函数的动态加载。为了便于这一部分函数的调用,进一步引入了GLEW库对函数指针的调用进行封装。编写OpenGL程序需要引入上诉函数库中的一个或者多个。下面原创 2016-04-06 21:16:28 · 462 阅读 · 0 评论 -
OpenGL Transform feed back 粒子系统
在原来的OpenGL渲染的pipeline并没有提供较多的交互接口,当调用Draw函数之后很难再绘制过程对已经装配的图元进行修改。然而,在绘制过程中存在这样的需求,尤其是需要根据之前装配好的图元来更新随后的操作。举个简单的例子,当一个场景中存在两个相对运动的物体时,后一个物体需要根据前一个物体的运动来决定自己的运动轨迹,因此需要有一种feed back来提升交互能力。Transform feed原创 2016-05-11 09:11:17 · 1815 阅读 · 0 评论 -
OpenGL Frame Buffer管理
OpenGL应用程序进行图形渲染都是以pipeline的方式进行处理,在其中的每一个步骤都有输入和输出,渲染的最后一步是将渲染的结果绘制到屏幕上。在绘制这一步的输出是屏幕专用的存储,输入则是Frame buffer。由于OpenGL并没有窗口处理函数,所以与窗口相关的处理都需要外部的扩展来实现,因此相应的窗口处理函数会在初始化的时候分配相应的Frame buffer,同时OpenGL会将最终渲染的原创 2016-05-16 17:45:18 · 2717 阅读 · 0 评论 -
OpenGL纹理贴图
OGL中纹理分为两种类型,一种是常规的纹理,另一种是缓存纹理。前者和特定的纹理类型相关联,而后者则仅仅作为输出的缓存区域,和Frame buffer object粘合的纹理就是缓存纹理。不过这两者的创建过程很相似,都是利用glGenTexture函数实现纹理ID的创建,然后利用glBindTexture将ID号绑定到指定的纹理对象上。常规纹理绑定的纹理对象是指定的纹理类型,而纹理缓存则绑定到GL_原创 2016-05-17 10:51:26 · 1471 阅读 · 0 评论 -
OpenGL 图像的加载和存储
之前提到过OGL中纹理缓存是作为输入缓存存在的,这使得输入缓存能够读取但是不能够改写。为了突破这一限制,在OGL中提出了Image的概念,这使得程序员能够有效的操作texture缓存——对背后的texture缓存进行读写操作。但是,这样的操作打破了原有的pipeline流水线,使得原本应该被OGL自身进行管理的缓存需要程序员自身来进行处理,因此提供了方便的同时也增加了程序员的编程负担。为了对t原创 2016-05-18 10:11:39 · 6815 阅读 · 0 评论 -
SEH——Structured Exception Handling(结构化异常处理)
SEH是windows操作系统处理程序错误或异常的技术。SEH是一种系统体制,与具体的程序设计语言无关,但是windows下的编译器多使用SEH实现异常处理。 系统级别的SEH比较好理解,利用fs:[0]处保存的异常处理回到函数链表对异常进行处理。从这里也可以看出异常是和线程相关的。因为fs:[0]指向的位置是TEB而TEB所包含的的TIB的第一个成员是EXCEPTION_REGISTR原创 2014-03-01 10:53:31 · 1694 阅读 · 0 评论 -
Linux下面signal处理
信号也被称为软中断,主要用于在软件层面对中断机制的一种模拟。在所有的进程通信当中只有信号是异步的,接受信号的进程不知道什么时候信号会来,也不知道来的是什么信号。我们可以通过在控制台执行kill -l命令查看所有的信号变量。每一个信号在进程调度并由内核空间返回到用户空间的时候进行处理,在处理完信号之后,又需要返回到内核然后再进入到用户空间执行。至于为什么会这样会在下面的分析中看到原因。在stru原创 2014-04-21 21:43:59 · 697 阅读 · 0 评论 -
传址调用和引用调用的区别
一直以来对传址调用和引用调用都有些分不清楚,虽然给这两者的区别加一大堆区别。#include "stdafx.h"#include void funptr(int* ptr){ *ptr=123;}void funcref(int &ref){ ref=234;}__declspec(naked)int _tmain(int argc, _TCHAR*原创 2014-03-09 10:13:43 · 3158 阅读 · 0 评论 -
__declspec的用法
我觉得这个短语应该是declaration linker specifier的缩写。在MSDN官网上的解释是:__declspec是用于对指定的存储类信息的扩展。其实这和上面的翻译并不矛盾,因为内存地址的生成实在链接期间生成,而并非编译的时候生成的。因为static和extern是C/C++标准的一部分,所以不属于__declspec的部分。支持__declspec扩展的特性语法的关键字如下所原创 2014-03-09 15:35:46 · 2839 阅读 · 1 评论 -
Rootkits--Windows内核的安全防护(1)
#pragma pack(1)typedef struct ServiceDescriptorEntry {unsigned int *ServiceTableBase;unsigned int *ServiceCounterTableBase; unsigned int NumberOfServices;unsigned char *ParamTableB原创 2014-03-16 22:34:50 · 1174 阅读 · 0 评论 -
ubuntu12.04下面codeblocks配置opencv2.4.6
第一步安装codeblocks,网上有教程,为了方便,我在下面列出安装的命令:在安装codeblock之前,因为依赖关系需要安装必要的编译环境。$sudoapt-get install build-essential$sudoapt-get install gdb然后是安装codeblocks$sudoapt-get install codeblocks$sudoapt-g原创 2014-03-15 17:02:56 · 907 阅读 · 0 评论 -
Rootkits——windows内核的安全防护(5)
在用户空间,编译的时候将驱动当做一个自定义的资源存入到.exe文件当中,然后执行的时候将其解压并且加载到内存里面。而解压出来的驱动最主要就是hook某个内核层面的函数。#pragma comment(linker,"/ENTRY:main")#pragma comment(linker,"/MERGE:.rdata=.data")#pragma comment(linker,"/MERGE原创 2014-03-28 19:55:47 · 1218 阅读 · 0 评论 -
QT实现解析(1)
在QT程序设计当中,最重要的类别是QObject(定义于SRC\CORELIB\KERNEL\qobject.h),几乎所有的类别都是从这个类别继承来的。而这个类别也如MFC下面的CObject一样,承载了整个QT程序的运行,各个类别通过QObject组成一棵对象树,以便于所有没有被程序员处理的消息都能够得到默认的处理。类同于MFC喜欢将很多东西用宏包装起来,QT也利用了类似的手段。在QObj原创 2014-03-30 16:53:57 · 794 阅读 · 0 评论 -
X264的编译(QT版和VS)
首先到X264官网下载源代码,网址是:http://www.videolan.org/developers/x264.html。因为X264的编译过程需要Linux环境,所以需要在windows下面装一个模拟,比较常用的是mingW+msys(个人感觉cygwin也可以,只不过可能稍微复杂一些,因为cygwin需要调用外部的编译器)。进入mingw官网http://www.mingw.org/下载原创 2014-04-01 13:41:43 · 1808 阅读 · 0 评论 -
C++设计新思维(1)
STL在一定程度上提高了程序设计的效率,至于为什么可以提高效率,却很少去思考。原创 2014-05-03 08:37:31 · 683 阅读 · 0 评论 -
MFC流程解析
首先在appmodule.cpp函数中有一个函数_tWinMain,这个函数的实现和SDK程序设计当中基本是一样的。没错这个函数就是整个MFC程序的起手式。在这个函数当中,直接调用我们定义的AfxWinMain函数,是不是,实际上这里加上Afx前缀主要是为了表明这个函数式MFC全局函数(在所有的MFC函数里面加上Afx函数表明这是MFC的全局函数)。原创 2014-05-03 11:06:58 · 629 阅读 · 0 评论 -
MFC当中的宏
要分析MFC的实现首先要从MFC当中众多的宏开始讨论。首先看一个上次讲到的宏:原创 2014-05-03 16:15:13 · 788 阅读 · 0 评论 -
Rootkits——windows内核的安全防护(4)
在计算机组成当中,每一个硬件模块都有专属于自己的寄存器,这些寄存器用于短时间内保存自己的数据,接受命令用于下一步执行,或者保存硬件的状态。而这些寄存器可以通过相应的端口进行访问这些寄存器。NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath ){ LARGE原创 2014-03-23 09:24:13 · 832 阅读 · 0 评论 -
RootKits——windows内核的安全防护
上一篇有讲到怎样利用键盘控制芯片的端口去控制键盘,但是仅仅利用定时器来实现键盘的控制是非常浪费时间的。所以我们应该换一种方式,比如说挂钩键盘击键事件的中断。整整个中断的挂钩我们在前面已经分析过了,这里将其和上一篇整合。首先利用sidt指令将键盘击键事件的中断处理事件进行挂钩,将我们的函数放入击键处理函数当中使得中断的时候调用我们的函数。然后跳转到原来的中断处理函数进行真正的中断处理。源代码如下:原创 2014-03-24 07:07:01 · 1160 阅读 · 0 评论 -
QT实现(2)
首先看看connect函数的原型,这个函数在QObject类别当中定义:static bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType =Qt::AutoConnection);原创 2014-04-06 09:43:21 · 610 阅读 · 0 评论 -
QT实现(3)
QByteArray QMetaObject::normalizedSignature(const char *method){ QByteArray result; if (!method || !*method) return result; int len = int(strlen(method)); QVarLengthArray stackbuf(原创 2014-04-06 12:59:01 · 636 阅读 · 0 评论 -
QT实现(4)
err_method_notfound(sender, signal_arg, "connect"); err_info_about_objects("connect", sender, receiver);在上面的处理之后,如果不能得到正确的序号,那么编译器就原创 2014-04-06 14:54:32 · 925 阅读 · 0 评论 -
openGL画图函数
OpenGL在画图过程中大致可以分为三步,第一步创建好对应的vertex队列,同时在适当的时机将vertex绑定到GL内部;第二步利用BUFFER_ARRAY向vertex队列提交顶点信息以便对vertex队列进行初始化;第三步则是绑定已经初始化的vertex队列,同时利用对应的画图函数进行绘制。vertex队列的生成主要利用glGenVertexArrays函数完成,其第一个参数定义需要生成原创 2016-05-09 11:48:51 · 2856 阅读 · 0 评论