文章分类 - windows
摘要:1)ASCII字符串和宽字符串在应用程序中使用两种字符:a) char型字符串,负责记录ANSI字符集,它是指向一个char数组的指针,每个char型变量大小是一个字节,字符串是以0标志字符串结束的;b) wchar_t型的宽字符串,负责描述unicode字符集,它是指向一个wchar_t数组的指针,wchar_t字符大小为两个字节,字符串以0标志字符串结束。例:ANSI字符构造如下:char *str1= "ASCE";UNICODE字符构造如下:wchar_t *str2 = L"ASCE";注:在构造字符串时使用关键字“L”,编译器会自动生成所需要
阅读全文
摘要:操作系统和驱动程序将关于驱动程序和设备的信息存储在注册表中。总的来说,驱动程序应使用注册表存储机器重启动后仍必须维护的数据。此外,驱动程序可以访问注册表以获得系统或者其他程序或者驱动程序存储在其中的信息。更多的关于注册表的信息,参见平台 SDK 文档。以下的注册表中的树是驱动程序开发者特别感兴趣的(这里 HKLM 代表 HKEY_LOCAL_MACHINE):·HKLM\SYSTEM\CurrentControlSet\Services·HKLM\SYSTEM\CurrentControlSet\Control·HKLM\SYSTEM\CurrentControl
阅读全文
摘要:21.1.6 Ring3/Ring0的四种通信方式21.1.5节中提到了Ring3/Ring0通信的四种内存访问方式分别为:METHOD_BUFFERED、METHOD_IN_DIRECT、METHOD_OUT_DIRECT和METHOD_NEITHER。METHOD_BUFFERED可称为"缓冲方式",是指Ring3指定的输入、输出缓冲区的内存读和写都是经过系统的"缓冲",具体过程如图21.1.12所示。这种方式下,首先系统会将Ring3下指定的输入缓冲区(UserInputBuffer)数据,按指定的输入长度(InputBufferLen)复制到Ri
阅读全文
摘要:在写驱动程序时,我们发现对于Windows的不同版本,其对应的内核数据结构是不同的,所以在具体操作时同样要根据Windows的不同版本进行不同的操作,那么怎样获取Windows的版本,并且Windows的不同版本的结构模式应如何区别,这是下面要解决的问题。MSDN上提到PsGetVersion是已经过时的函数版本,如果要在XP或以后的版本上获取Windows的版本号,就用RtlGetVersion。所以这两个函数对应的版本还是有所不同的,那么怎样区别性的对待这两种不同的函数呢?下面是一个博客上提供的一种方法,就是用试探式区分:用RtlGetVersion获取版本号,如果成功,则认为当前版本是X
阅读全文
摘要:1. 命令行前数字的含义用户调试模式下,如2:005, 2表示进程ID,005表示线程ID内核调试模式下,将显示kd>, 如果是多核处理器将显示0: kd> 0:表示当前运行在哪核处理器上。2. 命令输入时,支持UP,DOWN,TAB键联想,可以使用TAB键进行通配符的联想。3. Enter键,在命令行没有命令输入时,执行上一条命令。4. Ctrl+C 终止一段长时间执行的命令5. .cls 清除命令行的显示结果。6. WinDbg启动时增加-Q参数,在WinDbg退出后将不提示保存当前的工作环境的对话框。如果使用-QY将在退出WinDbg后,自动保存当前的配置环境。7. 调试命令
阅读全文
摘要:1. 通过 pid 获取目标进程的 EPROCESS (PsLookupProcessByProcessId)。如果当前进程不是目标进程,那么我们切换当前进程,方法当然是通过 KeAttachProcess 或者 KeStackAttachProcess 啦。接下来我们就可以从 _PEB结构中随心所欲的获取目标路径,命令行,啥滴东西了。最后别忘了 Detach(如果你没有 Attach 那么这一步不需要)。2. 通过 pid 获取目标 EPROCESS。然后那,我们用 ObOpenObjectByPointer 函数,记得把 ObjectType置为 *PsProcessType (置空也行啦
阅读全文
摘要:最近要做一个进程监控的程序,功能很简单,就是创建和退出进程的时候,能触发我们的事件。首先的第一想法,是Hook ZwCreateProcess,结果调试的时候发现,很多创建进程的动作,并没有通过这个API执行,所以自然就是没办法监控进程的创建,于是回到本质,从创建进程的动作过程来分析,创建新的进程,其大致要经历以下步骤:(1)打开可执行文件,以FILE_EXECUTE权限打开;(2)将可执行文件加载到内存空间;(3)进程的活动结构将被创建,如(EPROCESS,KPROCESS和PEB结构);(4)为新创建的进程分配地址空间;(5)为进程的主线程创建线程活动结构,如(ETHREAD,KTHRE
阅读全文
摘要:潘爱民,2010.9.24在《Windows内核原理与实现》一书,我曾经详细地解析了Windows应用程序发出的系统调用,经过ntdll.dll中的stub函数,再通过sysenter/syscall或int 2eh指令,调用到内核的完整过程。图8.5中有一个错误(感谢读者liucy指出这一错误),正确的图应该如下所示。图中红色文字是改正之后的函数名称。这里实际上把通过sysenter或int 2eh两种情形的系统调用流程画在一起,所以显得较为复杂。如果拆开来,画成两个图,可能会更加容易理解。下面是按照sysenter/sysexit指令的系统调用流程:而按照int 2eh来进入内核的流程更加
阅读全文
摘要:Posted by李马on 2007 年 07 月 05 日 From:http://blog.titilima.com/ssdt.html引子2006年,中国互联网上的斗争硝烟弥漫。这时的战场上,先前颇为流行的窗口挂钩、API挂钩、进程注入等技术已然成为昨日黄花,大有逐渐淡出之势;取而代之的,则是更狠毒、更为赤裸裸的词汇:驱动、隐藏进程、Rootkit……前不久,我不经意翻出自己2005年9月写下的一篇文章《DLL的远程注入技术》,在下面看到了一位名叫L4bm0s的网友说这种技术已经过时了。虽然我也曾想过拟出若干辩解之词聊作应对,不过最终还是作罢了——毕竟,拿出些新的、有技术含量的东西才是王
阅读全文
摘要:源:http://www.cnblogs.com/pugang/archive/2012/11/07/2758812.html多年以前由于DLL hell问题人们很少在直接从dll文件导出函数并且直接使用,但是有时候事情的解决方案不是我们可以选择的,今天在解决一个问题的时候,还是不得已选择了一个这样的方式。但是搜索了一下,网上关于这个问题的总结文章都写的不是很全,于是总结出来,希望对大家有所帮助。静态导入和动态导入加起来一共三种方式:静态导入--需要将.lib文件和.dll文件copy到执行目录1. dllexport导出dllimport导入。导出时这样写:__declspec( dllex
阅读全文
摘要:一项目中,用到了winpcap,为了实现免安装,找到的文章。其实4.0的只需要packet.dll、pthreadVC.dll、wpcap.dll、npf.sys就ok了~安装内幕, 呵呵, 似乎很高深的样子. 其实很简单。这两天公司的同事提了一个需求,要搞清楚winpcap软件安装真正做了什么,因为我们不想要winpcap的安装界面。在用google在网上搜了一番之后,发现原来安装软件原来这么简单,软件安装包的制作也非常简单。先看看winpcap的安装到底做了什么,其实在window上安装软件无外乎做两件事:拷贝一系列文件到相应的目录下;修改一下注册表的相关信息。winpcap安装也有这个过
阅读全文
摘要:一项目中遇到内存只增不减问题,经折腾,原因如下:源:http://blog.csdn.net/alane1986/article/details/6902233析构函数执行时先调用派生类的析构函数,其次才调用基类的析构函数。如果析构函数不是虚函数,而程序执行时又要通过基类的指针去销毁派生类的动态对象,那么用delete销毁对象时,只调用了基类的析构函数,未调用派生类的析构函数。这样会造成销毁对象不完全。#include<iostream.h>#include<stdlib.h>class CPerson{public:virtual~CPerson();//基类的析构函
阅读全文

浙公网安备 33010602011771号