博文

使用Windbg调试内核(2009-06-12 10:44:00)

摘要:Windbg是微软开发的免费源码级调试工具。Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。 1.从http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx下载Install Debugging Tools for Windows 32-bit Version  2.从http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx下载Windows Symbol Packages,安装到D:\Program Files\Symbols  3.启动Windbg,File->Symbol File Path填写以上Symbols安装路径: D:\Program Files\Symbols 4.File->Kernel Debug->Local,在下面执行lkd> !process出现以下错误: NT symbols are incorrect, please fix symbols        这个可能是D:\Program Files\Symbols\exe\ntoskrnl.pdb破损所致。 解决方案:将第3步中的Symbol File Path填写为: D:\Program Files\Symbols; SRV*D:\Program Files\Symbols*http://msdl.microsoft.com/download/symbols 按照这样设置,WinDbg将先从本地文件夹D:\Program Files\Symbols中查找Symbol,如果找不到,则自动从MS的Symbol Server上下载所需要的Symbol,并且在本地D:\Program Files\Symbols文件夹下维持一份拷贝。  5.内核调试 FileàOpenExecutableà可以选择一个可执行文件进行调试;
FileàAttache to a Processà可以选择一个运行中的进程,并对其进行调试; FileàKernel DebugàLocalà可以选择本......

阅读全文(12922) | 评论:3

Some Classical Websites on Programming(2009-05-24 14:58:00)

摘要:Cprogramming.com  http://www.cprogramming.com/ Programming in C UNIX System Calls and Subroutines using C. http://www.cs.cf.ac.uk/Dave/C/ C++ Reference  http://www.cppreference.com/ Cplusplus.com  http://www.cplusplus.com/ Tutorials on Selected C/C++ Topics http://www.augustcouncil.com/~tgibson/tutorial/ Doctor Dobb's Journal  C/C++ Features http://www.ddj.com/cpp/archives.jhtml   Visual C++ Knowledge base  http://www.vckbase.com/ 维C世界 http://vcer.net/ C++, Visual C++ and MFC - Tips and Tricks  http://visualcpp.net/ FunctionX  http://www.functionx.com/   JavaScript.com  http://www.javascript.com/ JAVASCRIPT KIT  http://www.javascriptkit.com/ THE JavaScript source  http://javascript.internet.com/ Share JavaScript http://www.sharejs.com/   Php.net  http://www.php.net/ PHP BUILDER  http://www.phpbuilder.com/ PHPDeveloper.org  http://www.phpdeveloper.org/ The PHP Resource Index  htt......

阅读全文(2668) | 评论:0

野指针小结(2009-05-19 23:07:00)

摘要: 1.指针的初始化 指针变量的零值是“空”(记为NULL)。在<stdio.h>中#define NULL 0,尽管NULL 的值与0 相同,但是两者意义不同。假设指针变量的名字为p,它与零值比较的标准if 语句如下: if (p == NULL) // p 与NULL 显式比较,强调p 是指针变量。 当我们试图析取(dereference)一个空指针NULL时,例如int *p = NULL;当我们试图cout<<*p;析取p时,将会出现内存读错误。因为0x00000000为进程私有地址,是不允许访问的,因此将会弹出应用程序错误:“0x********”指令引用的“0x00000000”内存。该内存不能“read”。 如果定义指针时把它初始化为NULL,我们的代码就能用if(ptr==NULL)来判断它是不是有效的指针。 因此,建议定义指针后将其初始化为NULL或指向合法内存。 典型错误:char *dest; char *src = "Fantasy"; strcpy(dest, src); 2.检查一个指针是否有效 malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available. If there is insufficient memory for the allocation request, by default operator new returns NULL. 用malloc 或new 申请内存之后,应该用if(p==NULL)检查指针值是否为NULL,防止使用指针值为NULL 的内存。如果指针p 是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。 3.野指针 1)、指针变量在定义后如果没有初始化是野指针,其值不为NULL,指向一个随机地址。故在使用*析取(dereference)之前,应确保指针指向合法的地址。 2)、delete某个指针后,指针所指向的变量(对象)被释放(生命周期结束),但是该指针变为野指针。 4.delete干掉了什么 一般用new运算符动态分配出来的堆内存,需要我们配对调用delete来显式回收内存,以防......

阅读全文(4779) | 评论:0

使用Carlos Antollini封装的ADO2类示例(2009-05-18 21:17:00)

摘要:1.Carlos Antollini编写的Ado封装类,几乎把所有的Ado操作都封装了。Ado2主要提供了CADOCommand,CADODatabase,CADOException,CADOFieldInfo,CADOParameter,CADORecordset,CJetEngine七个类接口,其中最常用的就是CADODatabase和CADORecordset 下面使用Carlos Antollini封装的ADO2类(version 2.20)对MS SQL Server数据库进行操作。 2.新建一个win32 Console Project,将Ado2.h和Ado2.cpp添加到项目中, 并且Project->Settings中选择Use MFC in a shared DLL,因为Ado2需要Afx支持。 3.测试代码如下: // testAdo2.cpp #include "Ado2.h" #include <stdio.h>   void main(void) {        CADODatabase* pAdoDb = new CADODatabase();        _variant_t value;        CString strConnection = "";          try        {               strConnection = "Driver={SQL Server};Server=192.168.89.125;Address=192.168.89.125,1433;Network=dbmssocn;Database=MyDB;Uid=sa;Pwd=******"; // 注意黑体部分根据实际情况填写 ......

阅读全文(5930) | 评论:1

CString的GetBuffer用法(2009-05-10 20:24:00)

摘要:一.函数原型 CString::GetBuffer LPTSTR GetBuffer( int nMinBufLength ); throw( CMemoryException ); Return Value An LPTSTR pointer to the object’s (null-terminated) character buffer. Parameters nMinBufLength The minimum size of the character buffer in characters. This value does not include space for a null terminator. Remarks Returns a pointer to the internal character buffer for the CString object. The returned LPTSTR is not const and thus allows direct modification of CString contents. If you use the pointer returned by GetBuffer to change the string contents, you must call ReleaseBuffer before using any other CString member functions. 二.函数作用及使用范围 对一个CString变量,你可以使用的唯一合法转换符是LPCTSTR,直接转换成非常量指针(LPTSTR-[const] char*)是错误的。正确的得到一个指向缓冲区的非常量指针的方法是调用GetBuffer()方法。 GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定,使得CString对象在以后的代码中继续可以实现长度自适应增长的功能。 CString ::GetBuffer有两个重载版本: LPTSTR GetBuffer( );LPTSTR GetBuffer(int nMinBufferLength); 在第二个版本中,当设定的长度小于原字符串长度时,nMinBufLength = nOldL......

阅读全文(20551) | 评论:2

Hello World From Python30(2009-05-10 00:05:00)

摘要:1.http://www.python.org/download/下载python-3.0.1.msi: Python 3.0.1 Windows installer (Windows binary -- does not include source)   2.我的电脑->属性->高级->环境变量->系统变量->变量Path->添加;C:\Python30。   3.编写helloworld.py代码   #!/usr/bin/python # Filename : C:\Python30\helloworld.py print("Welcome to Python Wolrd!")   4.进入cmd,定位到helloworld.py文件目录,执行python helloworld.py命令运行程序。   Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp.   C:\Documents and Settings\Administrator>cd C:\Python30   C:\Python30>python helloworld.py Welcome to Python Wolrd!   C:\Python30>   5.Python学习参考资料: 《简明Python教程.chm》 《Python核心编程.pdf》......

阅读全文(2595) | 评论:1

理解session机制(2009-05-04 21:01:00)

摘要:     session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 

    当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。 

    保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。一般这个cookie的名字都是类似于SEEESIONID,而。比如weblogic对于web应用程序生成的cookie,JSESSIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,它的名字就是JSESSIONID。 

    由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://...../xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
另一种是作为查询字符串附加在URL后面,表现形式为http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV......

阅读全文(2764) | 评论:0

ASP.NET中的Cookie和Session(2009-04-27 20:34:00)

摘要:一 写入Cookie 1. Name 和 Value 属性由程序设定,默认值都是空引用。
  2. Domain属性的默认值为当前URL的域名部分,不管发出这个cookie的页面在哪个目录下的。
  例如,http://www.kent.com/application1/login.aspx 页面中发出一个cookie,Domain属性缺省就是www.kent.com ,可以由程序设置此属性为需要的值。
  3. Path属性的默认值是根目录,即 ”/” ,不管发出这个cookie的页面在哪个目录下的。可以由程序设置为一定的路径来进一步限制此cookie的作用范围。
  4. Expires 属性,这个属性设置此Cooki e 的过期日期和时间。如果没有设置 Cookie 的有效期(默认设置),也可以创建 Cookie,但它不会保存到用户的硬盘上,而是会成为用户会话信息的一部分,关闭浏览器或会话超时这个Cookie即会消失,这种Cookie称作非永久性的 Cookie。存放SessionID的Cookie就是这样的一种Cookie,它不存放在硬盘上,只存在内存之中。
  5. 将要发出的Cookie附加到Response的Cookies属性中就可以将此Cookie发送到客户端:Reponse.Cookies.Add(Cookie)。
  6. Domain属性+Path属性 相同的所有Cookie 在客户端都存在一个文件中,Cookie之间以”*”分割。每个Cookie的第一行是 Cookie 的名称,第二行是值,第三行是Domain属性+Path属性组成的一个字符串,指示此Cookie的作用域,其余各行则包含 Cookie 的日常处理信息,例如过期日期和时间。Cookie 中还有一个简单的校验和,如果更改 Cookie 名称或值的长度,浏览器就会检测到修改并删除该 Cookie。
二 读取Cookie
  1. Request.Cookies 属性中包含了客户端发送到服务器的所有Cookie的集合,只有在请求URL的作用范围内的Cookie才会被浏览器连同Http请求一起发送到服务器。
  2. Name 和 Value 属性和子键的值很容易读到。
  3. Domain 和 Path 属性 是读不到......

阅读全文(2515) | 评论:0

Visual C#连接Sql Server2005(2009-04-22 21:50:00)

摘要:一.关于SQL Server 2005 关于SQL Server2005的安装参见《SQL Server 2005安装图解》一文: http://hi.baidu.com/17qupk/blog/item/0a6f0db13c62975708230242.html 注意安装过程中使用内置系统账户和混合验证模式,为账户“sa”设置密码“****”。 SQL Server 2005 Management Studio登陆界面: 在“服务器名称”下拉列表中,若选择“浏览更多”,则可以检索到网络服务器。参见 《MS SQL Server 2005网络服务器配置方法》一文: http://hi.baidu.com/loading888/blog/item/135a3b3f2981923570cf6cbb.html 在“身份验证”中选择“Sql Server身份验证”,输入用户名“sa”和密码“****”。 二.Visual C#工程中连接数据库 新建C# Console工程testDB,在VS2005菜单中选择“工具à连接到数据库”,服务器名选择“Fantasy”,使用“SQL Server身份验证”填入用户名和密码。连接到一个数据库,选择或输入一个数据库名,下拉选择“FantasyDB”,确定。 Visual Studio 2005最左侧将打开“服务器资源管理器”,右击“fantasy.FantasyDB.dbo”属性,连接字符串为: Data Source=FANTASY;Initial Catalog=FantasyDB;Persist Security Info=True;User ID=sa  三.编写测试代码连接数据库并执行查询操作 using System; using System.Collections.Generic; using System.Text; //数据库操作对象库 using System.Data; using System.Data.SqlClient;   namespace testDB {      class Program     {    &......

阅读全文(8511) | 评论:0

Guidance of SOAP(2009-04-12 17:23:00)

摘要:What is a Web Service? Web Services Standards(XML -based) -SOAP(Simple Object Access Protocol) -WSDL(Web Service Description Language) -UDDI(Universal Description,Discovery,Integration) -WS-I(Integration),WS-Policy,WS-Security,etc. http://searchwebservices.techtarget.com/searchWebServices/downloads/what_is_soap.swf What is SOAP? It is a simple Protocol that allows you to Access an Object across th Net. When software developers create systems,they rely on calling procedures to provide needed functionality. A collection of related procedures are packaged into an object. Objects can be created in such a way that they can be re-used by different systems and different developers. However,objects are typically platform specific. An object created on one platform is not always easily accessible to software written for other platforms. Furthermore,calling methods from objects distributed across the Internet is difficult. Current distributed object technologies require the use of......

阅读全文(1642) | 评论:0