09 2013 档案
摘要:JavaScript 是面向对象的。但是不少人对这一点理解得并不全面。在 JavaScript 中,对象分为两种。一种可以称为“普通对象”,就是我们所普遍理解的那些:数字、日期、用户自定义的对象(如:{})等等。还有一种,称为“方法对象”,就是我们通常定义的 function。你可能觉得奇怪:方法就是方法,怎么成了对象了?但是在 JavaScript 中,方法的确是被当成对象来处理的。下面是一个简单的例子:Js代码 function func(){alert( 'Hello!' );} alert(func.toString()); function func() {alert
阅读全文
摘要:2013.02.16最近看Dom Xss检测相关的Paper,涉及到Hook Javascript函数,网上翻了一下,貌似没有什么通用的函数钩子脚本,自己用就自己写一个吧。最后有代码地址,前面写下mind storm的过程。最经典且简单的Javascript函数钩子的写法应该是下面这样了: var _alert = alert;window.alert =function(s){ console.log("Hooked!"); _alert(s);}不过这种Hook方式跟闹着玩儿似的,用到实际生产上通用性不好,效率也不高。国内比较早看到的介绍Javascript函数劫...
阅读全文
摘要:解析雅虎与百度流氓原理- 为什么“浏览器劫持”能够如此猖狂呢?放眼众多论坛的求助贴,我们不时可以看到诸如“我的IE被主页被改了,我用杀毒工具扫了一遍都没发现病毒,我把主页改回自己的地址,可是一重启它又回来了!”、“我的系统一开机就跳出一个广告,我明明用了最新版的杀毒软件的啊!”等这类关于IE异常问题的求助,80%的提问者都表示纳闷,他们已经安装了杀毒软件,可是IE仍然被“黑”了,这又是为什么? 其实这些都是典型的“浏览器劫持”现象,但是受害者不是已经安装了杀毒软件吗?为什么浏览器依然躲不过这只黑手?许多用户对这个领域都存在一种误区心理:浏览器劫持?我有最新的杀毒软件,我不怕! 于是,当他们..
阅读全文
摘要:类名前只有两种修饰符:不写(即default,但不能把default写上去)或public。默认不写则此类只能被同一包下的类调用以生成相应的实例。但若是public,则可以被不同包下的类调用以生成其实例。即类名前的pulic修饰符的作用只是把此类的作用范围伸展到不同包下。一个文档下可以写多个类,但这些类必须在同一个包下,并且最多只能有一个类被修饰为public(或不加修饰符)。相当于是说一个文档下只能露一个类出来给其它包使用。三、main()函数依旧如同普通的函数,你可以在一个文档中的每个类下都写一个main()函数,等你使用javac命令将此文档编译之后,此文档下的每个类都会被编译成单独的文
阅读全文
摘要:Java中的一个包就是一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起。这个名称空间就是包名。可以使用import关键字来导入一个包。例如使用import java.util.*就可以导入名称空间java.util包里面的所有类。所谓导入这个包里面的所有类,就是在import声明这个包名以后,在接下来的程序中可以直接使用该包中的类。例如:[java] view plaincopyprint?importjava.util.*publicclassSingleImport{publicstaticvoidmain(Strin[]args){ArrayListlist=nwe
阅读全文
摘要:由于大家对package的使用存在太多困惑,我在这里将自己对于package的使用的领悟进行一点总结: package中所存放的文件 所有文件,不过一般分一下就分这三种 1,java程序源文件,扩展名为.java。 2,编译好的java类文件,扩展名为.class。 3,其他文件,其他任何文件,也称为resource 例如图片文件,xml文件,mp3文件,avi文件,文本文件…… package是什么 package好比java用来组织文件的一种虚拟文件系统。package把源代码.java文件,.class文件和其他文件有条理的进行一个组织,以供java来使用。package...
阅读全文
摘要:一.技术J2EE技术是架构师的基础。1.《Java编程思想》初学Java时阅读这本书觉得好难,阅读第二遍时才觉得讲的很细致。这是一本不怕多读的好书。2.《J2EE应用与BEA WebLogic Server》用实例详细讲了J2EE各个技术细节:Servlet,JSP,JDBC,JNDI,JMS,EJB(Session,Entity,Message) Java-Mail,JAAS。是快速学习J2EE技术的好书。3.《精通EJB》MASTERING JavaBeans Enterprise的中文版,EJB的细节讲的很好,是深入EJB的好参考。二.设计J2EE架构师除了熟悉J2EE技术外更多的需要关
阅读全文
摘要:J2EE的概念目前,Java 2平台有3个版本,它们是适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform Micro Edition,J2ME)、适用于桌面系统的Java 2平台标准版(Java 2 Platform Standard Edition,J2SE)、适用于创建服务器应用程序和服务的Java 2平台企业版(Java 2 Platform Enterprise Edition,J2EE)。J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J
阅读全文
摘要:没有JNDI的做法:程序员开发时,知道要开发访问MySQL数据库的应用,于是将一个对 MySQL JDBC 驱动程序类的引用进行了编码,并通过使用适当的 JDBC URL 连接到数据库。就像以下代码这样:Connectionconn=null;try...{Class.forName("com.mysql.jdbc.Driver",true,Thread.currentThread().getContextClassLoader());conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=qi
阅读全文
摘要:JNDI的专业解释,大家自行去网络搜索吧,这里就不啰嗦了。单纯从使用角度看,可以简称把它看成一个key-value的“哈希资源”容器。给定一个string类型的key,可以把任何类型的value,放入这个容器(通过bind/rebind方法);其它地方需要使用该资源时,根据key就能取出该资源(通过lookup方法)JNDI使用示例:View Code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656
阅读全文
摘要:前言:本文教你怎么用javac和java命令,以及如何利用脚本(shell或bat)方便处理,并用简单的实例展示这些用法。 IDE是把双刃剑,它可以什么都帮你做了,你只要敲几行代码,点几下鼠标,程序就跑起来了,用起来相当方便。你不用去关心它后面做了些什么,执行了哪些命令,基于什么原理。然而也是这种过分的依赖往往让人散失了最基本的技能,当到了一个没有IDE的地方,你便觉得无从下手,给你个代码都不知道怎么去跑。好比给你瓶水,你不知道怎么打开去喝,然后活活给渴死。 之前用惯了Myeclipse,Java文件编译运行的命令基本忘得一干二净。现在项目出了原型,放到服务器上去测试,SSH一登陆...
阅读全文
摘要:在这篇文章中,我们将学习如何在CentOS机器配置ProFTPD的服务。之后,我们将进行渗透测试,以评估FTP服务的安全性,那么我们也将学习漏洞的对策。在CentOS Linux机器的安装和配置FTP服务[1] ProFTPD的源代码库的ProFTPD的服务器(1.3.3a)旧版本的源代码下载,位于ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.3a.tar.bz2.使用的命令是没有hash签名的Proftpd(2011年)# cd/usr/local/src# wget -c ‘ftp://ftp.proftpd.org/distrib/so
阅读全文
摘要:引言:我们在工作中常用操作系统命令和DB2命令对数据库做数据的导入、导出等操作,但是DB2不支持复合SQL 语句调用操作系统命令,因此我们需要利用 UDF 来执行SQL 中不可用的操作(例如:执行一些SHELL或者BAT文件)。因为 UDF可以用外部语言(即,SQL 以外的其它语言,如JAVA,C)编写,并可以通过使用 CREATE 语句向数据库注册,这样我们就可以编写JAVA应用程序来调用操作系统命令和DB2的常用命令。步骤(windows XP环境):1、 编写JAVA程序:public class os_cmdUDF {public static int os_cmd(String cm
阅读全文
摘要:跟Oracle类似DB2也分为两个模式,日志循环vs归档日志,也就是非归档和归档模式,下面对这两种模式做简单的介绍。 日志循环 日志循环是默认方式,也就是非归档模式,这种模式只支持backup offline脱机备份,在备份过程中需要DB2停止服务。 运行脱机备份需要如下注意的地方: 1,停止应用对DB2的访问。 2,通过LIST APPLIACATIONS命令查看现有的连接,然后通过FORCE APPLIACATION命令来结束连接。 3,通过DEACTIVATE DATABASE 命令来确保数据库未处于活动状态。 4,通过BACKUP DATABASE命令来对数据库进行备份。...
阅读全文
摘要:现有条件:100M宽带接入,分配一个合法的IP(222.134.135.98)(只有1个静态IP是否够用?);Cisco防火墙PiX515e-r-DMZ-BUN1台(具有Inside、Outside、DMZ三个RJ45接口)!请问能否实现以下功能: 1、内网中的所有用户可以防问Internet和DMZ中的WEB服务器。 2、外网的用户可以防问DMZ区的Web平台。 3、DMZ区的WEB服务器可以防问内网中的SQL数据库服务器和外网中的其它服务器。 注:DMZ区WEB服务器作为应用服务器,使用内网中的数据库服务器。解决方案: 一、 概述 本方案中,根据现有的设备,只要1个合法的IP...
阅读全文
摘要:一、简介JBoss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统(operating system for web),它体现了J2EE规范中最新的技术。无论是学习还是应用,JBoss为我们提供了一个非常优秀的平台。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。JBoss具有如下优点:1、JBoss是免费的,
阅读全文
摘要:JBoss:1、 JBoss开放源代码Java EE实现,成本低,好控制。2、 JBoss需要的内存和硬盘空间比较小,但是只适合做小项目。3、 安装非常简单。先解压缩JBoss打包文件再配置一些环境变量就可以了。4、 JBoss能够“热部署”,部署Bean只是简单拷贝Bean的Jar文件到部署路径下就可以了。如果没有加载就加载它,如果已经加载就自动更新。5、 JBoss与Web服务器可在同一个Java虚拟机中运行,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能。6、 用户可以直接实施Java EE-Ear,非常方便。7、 JBoss支持集群,一个JBoss服务器实例可同
阅读全文
摘要:我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭,因为我早以习惯用C来编写程序,很欣赏C的简洁性和高效性,喜欢C简练而表达能力丰富的风格,特别忍受不了Java运行起来慢吞吞的速度,相对冗长的代码,而且一个很简单的事情,要写好多类,一个类调用一个类,心里的抵触情绪很强。我对Java的面向对象的特性琢磨良久,自认为有所领悟,也开始有意识的运用OOP风格来写程序,然而还是经常会觉得不知道应该怎样提炼类,面对一个具体的问题的时候,会觉得脑子里千头万绪的,不知道怎么下手,一不小心,又会回到原来的思路上去。举个例子,要发广告邮件,广告邮件列表存在数据库里面。
阅读全文
摘要:基本概念和典型实用例子。一、基本概念 Struts:作为基于 MVC 模式的 Web 应用最经典框架,两个项目Struts 和webwork已经集成,成为现在的Struts2。目前的最新版本是 2.0.9(2007-7)。 Spring:是一个轻型的容器,利用它可以使用一个外部 XML 配置文件方便地将对象连接在一起。每个对象都可以通过显示一个 JavaBean 属性收到一个到依赖对象的引用,留给您的简单任务就只是在一个 XML 配置文件中把它们连接好。 Hibernate 是一个纯 Java 的对象关系映射和持久性框架,它允许您用 XML 配置文件把普通 Java 对象映射到关系数据库表。.
阅读全文
摘要:在DB2中有关实例(Instance), 数据库(Database),表空间(TableSpace),容器(Container)等概念:在一个操作系统中,DB2数据服务可以同时运行多个实例(有别于Oracle在一个系统内只能起一个实例),数据库定义在实例中,一个实例可以包含多个数据库。在同一个实例中的不同数据库是完全独立的,分别拥有自己独立的系统编目表。表空间分为DMS方式和SMS(System manegement Space)方式,定义在数据库中,一个数据库中必须存在两个系统基本的表空间,分别是系统编目表空间(SysCatSpace)与系统临时表空间(SysTempSpace)。在数据库中
阅读全文
摘要:首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处。图 1 展示了 Oracle 的系统结构。将该图与 图 2 进行比较,后者显示了 DB2 的系统结构。在阅读本文的时候,为便于理解,可以参照这两个图。图 1. Oracle on Linux, UNIX, and Windows Version 10.2 的系统结构图 2. DB2 on Linux, UNIX, and Windows 系统结构回页首实例在 Oracle 和 DB2 中,实例 的概念是类似的。在这两者之中,实例都是指后台进程与共享内存的组合。两者之间的主要差别在于,在 Oracle 中每个实例只能有
阅读全文
摘要:1、简介当今IT的环境正经历着剧烈的变化,依靠单一的关系型数据库管理系统(RDBMS)管理数据的公司开始逐渐减少。分析家的报告指出 ,今天超过90%的公司都拥有不只一种RDBMS。在现在紧张的经济情况下,实际的需求正在挑战IT机构人员的工作极限。一个公司为管理每种RDBMS而配备不同DBA的情况,越来越少见了。今天的DBA必须跨平台管理不同的RDBMS,这是非常普通的事。“58%的DBA被要求管理一种以上的数据库平台。”―――来自:SearchDatabase.com的调查通常,一个DBA不但掌握基本的关系理论知识,同时具备一种专门的RDBMS经验。数据库设计和管理的基本原理在所有RDBMS之
阅读全文
摘要:很多程序员已经干了一段时间java了依然不明白jdk与jre的区别。JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。如果安装了JDK,会发同你的电脑有两套JRE,一套位于 \jre 另外一套位于 C:\Program Files\Java\jre1.5.0_15 目录下,后面这套比前面那套少
阅读全文
摘要:一、软件安装1. 安装前的准备工作1.1 首先请确认您要安装的WebLogic版本所在的平台已通过了BEA的认证,完整的认证平台列表请参考 http://e-docs.bea.com/wls/certifications/certs_810/index.html 1.2 确定一个安装目录,建议该目录下至少有1个G的空间,可以使用du来察看磁盘空间的使用情况1.3 创建一个BEA用户组帐号groupadd –g GID groupname说明:GID代表创建组的ID,一般大于500比如:groupadd –g 600 bea 1.4 创建一个weblogic用户帐号useradd –d user
阅读全文
摘要:一、解析Linux应用软件安装包,通常Linux应用软件的安装包有四种: 1) tar包,如software-1.2.3-1.tar.gz。他是使用UNIX系统的打包工具tar打包的。 2) rpm包,如software-1.2.3-1.i386.rpm。他是Redhat Linux提供的一种包封装格式。 3) dpkg包,如software-1.2.3-1.deb。他是Debain Linux提供的一种包封装格式。 4) bin包,如jdk-1_5_0_05-linux-i586.bin,有些Linux软件不公开源代码,只发布二进制可执行程序,这类程序一般会以bin来标记。 而且,大多数Li
阅读全文
摘要:很多公司都问到了二维指针,二维数组,以及指向数组的指针的相关问题,在此,简单的给大家总结下,为大家在面试的时候增加一定的信心。这类题目,总的来说,实际上可以归纳为如下几点:1、 有一个一维数组int a1[10],定义一个指针,指向一维数组名。2、 有一个一维数组int a2[10],定义一个指针,指向一维数组名的地址。3、 有一个二维数组int a3[3][4],定义一个指针,指向二维数组名。4、 有一个二维数组int a4[3][4],定义一个指针,指向二维数组名的地址。对于这类题目,刚看到,似乎感觉比较没有思路,其实我们细心思考下,这四个问题,都是让我们定义一个指针,指向一片连续的内存空
阅读全文
摘要:问题描述:假设有两个整数A=8,B=9 ,现在要交换A和B的值,使得A=9,B=8.原理分析:方法一:利用一个辅助空间C,然后先将A中的数据放在C中,然后再将B中的数据放到A中,最后再将C中的数据放到A中,这样就可以实现数据的交换了。C语言代码实现(子函数):点击(此处)折叠或打开void swap1(datatype *a,datatype *b){datatype tmp=*a;*a=*b;*b=tmp;}方法二:为了节省一个辅助空间,首先将A+B的和存储在A中,这一步可能会出现溢出的问题,所以这个方法不是很好的做法,不过这个方法提供了一个思路。然后将改变后的A减去B赋值给B,这样B中存放
阅读全文
摘要:void func1(char a[]){printf("%d",sizeof(a));}void main(){char b[55];func1(b);}输出为4,说明传递的参数数组自动退化为同类型的指针,这个例子中不论数组的容量为多少,sizeof(a)始终等于sizeof(char *)。C语言中的数组和指针总保持着'千丝万缕'的联系,这里仅针对数组作为函数实参时的情况做些说明^_^。C语言中的数组可分为一维数组和多维数组两类,而多维数组中又以二维数组最为常见。这里也仅针对这一维数组和二维数组作简要说明。看过'高质量C++编程指南'的人
阅读全文
摘要:今天在论坛上有朋友提问:声明函数如下void function(int** pInt),意图是想参数传递一个二维数组。于是就定义了一个二维数组,比如 int[1][1],然后调用函数。结果如何?当然是失败了,编译器提示:cannot convert parameter 1 from 'int [1][1]' to 'int **',参数类型不匹配。上述过程我自己也试了,当然不匹配,类型完全不一样嘛。然后我就想了:如果要将一个二维数组作为形参,那么函数该怎么声明? 来看《C++ Primer》中给出的方法:数组名作为形参[cpp] view plaincopypr
阅读全文
摘要:1. 父类的static变量和函数在派生类中依然可用,但是受访问性控制(比如,父类的private域中的就不可访问),而且对static变量来说,派生类和父类中的static变量是共用空间的,这点在利用static变量进行引用计数的时候要特别注意。 2. static函数没有“虚函数”一说。因为static函数实际上是“加上了访问控制的全局函数”,全局函数哪来的什么虚函数? 3. 派生类的friend函数可以访问派生类本身的一切变量,包括从父类继承下来的protected域中的变量。但是对父类来说,他并不是friend的。继承可以使得子类具有父类的各种属性和方法,而不需要...
阅读全文
摘要:1. Oracle跟SQL Server 2005的区别? 宏观上: 1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性 2). oracle使用的脚本语言为PL-SQL,而sql server使用的脚本为T-SQL 微观上: 从数据类型,数据库的结构等等回答 2. 如何使用Oracle的游标? 1). oracle中的游标分为显示游标和隐式游标 2). 显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录
阅读全文
摘要:哈哈,从M$ Visual C++ Team的Andy Rich那里又偷学到一招:VC8的隐含编译项/d1reportSingleClassLayout和/d1reportAllClassLayout。看个复杂的例子吧(如下),现在假设我们想知道Derived类的对象布局,怎么办? 在Project Properties->C++->Command Line->Additional Options里面加上/d1reportSingleClassLayoutDerived吧!classCommonBase{intco;};classBase1:virtualpublicComm
阅读全文
摘要:一 多重继承1) 代码:Code#include using namespace std;class B1{public:int x;virtual void v1(){ cout (pB1); pD->x = 10; pD->y = 20; pD->z = 30; pD->a = 40; PrintVTAndMember(pD); delete pD;}6) 验证代码运行结果:7)总结:与单继承相同的是所有的虚函数都包含在虚函数表中,所不同的多重继承有多个虚函数表,当子类对父类的虚函数有重写时,子类的函数覆盖父类的函数在对应的虚函数位置,当子类有新的虚函数时,这些虚函
阅读全文
摘要:继承是C++作为OOD程序设计语言的三大特征(封装,继承,多态)之一,单一非多态继承是比较好理解的,本文主要讲解GCC环境下的多重继承和虚拟继承的对象内存布局。一、多重继承 先看几个类的定义:01classTop02{03public:04inta;05};0607classLeft :publicTop08{09public:10intb;11};1213classRight :publicTop14{15public:16intc;17};1819classBottom :publicLeft,publicRight20{21public:22intd;23}; 不难想象,Le...
阅读全文
摘要:C++对象内存布局测试总结 http://hi.baidu.com/����/blog/item/826d38ff13c32e3a5d6008e8.html 上文是半年前对虚函数、虚拟继承的理解。可能有一些错漏。而且只是理解了比较简单的部分,表达也不够清晰,这次决定花的时间再做一次总结。 对于普通的C++对象内存布局,简单得不得了,就不做总结了。这里只总结涉及到虚拟继承的情况。 因为不同编译器对虚拟继承的实现采用不同的方式,所以要完整的分析是不可能的。这里只考虑VS2005/2008,还有简单涉及GCC编译器。1、单个虚拟继承只是为了分析而已,实际中并没有太大的作用。跟虚拟继承相关的派...
阅读全文
摘要:一、调试基础调试快捷键F5: 开始调试Shift+F5: 停止调试F10: 调试到下一句,这里是单步跟踪F11: 调试到下一句,跟进函数内部Shift+F11:从当前函数中跳出Ctrl+F10:调试到光标所在位置F9: 设置(取消)断点Alt+F9:高级断点设置跟踪调试1、尽量使用快捷键时行调试2、观察调试信息3、高级中断设置异常调试重试->取消->调试函数堆栈,用variables或者call stack 窗口Release调试1、经常测试你的Debug和Release版本2、不要移除调试代码,如用ASSERT, TRACE等。3、初始化变量,特别是全局变量,malloc的内存,
阅读全文
摘要:C++ 的一个 比较晦涩难懂的特点是你可以重载 new 操作符,并且你甚至可以给它附加参数。通常,操作符 new 只接受拟分配对象的大小: void* operator new(size_t nAlloc) { return malloc(nAlloc); } 但你也可以随心所欲附加参数来重载 new 操作符,只要在调用 new 时候提供这些参数即可。在各种应用程序向导(App Wizards)中,这 是 MFC 所做的事情。一个典型的 MFC 程序(.cpp)文件顶部都有下面这样的代码行,通常都由应用程序向导生成: #ifdef _DEBUG #define new DEBUG_NEW ..
阅读全文
摘要:Windows 应用程序所要做的每项工作几乎都是基于消息处理的, Windows 系统消息分为常用 Windows 消息,控件通知消息和命令。然而,有时我们需要定义自己的消息来通知程序什么事情发生了,这就是用户自定义消息。 ClassWizard 并没有提供增加用户自定义消息的功能,所以要使用用户自定义消息,必须手工编写代码。然后 ClassWizard 才可以象处理其它消息一样处理你自定义的消息。具体做法如下详解: 第一步:定义消息。一个消息实际上是开发 Windows95 应用程序时, Microsoft 推荐用户自定义消息至少是 WM_USER+100 ,因为很多新控件也要使用 WM..
阅读全文
摘要:1 先是mdl的数据结构。2 下面根据用法逐步的讲解mdl数据结构的含义:一般用法,先是 IoAllocateMdl :原型为:最常用的是VirtualAddress和Length。把自己的NonPageable buffer的起始地址传给IoAllocateMdl ,长度也传给他。可是这个函数具体做了啥呢(下面只是些基本的影响理解的部分,具体更多的东西,更细节的东西,自己去看WRK的代码)?根据length和VirtualAddress算出这块buffer总共跨越了几个virtual page。分配MDL的内存----包括上面介绍的struct _MDL(属于head部分),ULONG型bo
阅读全文
摘要:微软的文档里对MDL的描述感觉语焉不详,这两天在找工作的间隙逆向+黑盒测试了一下MmBuildMdlForNonPagedPool,把得到的一些理解描述下来。一.MDL数据结构 MDL是用来建立一块虚拟地址空间与物理页面之间的映射,结构定义如下:typedefstruct_MDL{struct_MDL*Next;CSHORTSize;CSHORTMdlFlags;struct_EPROCESS*Process;PVOIDMappedSystemVa;PVOIDStartVa;ULONGByteCount;ULONGByteOffset;}MDL,*PMDL; 各field的解释: Next:M
阅读全文
摘要:以下的虚拟内存可以理解成逻辑内存,因为我觉得只有这样才能讲通下面所有的东西。以下的“未分页”指没有为页进行编码。以下为MDL结构体(我很郁闷,我在MSDN上没有找到这个结构体)typedef struct _MDL { struct _MDL *Next; //下一个MDL CSHORT Size; //大小 CSHORT MdlFlags; //标志,保护属性等 struct _EPROCESS *Process;// PVOID MappedSystemVa; PVOID StartVa; ULONG ByteCount; ULONG ByteOffset; } MDL, *PMDL;如何
阅读全文
摘要:Windows驱动跑在核心态(Kernel mode),驱动的调用者跑在用户态。如何使用户态进程与核心态驱动共享内存呢 ?我们知道32位Windows中,默认状态下虚拟空间有4G,前2G是每个进程私有的,也就是说在进程切换的时候会变化,后2G是操作系统的,所以是固定的。既然用户态进程和核心态驱动在同一个进程空间里,是不是只要直接传个内存地址过来,就可以访问了?理论上可以但实际上不行,因为用户态的进程在不断地切换,使驱动运行时没法保证前面的用户态进程是哪个,也就不确定前2G虚拟地址空间的映射情况,那么用户态进程传来的地址也许不是合法的。比较常用的做法是通过MDL进行内存的重映射。简单地说就是将同
阅读全文
摘要:一、什么是异常处理 一句话:异常处理就是处理程序中的错误。二、为什么需要异常处理,以及异常处理的基本思想 C++之父Bjarne Stroustrup在《The C++ Programming Language》中讲到:一个库的作者可以检测出发生了运行时错误,但一般不知道怎样去处理它们(因为和用户具体的应用有关);另一方面,库的用户知道 怎样处理这些错误,但却无法检查它们何时发生(如果能检测,就可以再用户的代码里处理了,不用留给库去发现)。 Bjarne Stroustrup说:提供异常的基本目的就是为了处理上面的问题。基本思想是:让一个函数在发现了自己无法处理的错误时抛出(throw)一个异
阅读全文
浙公网安备 33010602011771号