自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qiaoli的知识备忘录

实践是检验真理的唯一标准——没有实践,就没有发言权

  • 博客(47)
  • 资源 (1)
  • 收藏
  • 关注

转载 NAT穿透(UDP打洞)

1、NAT(Network Address Translator)介绍NAT有两大类,基本NAT和NAPT。1.1、基本NAT静态NAT:一个公网IP对应一个内部IP,一对一转换动态NAT:N个公网IP对应M个内部IP,不固定的一对一转换关系 1.2、NAPT(Network Address/Port Translator)现在基本使用这种,又分为对称和锥型NAT。锥型NAT,有完全锥型、受限制锥...

2018-04-08 11:05:32 486

转载 /MT /MD /ML /MTd /MDd /MLd 的区别(C 运行时库)

运行时库是程序在运行时所需要的库文件 ,通常运行时库是以 LIB 或 DLL 形式提供的。 C 运行时库诞生于 20 世纪 70 年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于新观念。所以这个时期的 C 运行时库都是单线程的。随着操作系统多线程技术的发展,最初的 C 运行时库无法满足程序的需求,出现了严重的问题。 C 运行时库使用了多个全局变量(例如 e

2016-02-04 15:59:48 962

原创 windbg分析64位机上32位程序的dump文件

将dump拖入到windbg中后,在command输入栏输入【.load wow64exts 】回车,再输入【!sw 】回车,这样就将dump从32位模式切换到了64位模式,否则看到的call stack 对我们分析dump是没有帮助的。然后就可以使用其它的命令来分析了。参考:http://www.cnblogs.com/suiyingjie/archive/2012/12/0

2015-11-20 09:34:41 927

转载 浅谈脱壳中的Dump技术

原文连接:http://bbs.pediy.com/showthread.php?t=17624在此先记录下网址,以后再整理原文,以免忘了。

2015-08-18 16:13:11 447

转载 Run-down Protection

原文连接:http://bbs.pediy.com/showthread.php?t=173763NT 5.1 内核引入的Run-down ProtectionXP以后的windows内核,引用了一种新的同步技术,微软叫它: Run-down Protection。这种同步技术至今还很神密,连很多搞内核和驱动很有经验的朋友,和他们讨论起来的时候,了解的人也不多。所以

2015-08-18 16:08:33 839

转载 Windows中FS段寄存器 V2

原文链接:http://blog.csdn.net/misterliwei/article/details/4391580 Windows 中  FS  段寄存器  V2 [注意:本文是以前文章《 Windows中FS段寄存器》的修订版。 ]     代码运行在 RING0 (系统地址空间)和 RING3(用户地址空间)时, FS

2015-07-21 10:41:40 431

转载 简单解释Windows如何使用FS段寄存器

原文连接:http://bbs.pediy.com/showthread.php?t=159935昨天有人问我,为什么进程,线程的很多关键信息可以简单的通过FS寄存器来取到。是啊,为什么呢?于是便有了这篇文章。     确实通过读取FS寄存器指定的内存可以获得很多系统关键信息, 主要是和进线程相关的很多信息,例如代码:lkd> u PsGetCurren

2015-07-20 23:57:19 1010

转载 IAT HOOK

原文连接:http://blog.csdn.net/misterliwei/article/details/840983  一.            IAT   法      IAT  法就是通过修改 IAT  表中的函数地址而达到的 API   截获的方法。     1   .技术与实现       每个调用的 API  函数地址都保存在 IAT

2015-07-16 15:29:52 424

转载 重定位表

原文连接:http://www.feiesoft.com/win32asm/win32asm-17-19.html WIN32汇编语言教程:第17章 PE文件 · 17.5  重定位表(1) 什么是重定位,代码又是在什么情况下才需要重定位呢?这个问题早在13.4.2节中就回答过了,那就是在32位代码中,涉及到直接寻址的指令都是需要重定位的(而在DOS的16位代码中,只有涉及到段

2015-07-14 13:49:25 1245

转载 驱动开发中使用安全字符串函数

一、前言       大量的系统安全问题是由于薄弱的缓冲处理以及由此产生的缓冲区溢出造成的,而薄弱的缓冲区处理常常与字符串操作相关。c/c++语言运行库提供的标准字符串操作函数(strcpy, strcat, sprintf等)不能阻止在超出字符串尾端的写入。       基于Windows XP SP1以及随后的操作系统的Windows DDK版本提供了安全字符串函数(safe stri

2015-07-08 13:10:11 398

转载 导入表 与 IAT

原文连接:http://www.feiesoft.com/win32asm/win32asm-17-9.html在开始下面几节的介绍前,先来复习一下17.1节中提出的两个概念。首先,PE文件中的数据按照装入内存后的页面属性被划分成多个节,并由节表中的数据来描述这些节。一个节中的数据仅仅是属性相同而已,并不一定就是同一种用途的,比如导入表、导出表等就有可能和只读常

2015-06-22 23:10:37 648

原创 内核函数前缀简单介绍

1.KiEtw系列:本系列内核函数用于系统内核,这些函数只能从内核的内部进行调用,常用的有:KiUserCallbackDispatcher、KiRaiseUserExceptionDispatcher、KiUserApcDispatcher、KiUserExceptionDispatcher等。2.Csr系列:此系列函数用于客户机和服务器运行时,如果您想拦截客户机/服务器方面的操作,

2015-06-19 17:57:22 739

转载 从KPCR中获取内核基地址

原文连接:http://www.cnblogs.com/unixstudio/archive/2012/11/05/2755356.html 操作系统的内核模块根据处理器的个数和是否支持PAE(Physical Address Extension物理地址扩展)分为以下四种        ntoskrnl.exe ---Uniprocessor单处理器,不支持PAE       

2015-06-16 13:24:32 1323

转载 Win7 OBJECT_HEADER之TypeIndex解析

Xp下的Object Header: Win7 下的对象头: Windows系统的对象管理中,为了能够从对象头获取对象类型指针,在Win7以前的系统里直接在OBJECT_HEADER里保存了POBJECT_TYPE指针,而这一点在Win7系统里发生了改变。Win7中把所有的对象类型放在了一个表里,这个表叫做ObTypeIndexTable。这个表可以这么定义:POBJE

2015-06-16 11:27:50 626

转载 Windbg 手工玩转句柄表

句柄是Windows对象管理中引入的一个东西,它的实际意义是对象在句柄表中的索引。Windows2000使用的是固定的三层句柄表,而WindowsXP和Windows2003都是使用的动态可扩展的三层句柄表,这是一种很优秀的结构,易扩展,且查找迅速,值得学习。通常情况下每个进程的句柄表都是一级表,当句柄数超过一级表的容量时,就会扩展为二级表,此时二级表中放的是指向一级表的指针。同样,当二级表也放满

2015-06-16 09:31:02 655

转载 (Win7) PspCidTable遍历进程句柄表,枚举进程

本文出自悠然品鉴小悠,转载请注明出处http://www.youranshare.com/blog/sid/102.html先说一下句柄表是什么在windows内核中定义了很多内核对象,像文件对象,线程对象,信号量对象啊等等;而Windows中并没有让我们直接去使用这些对象资源,而是通过句柄让我们去引用这些资源,句柄表就相当于资源的数组,而句柄就是对应资源的索引,每个进程内部都有一个自

2015-06-15 16:42:12 2939

原创 关于代码中区分debug与release、32位与64位、xp还是win7编译的宏定义

在写代码的过程中,我们经常需要考虑这样的一些问题:有一部分代码片段只有在32位编译环境下编译才能通过,在64位编译环境下是无法编译通过的,那么怎样才能判断当前编译环境是32位编译还是64位编译?还有,如何判断当前编译是debug编译还是release编译?再者,有些API是在vista之后才出现的,那又该如何区分当前编译环境是xp还是win7? 这里做下备忘,省得忘了之后又要疯狂的google和百

2015-06-10 15:50:00 1903

转载 段描述符

4.3.4  段描述符 来自《Linux内核完全剖析—基于0.12内核》第4章80x86保护模式及其编程 前面我们已经说明了使用段选择符来定位描述符表中的一个描述符。段描述符是GDT和LDT表中的一个数据结构项,用于向处理器提供有关一个段的位置和大小信息以及访问控制的状态信息。每个段描述符的长度是8字节,含有3个主要字段:段基地址、段限长和段属性。段描述符通常由编译器、链接器、加载器或

2015-05-28 16:42:16 946

原创 保护模式下的分段内存寻址

段选择符32位汇编中16位段寄存器(CS、DS、ES、SS、FS、GS)中不再存放段基址,而是段描述符在段描述符表中的索引值,D3-D15位是索引值,D0-D1位是优先级(RPL)用于特权检查,D2位是描述符表引用指示位TI,TI=0指 示从全局描述表GDT中读取描述符,TI=1指示从局部描述符中LDT中读取描述符。这些信息总称段选择符(段选择子).关于特权级的说明:任务中的每一个段都

2015-05-28 14:46:59 601

转载 线程局部存储实现

《程序员的自我修养:链接、装载与库》第11章运行库。本章主要介绍运行库的概念、C/C++运行库、Glibc和MSVC CRT、运行库如何实现C++全局构造和析构及以fread()库函数为例对运行库进行剖析。本节为大家介绍线程局部存储实现。 11.3.3  线程局部存储实现(1)很多时候,开发者在编写多线程程序的时候都希望存储一些线程私有的数据。我们知

2015-05-25 11:38:48 1131

转载 WinDBG 技巧:设断点命令详解(bp, bu, bm, ba 以及bl, bc, bd, be)

WinDBG 提供了多种设断点的命令:bp, bu, bm, ba  bp 命令是在某个地址下断点, 可以 bp 0x7783FEB 也可以 bp MyApp!SomeFunction 。 对于后者,WinDBG 会自动找到MyApp!SomeFunction 对应的地址并设置断点。 但是使用bp的问题在于:1)当代码修改之后,函数地址改变,该断点仍然保持在相同位置,不一定继续有效;

2015-05-15 16:36:17 346

转载 Windows 2000内存篇 分页机制介绍

关于Windows内存管理,可以参考《Windows内核原理与实现》一书中的第4章内存管理,其中描述了另一种内存管理:段式内存管理基本概念     Windows 2000 使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射。程序中使用的都是4GB地址

2015-05-10 23:20:43 335

原创 VS2013 配置远程调试

一、环境主机host +虚拟机OR主机A+主机B(两台物理机) VS2013 一般放在物理机上 注意:不管是哪种情况,两台主机必须位于同一个局域网之内(调试虚拟机中的EXE时,虚拟机要采用桥接方式访问网络)。 网络配置示例:主机IP虚拟机IP 虚拟机配置如下:a、将VS2013安装目录下的C:\Program Files (x86)\

2015-04-13 11:46:01 3634

转载 访问控制模型(Access Control Model)

原文连接:http://bbs.pediy.com/showthread.php?t=173381当一个线程使用Open*打开一个内核对象时,会发生什么?有两种可能:1. 打开成功,拿到句柄2. 打开失败这不是废话么?!为啥打开失败呢?有两种可能:1. 当前线程不具有指定的特权2.  权限不足(由dwDesiredAccess参数指定权限

2015-03-31 23:51:01 695

转载 理解和使用NT驱动程序的执行上下文

理解Windows NT驱动程序最重要的概念之一就是驱动程序运行时所处的“执行上下文”。理解并小心地应用这个概念可以帮助你构建更快、更高效的驱动程序。 NT标准内核模式驱动程序编程中的一个重要观念是某个特定的驱动程序函数执行时所处的“上下文”。传统上文件系统开发者最关注这个问题,但所有类型的NT内核模式驱动程序的编写者都能从对执行上下文的深刻理解中获益。小心谨慎地使用执行上下文的概

2015-03-15 23:31:20 905

转载 MDL的使用简介

锁定内存页的意思是:被锁定内存页会一直存在于物理内存中,不会被置换到磁盘文件中去。MDL只能在内核态使用,但它指定的虚拟内存即可以是内核态地址也可以是用户态地址。如果是用户态的地址你必须要自行弄清地址所在的进程上下文,因为不同的进程拥有不同的地址空间,即使地址的值一模一样它们包含的数据也一定完全不同。如果是内核态的地址那么事情会变的稍微简单点,因为在内核态地址空间是共享的,同一

2015-03-14 17:16:55 2160

转载 MDL的理解

最近在看《Windows NT File System Internals》,重新理解MDL。什么是mdl:             Mdl的全称是内存描述符列表(Memory Descriptor list),主要用于关联虚拟地址和物理地址,有点像页表。但是,比页表简单,其实它对于虚拟地址的映射也是查看页表得到的。虚拟地址在mdl中可以通过一个宏获得,物理地址的页帧存放在

2015-03-14 16:33:19 8470

转载 在驱动和应用程序间共享内存

译自:The NT Insider November-December 2007 Volume 14 Issue 4译者:lioqio[编辑提示:《The NT Insider》将陆续对以前文章进行维护修正,以便确认这些文章针对Windows的大多数当前版本是正确的,并且反映了最好的工程实践。这篇文章是OSR在线上最频繁被引用的文章之一,作为该系列的第一篇]

2015-03-14 16:32:05 778

转载 详解Windows内存分页机制

原文链接: http://bbs.pediy.com/showthread.php?t=135274标 题: 【原创】详解Windows内存分页机制作 者: 莫灰灰时 间: 2011-06-11,19:18:49链 接: http://bbs.pediy.com/showthread.php?t=135274昨天新买了两本书, 看到了内存分页部分, 特此记录下,

2015-03-14 13:53:07 3395

原创 从文件系统到磁盘的驱动栈

实验环境:win7(64)工具:devicetree 1、         磁盘驱动: 2、         分区管理驱动: 分区和卷的关系:简单卷(simple Volume)是指这样的对象:它描述了单个分区中的扇区,文件系统驱动程序将它当作一个单元来管理。多分区卷(multipartition Volume)是指这样的对象:它描述了多个分区中的扇区,

2015-03-13 15:44:44 791

转载 PspCidTable

PspCidTable也是一个句柄表,其格式与普通的句柄表是完全一样的.但它与每 个进程私有的句柄表有以下不同:1.PspCidTable中存放的对象是系统中所有的进线程对象,其索引就是PID和TID2.PspCidTable中存放的直接是对象体(EPROCESS和ETHREAD),而每个进程私有的句柄表则存放的是对象头 (OBJECT_HEADER)3.PspCidTable是一个独

2015-03-12 15:02:30 2024

原创 Windows 进程的句柄表

本文源自《Windows内核原理与实现》第3章Windows 进程和线程3.4.1 Windows 进程的句柄表(1)上一章介绍了Windows 内核中的对象管理器,Windows 执行体实现了一套对象机制来管理各种资源或实体。每种对象都有一个类型对象,类型对象定义了该类对象的一些特性和方法。对象管理器也定义了一个全局名字空间,提供了根据名称来解析对象的统一机制(参考O

2015-03-12 14:49:32 2349

转载 驱动程序与应用程序之间共享内存

http://blog.csdn.net/whf727/article/details/2592267  随手写点自己碰到的问题。在写内核模式的驱动程序时,经常需要做的就是驱动程序和应用程序之间的通信。如应层程序和驱动程序之间共享事件来完成同步,事件可以有应用程序来创建然后将其句柄下发到驱动程序中,驱动程序进行引用等操作,就可以实现共享事件了。这里就不说这个了,主要说说驱动和应用程序之间的

2015-03-11 17:14:46 598

原创 内存对齐规则

一、内存对齐的原因大部分的参考资料都是如是说的:1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。二、对齐规则每个特定平台上

2015-03-02 09:50:06 355

转载 #pragma pack命令

pack 为 struct, union 和 class 等的成员对齐指定字节边界. 与编译选项的 /Zp 开关不同, 它不针对整个项目, 而仅针对模块, 比如一个编译单元. 1. #pragma pack(show)    以警告信息的形式显示当前字节对齐的值.2. #pragma pack(n)    将当前字节对齐值设为 n .3. #pragma pack() 

2015-02-28 17:31:16 282

转载 Microsoft C 和 C++ 编译器与链接器的参数

CL.exe   是控制   Microsoft   C   和   C++   编译器与链接器的   32   位工具。编译器产生通用对象文件格式   (COFF)   对象   (.obj)   文件。链接器产生可执行文件   (.exe)   或动态链接库文件   (DLL)。         注意,所有编译器选项都区分大小写。         若要编译但不链接,请使用

2015-02-28 16:24:23 565

原创 类的交叉引用(或头文件依赖与交叉包含)

注:类的交叉引用本身就是一种不好的设计,但是,有时我们又不得不这样用。问题两种常见情况:(1)直接相互引用模型:A.h中#include "B.h"B.h中#include "A.h"(2)传递式相互引用(或者叫环形)模型:A.h中#include "B.h"B.h中#include "C.h"C.h中#include "A.h"B代

2015-02-28 15:17:06 4422

转载 避免同一个文件被多次包含

为了避免同一个文件被include多次,C/C++中有两种宏实现方式:一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但两者仍然有一些细微的区别。【1】两者的使用方式有何区别?示例代码如下:1 //方式一:2 #ifndef __SOMEFILE_H__3 #define __SOMEF

2015-02-28 14:02:12 630

转载 VMware+Windgb+Win7内核驱动调试

Vista及其以后的微软操作系统和XP不同, 没有boot.ini文件, 需要用bcdedit进行启动设置。所以,在此转载一篇WinDbg+VMWare+Win7(这儿的Win7安装在VMWare中,而真实机的操作系统无要求)内核驱动调试环境搭建的文章。原文链接:http://www.cnblogs.com/lzjsky/archive/2010/12/14/1905248.htm

2015-02-09 19:00:54 463

原创 VMWare+WinDbg搭建驱动调试环境

一般情况下,需要手动来搭建VMWare+WinDbg的驱动调试环境,目前有一种工具——VirtualKD,它简化了手动搭建的过程,使配置过程变得简单,而且加快了WinDbg与VMWare之间的调试通讯速度。        VirtualKD是一款免费的软件,可以在网上随意下载,使用方法也可以在网上找到。目前的VirtualKD还不能支持刚出来的Win10技术预览版,要想在Win10上调试驱动,

2015-02-09 18:28:32 864

空空如也

空空如也

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

TA关注的人

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