- 博客(8)
- 资源 (2)
- 收藏
- 关注
原创 关于MDL的一些事(2)
对驱动程序采用Direct I/O方式进行数据读的测试 采用这种方式进行读数据时,I/O Manager调用MmProbeAndLockPages将ReadFile参数提供的用户空间缓冲区对应的物理页面锁定为不可换出,然后将得到的MDL放在Irp->MdlAddress里,将IRP传递给相应驱动程序的Disp
2009-11-16 16:45:00 5111
原创 关于MDL的一些事情(未完)
微软的文档里对MDL的描述感觉语焉不详,这两天在找工作的间隙逆向+黑盒测试了一下MmBuildMdlForNonPagedPool,把得到的一些理解描述下来。一.MDL数据结构 MDL是用来建立一块虚拟地址空间与物理页面之间的映射,结构定义如下: typedef struct _MDL { struct _MDL *Next; CSHORT
2009-11-15 20:46:00 3514
原创 PinkNose -- 针对进程的网络数据截取
这是个针对进程的数据包截取工具。类似于Wireshark截取到的是整个网卡上的数据包,当需要针对某一个进程,分析其网络数据流量时,Wireshark总显得不太方便。于是写了这个工具,专门针对指定的进程进行socket数据截取,如下图所示: PinkNose通过截取目标进程的Socket调用来获得发送和接受的数据,图中同色的条目对应于同一个socket。程序的运作不影
2009-09-26 21:38:00 5617 8
原创 用标准C++搞定了一个小ACM题
问题描述在这里:http://acm.pku.edu.cn/JudgeOnline/problem?id=1002 大致意思就是输入一系列字符,按照一定的规则把其转化成标准格式的电话号码,统计,对重复出现的电话号码进行计数,最后按照号码的升序排列输出 。大致就能想到应该是分成这么几步:1. 对每一行字符串转换成标准格式,将结果存储在一个类中,用“标
2008-04-29 22:48:00 1147
原创 测试LINUX下进程间阻塞的代码
#include stdio.h>#include sys/types.h>#include signal.h>#define BLOCK_PROCESS_PID 96int main(){ if(kill(BLOCK_PROCESS_PID,SIGSTOP) 0) { fprintf(stderr,"error occurs when trying to block
2007-10-06 22:43:00 1203
原创 LINUX驱动程序初体验
严格来说已经不算第一次了 大三的时候刚开始学嵌入式LINUX 就写过驱动 不过过了这么久没弄 基本忘光了 从头开始. 这篇文章不讲驱动的框架,而是记录我在编写第一个驱动中遇到的问题.问题一: 到底哪个先执行 这是一个来自运算符优先级的诡异的问题.是在编写用户空间代码时遇到的.还是先上问题代码:这段代码的意图在于打开我编写的设备,并开启设备的异步通知机制; 不过在执行write
2007-10-01 22:21:00 1189
原创 理解 operator=
前几天有人在水源C版提出这样一个问题.先是代码如下;#include iostream>using namespace std;class Base...{public : Base& operator=(const Base &a) ...{ cout"Base ="endl; return *this; }};class Devid
2007-10-01 17:58:00 3252
《Programming the Microsoft Windows driver model》的中文版
2009-05-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人