<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lziog的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lziog</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lziog]]></copyright><item><title><![CDATA[一点KeepAlive的知识]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/42775395</link><guid>https://blog.youkuaiyun.com/lziog/article/details/42775395</guid><author>lziog</author><pubDate>Fri, 16 Jan 2015 12:11:09 +0800</pubDate><description><![CDATA[在一个正常的TCP连接上，当我们用无限等待的方式调用下面的recv或send的时候：

    ret=recv(s,&buf[idx],nLeft,flags);或

    ret=send(s,&buf[idx],nLeft,flags);

如果TCP连接被对方正常关闭，也就是说，对方是正确地调用了closesocket(s)或者shutdown(s)的话，那么上面的recv或]]></description><category></category></item><item><title><![CDATA[linux文件系统实现浅析]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/40737641</link><guid>https://blog.youkuaiyun.com/lziog/article/details/40737641</guid><author>lziog</author><pubDate>Mon, 03 Nov 2014 10:58:04 +0800</pubDate><description><![CDATA[之前有两篇文章整理过linux虚拟文件系统的结构，和linux文件读写的流程。其中一些由具体文件系统类型来实现的地方并没有深入叙述，只是说这是由具体的文件系统来实现的。比如，读写文件的时候，文件的读写位置怎么对应到实际的磁盘块呢？这是由具体的文件系统来实现的；再比如，寻找一个文件路径的时候，怎么知道XXX目录下是否有YYY文件存在呢？这也是由具体的文件系统来实现的。
前些天同事问起linux下i]]></description><category></category></item><item><title><![CDATA[linux虚拟文件系统浅析]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/40737623</link><guid>https://blog.youkuaiyun.com/lziog/article/details/40737623</guid><author>lziog</author><pubDate>Mon, 03 Nov 2014 10:56:56 +0800</pubDate><description><![CDATA[虚拟文件系统(VFS)
在我看来, "虚拟"二字主要有两层含义:
1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统. VFS隐藏了它们的实现细节, 为使用者提供统一的接口;
2, 目录结构本身并不是绝对的, 每个进程可能会看到不一样的目录结构. 目录结构是由"地址空间(namespace)"来描述的, 不同的进程可能拥有不同的namespace, 不同的namespace可能有着不]]></description><category></category></item><item><title><![CDATA[linux文件读写浅析]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/40737599</link><guid>https://blog.youkuaiyun.com/lziog/article/details/40737599</guid><author>lziog</author><pubDate>Mon, 03 Nov 2014 10:55:23 +0800</pubDate><description><![CDATA[在《linux内核虚拟文件系统浅析》这篇文章中，我们看到文件是如何被打开、文件的读写是如何被触发的。
对一个已打开的文件fd进行read/write系统调用时，内核中该文件所对应的file结构的f_op->read/f_op->write被调用。
本文将顺着这条路走下去，大致看看普通磁盘文件的读写是怎样实现的。

linux内核响应一个块设备文件读写的层次结构如图（摘自ULK3）：

]]></description><category></category></item><item><title><![CDATA[linux页面回收浅析]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/40737567</link><guid>https://blog.youkuaiyun.com/lziog/article/details/40737567</guid><author>lziog</author><pubDate>Mon, 03 Nov 2014 10:54:55 +0800</pubDate><description><![CDATA[在之前的一些文章中，我们了解到linux内核会在很多情况下分配页面。


1、内核代码可能调用alloc_pages之类的函数，从管理物理页面的伙伴系统（管理区zone上的free_area空闲链表）上直接分配页面（见《linux内核内存管理浅析》）。比如：驱动程序可能用这种方式来分配缓存；创建进程时，内核也是通过这种方式分配连续的两个页面，作为进程的thread_info结构和内核栈；等等]]></description><category></category></item><item><title><![CDATA[Linux内存管理原理]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/40737539</link><guid>https://blog.youkuaiyun.com/lziog/article/details/40737539</guid><author>lziog</author><pubDate>Mon, 03 Nov 2014 10:53:11 +0800</pubDate><description><![CDATA[本文以32位机器为准，串讲一些内存管理的知识点。

 

1. 虚拟地址、物理地址、逻辑地址、线性地址

　虚拟地址又叫线性地址。linux没有采用分段机制，所以逻辑地址和虚拟地址（线性地址）（在用户态，内核态逻辑地址专指下文说的线性偏移前的地址）是一个概念。物理地址自不必提。内核的虚拟地址和物理地址，大部分只差一个线性偏移量。用户空间的虚拟地址和物理地址则采用了多级页表进行映射，但仍]]></description><category></category></item><item><title><![CDATA[如何允许 WinXP 和 Win7 自动创建 dump 文件]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/39578837</link><guid>https://blog.youkuaiyun.com/lziog/article/details/39578837</guid><author>lziog</author><pubDate>Fri, 26 Sep 2014 12:33:25 +0800</pubDate><description><![CDATA[Part 1，在 Windows 7 下，默认情况下 dump 文件的自动生成是关闭的。要开启这个功能需要新建这样一个key --

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/Windows Error Reporting/LocalDumps，并在该 key 下按照下表进行如下配置。

WinXP 和 Win7 自动创建 dump 文件"]]></description><category></category></item><item><title><![CDATA[文件过滤驱动学习笔记(三)]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/39396287</link><guid>https://blog.youkuaiyun.com/lziog/article/details/39396287</guid><author>lziog</author><pubDate>Fri, 19 Sep 2014 11:55:28 +0800</pubDate><description><![CDATA[typedef 
struct _SECTION_OBJECT_POINTERS {
 PVOID DataSectionObject;
 PVOID SharedCacheMap;
 PVOID ImageSectionObject;
} SECTION_OBJECT_POINTERS,*PSECTION_OBJECT_POINTERS;
DataSectionObject:
  ]]></description><category></category></item><item><title><![CDATA[OLE Drag&Drop 介绍]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/38584269</link><guid>https://blog.youkuaiyun.com/lziog/article/details/38584269</guid><author>lziog</author><pubDate>Fri, 15 Aug 2014 14:04:55 +0800</pubDate><description><![CDATA[一、基本概念

    拖放，是指用鼠标拖动的方法，在不同程序的窗口之间、同一程序的不同窗口之间或同一程序同一窗体的不同控件之间，进行移动、复制、粘贴数据等操作的技术。拖放操作是依靠操作系统来完成的，被拖动的对象首先向操作系统注册一种它所使用数据的格式，并且按照这种格式来提供数据，拖放结束时，目标窗口提取出数据，并根据提取的数据生成相应的对象。

    拖放方式有两种，一种是OLE拖放（]]></description><category></category></item><item><title><![CDATA[Sessions, Desktops and Windows Stations]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/38559393</link><guid>https://blog.youkuaiyun.com/lziog/article/details/38559393</guid><author>lziog</author><pubDate>Thu, 14 Aug 2014 15:39:28 +0800</pubDate><description><![CDATA[Today we are going to briefly go over the basics of some concepts that can be pretty confusing even at the best of times - Sessions, Desktops and Windows Stations.  So let's dive right in ...
A sessi]]></description><category></category></item><item><title><![CDATA[IO_REMOVE_LOCK（删除锁）]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/17606767</link><guid>https://blog.youkuaiyun.com/lziog/article/details/17606767</guid><author>lziog</author><pubDate>Fri, 27 Dec 2013 10:24:46 +0800</pubDate><description><![CDATA[IO_REMOVE_LOCK（删除锁）的具体结构没有公开，WDK的文档中中查不到IO_REMOVE_LOCK。最开始看到IO_REMOVE_LOCK是在WDK的例子event中。下面是参考网上的一些资料之后的一点总结，错误的地方请指正。

为什么要用IO_REMOVE_LOCK？

WDM 驱动程序在处理设备删除 IRP 并释放驱动程序分配的内存后可能接收到附加的 IRP。在处理附加的 I]]></description><category></category></item><item><title><![CDATA[绕过admin 黑客突破微软UAC研究初露成效]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/17093727</link><guid>https://blog.youkuaiyun.com/lziog/article/details/17093727</guid><author>lziog</author><pubDate>Tue, 03 Dec 2013 12:09:35 +0800</pubDate><description><![CDATA[第1页：Instruder突破安全防范方法

现在WIN7操作系统以经大量普及，UAC的安全机制以成为渗透过程中最为明显的绊脚石，UAC会使大量渗透工具失效，木马无法运行，如何突破UAC的层层防护是一直以来研究的重点。

在9月24日亚洲知名安全技术峰会SyScan上，Instruder做了《深入思考UAC背后的安全问题》演讲，据其提供的方法在当前用户权限下，绕过UAC提示直接运行程序，并]]></description><category></category></item><item><title><![CDATA[Credential Provider]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/16989107</link><guid>https://blog.youkuaiyun.com/lziog/article/details/16989107</guid><author>lziog</author><pubDate>Wed, 27 Nov 2013 17:30:01 +0800</pubDate><description><![CDATA[Windows操作系统的登录

WinXP利用GINA机制来登录,从Vista开始采用新的登录机制,名为Credential Provider. 

 

在 Windows Vista 之前的环境中，每个会话都有一个 winlogon 实例，它负责控制该会话的交互式登录序列,它运行在Session 0. 计算机上已注册的 GINA 加载到 winlogon 进程空间中。（还可能加载一]]></description><category></category></item><item><title><![CDATA[AcceptEx]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/16981825</link><guid>https://blog.youkuaiyun.com/lziog/article/details/16981825</guid><author>lziog</author><pubDate>Wed, 27 Nov 2013 11:01:59 +0800</pubDate><description><![CDATA[1. AcceptEx:



BOOL
PASCAL FAR
AcceptEx (
   IN SOCKET sListenSocket,
   IN SOCKET sAcceptSocket,
   IN PVOID lpOutputBuffer,
   IN DWORD dwReceiveDataLength,
   IN DWORD dwLocalAddressLen]]></description><category></category></item><item><title><![CDATA[COM线程模型]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/16964399</link><guid>https://blog.youkuaiyun.com/lziog/article/details/16964399</guid><author>lziog</author><pubDate>Tue, 26 Nov 2013 14:36:49 +0800</pubDate><description><![CDATA[线程模型是一种数学模型，专门针对多线程编程而提供的算法，但也仅是算法，不是实现。本文讲解COM提出的各个类型的线程模型，再说明COM运行时期库是如何实现它们的，就像说明Windows是如何实现线程这个数学模型的一样，最后指明一下跨套间调用和各种类型套间编写的要求以帮助理解。希望读者对于Windows操作系统的线程这个概念相当熟悉，对何谓“线程安全的”亦非常了解。

COM线程模型
    C]]></description><category></category></item><item><title><![CDATA[IOCP是一整套高性能的IO操作异步模型]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/16964225</link><guid>https://blog.youkuaiyun.com/lziog/article/details/16964225</guid><author>lziog</author><pubDate>Tue, 26 Nov 2013 14:28:25 +0800</pubDate><description><![CDATA[IOCP是一整套高性能的IO操作异步模型，可以用在文件操作也可以用在网络SOCKET操作上面。当用在网络SOCKET上时，在服务器端主要配合AceeptEx WSASend WSASendto来使用，在客户机端主要配合ConnectEx WSARecv和WSARecvFrom来使用。这几天用IOCP模型模仿IPMSG软件时有一些感触，分享如下：（这里没有具体的使用常识，这部分请参考《Windows]]></description><category></category></item><item><title><![CDATA[gcc和g++的区别]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/16908235</link><guid>https://blog.youkuaiyun.com/lziog/article/details/16908235</guid><author>lziog</author><pubDate>Sat, 23 Nov 2013 22:15:30 +0800</pubDate><description><![CDATA[gcc和g++都是GNU(组织)的一个编译器。
误区一:gcc只能编译c代码,g++只能编译c++代码
两者都可以，但是请注意：
1.后缀为.c的，gcc把它当作是C程序，而g++当作是c++程序；后缀为.cpp的，两者都会认为是c++程序，注意，虽然c++是c的超集，但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。
2.编译阶段，g++会调用gcc，对于c++代码，两者是等]]></description><category></category></item><item><title><![CDATA[编译选项]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/16907887</link><guid>https://blog.youkuaiyun.com/lziog/article/details/16907887</guid><author>lziog</author><pubDate>Sat, 23 Nov 2013 21:59:36 +0800</pubDate><description><![CDATA[GCC编译选项
gcc 编译选项,自己翻译的.- -
                                       
gcc 编译选项,自己翻译的. 
-o 设定输出文件名 
-c 只编译,不连接. 
-E 只做预编译. 
-pipe 在多个编译过程之间使用管道. 
--version 显示版本. 
-static 静态连接. 
-ansi C 模式下支持所有 ]]></description><category></category></item><item><title><![CDATA[打印流程分析笔记]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/10525895</link><guid>https://blog.youkuaiyun.com/lziog/article/details/10525895</guid><author>lziog</author><pubDate>Thu, 29 Aug 2013 15:53:33 +0800</pubDate><description><![CDATA[本地打印的流程：
 
1.    应用程序
2.   GDI引擎
3.   本地打印提供者（localspl.dll）
4.  如果是EMF格式交给EMF打印处理器（winprint.dll）转成RAW格式下面是到打印处理的函数栈
063df19c73d542b7 05f3e188 063df30c 00000000winprint!PrintDocumentOnPrintProces]]></description><category></category></item><item><title><![CDATA[Windows系统的线程调度与软件中断分发]]></title><link>https://blog.youkuaiyun.com/lziog/article/details/10518909</link><guid>https://blog.youkuaiyun.com/lziog/article/details/10518909</guid><author>lziog</author><pubDate>Thu, 29 Aug 2013 15:11:15 +0800</pubDate><description><![CDATA[在Windows操作系统内核把软件中断分为三个中断级别：DISPATCH_LEVEL，APC_LEVEL，PASSVIE_LEVEL。同时他们与线程的调试相关，WINDOWS内核中没有一个专门的程序来做线程的调度工作，它是散落在系统各个部分的。总结一下主要以下几种情况。]]></description><category></category></item></channel></rss>