摘要: 这两天刚装好Windows 7,碰巧前段时间有朋友问我Windows下如何安装搭建PHP环境,所以打算勤劳下,手动一步步搭建PHP环境,暂且不使用PHP环境搭建软件了,在此详细图解在Windows 7下安装配置PHP+Apache+Mysql环境的教程,希望对PHP初学者有所帮助。 在Windows 7下进行PHP环境搭建,首先需要下载PHP代码包和Apache与Mysql的安装软件包。 PHP版本:php-5.3.2-Win32-VC6-x86,VC9是专门为IIS定制的,VC6 是为了其他WEB服务软件提供的,如 Apache。我下载的是ZIP包,下载地址 Mysql版本:mys... 阅读全文
posted @ 2012-05-26 16:06 冰吻的夜 阅读(138) 评论(0) 推荐(0) 编辑
摘要: SSDT(System Services Descriptor Table),系统服务描述符表。这个表就是一个把ring3的Win32 API和ring0的内核API联系起来。SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。简介 通过修改此表的函数地址可以对常用windows函数及API进行hook,从而实现对一些关心的系统动作进行过滤、监控的目的。一些HIPS、防毒软件、系统监控、注册表监控软件往往会采用此接口来实现自己的监控模块, 目前极个别病毒确实会采用这种方法来保护自己或者破坏防毒软件,但在这种病毒进入系统前如果防毒软.. 阅读全文
posted @ 2012-05-26 16:00 冰吻的夜 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 汇编语言中所用到的基本数据类型为:字节型、字型、双字型、四字型、十字节型、字符串型;二进制位的顺序都是从右向左数,最右边的第一个二进制位称为最低位,即:第0位;最左边的第一个二进制位称为最高位;最小的存取单位为一个字节(8bits);1.字节型(DB):该类型又称为单字节类型;即:只使用一个字节(8个二进制位)的长度来存储一个变量;其中,最高位是第7位,最低位是第0位;如果用单字节类型表示有符号数时,最高位为符号位,表示范围是[-128,+127];如果用单字节类型表示无符号数时,表示范围是[0,255];通常情况下,存储器按照字节编址,读写存储器的最小信息单位就是一个字节;另外,一个字节可以 阅读全文
posted @ 2012-05-26 15:59 冰吻的夜 阅读(3025) 评论(0) 推荐(1) 编辑
摘要: 关闭Windows函数ExitWindowsEx(UINT uFlag,DWORD:dwReserved)说明:控制WINDOWS的开关:如关闭WINDOWS,重新启动WINDOWS等, ExitWindowsEx(UINT uFlags,DWORD dwReserved);是实现这一功能的API函数。如果Complile时提示EWX_XXXX未定义,那么请手动定义这几个常数,默认情况下是无需我们手动定义的。constEWX_FORCE=4; //关闭所有程序并以其他用户身份登录?(!!应为“强制执行否”吧!!)EWX_LOGOFF=0; //重新启动计算机并切换到MS-DOS方式EWX_RE 阅读全文
posted @ 2012-05-26 15:57 冰吻的夜 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 晕了,整了一个晚上,就是无法访问,原来是因为用了".do"的后缀名。改成".action"的后缀名就可以访问了。而且只能用"XXX.action"的形式,否则无法访问。 看来还是由于对struts2的过滤机制不是很清楚。 但是,我把web.xml设成这样竟然也不行: <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> 阅读全文
posted @ 2012-05-26 15:52 冰吻的夜 阅读(160) 评论(0) 推荐(0) 编辑
摘要: EL表达式1、EL简介1)语法结构${expression}2)[]与.运算符EL 提供.和[]两种运算符来存取数据。当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。例如:${user.My-Name}应当改为${user["My-Name"] }如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如:${sessionScope.user[data]}中data 是一个变量3)变量EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的 阅读全文
posted @ 2012-05-26 15:51 冰吻的夜 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 1、Option Explicit。当使用Option Explicit时,必须在模块中的所有过程声明每一个变量,否则会出现语法错误并不能被编译。这样做的好处是,它能消除程序中因为错拼变量名而导致程序 错误,所以见意使用此选项。自动设定的方法:在VBA编辑器工具菜单中选项里的编辑器选卡中的要求声明变量选项选上即可。这个每次插入新模块时会自动插入 此声明。 2、Option Private Module。当使用此设定时,模块中的代码将标记为私有,这样在宏对话框中就不能看到这些代码,也就是在Excel主界面的工具/宏/宏的对话框中不会 显示私有的子程序名称,这也防止了模块的内容被其它工程引用... 阅读全文
posted @ 2012-05-26 15:47 冰吻的夜 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 引言 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序 EXE 文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写大的 EXE 程序时,在每次修改重建时都必须调整编译所有源代码,增加了编译过程的复杂性,也不利于阶段性的单元测试。 Windows 系统平台上提供了一种完全不同的较有效的编程和运行环境,你可以将.. 阅读全文
posted @ 2012-05-26 15:45 冰吻的夜 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 语法 HHOOK WINAPI SetWindowsHookEx( __in int idHook, __in HOOKPROC lpfn, __in HINSTANCE hMod, __in DWORD dwThreadId);基本概念 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目... 阅读全文
posted @ 2012-05-26 15:43 冰吻的夜 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后 阅读全文
posted @ 2012-05-26 15:40 冰吻的夜 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为:#pragma data_seg ("shareddata")HWND sharedwnd=NULL;//共享数据#pragma data_seg()-----------------------------------------------------------------------------------------------------1,#pragma data_seg()一般用于DLL中。也就是说,在DLL中定义一个共享的,有名字的数据段。最关键的是:这个数据段中的全局变量可 阅读全文
posted @ 2012-05-26 15:37 冰吻的夜 阅读(541) 评论(0) 推荐(1) 编辑
摘要: 提到printf函数以后,就必然要提到sprintf函数 sprintf() 函數是C 語言用來格式化的主要方法,其函數原形如下所示。 int sprintf ( char * str, const char * format, ... ); 太多详细的用法还没有了解到,只是说明自己的理解 spri... 阅读全文
posted @ 2012-05-26 15:35 冰吻的夜 阅读(660) 评论(0) 推荐(0) 编辑
摘要: 编辑本段VC声明 DWORD GetLastError(VOID); 编辑本段说明 针对之前调用的api函数,用这个函数取得扩展错误信息(在vb里使用:在vb中,用Err 对象的GetLastError属性获取GetLastError的值。这样做是必要的,因为在ap... 阅读全文
posted @ 2012-05-26 15:33 冰吻的夜 阅读(363) 评论(0) 推荐(0) 编辑
摘要: Note:1、class定义时,前面不能有修饰符。(如果是在.NET平台上开发的话,可以设置/clr编译选项)2、class中的成员默认是private的,而struct和union中的成员默认是public的。(C#中class和struct里面的所有成员默认都是private)3、子类是class,父类默认是private继承; 子类是struct,父类默认是public继承; 而Unions不能继承其他的对象。如下:class BaseClass{public:int age;protected:int sex;};class MyClass1 : BaseClass // 默认是pri 阅读全文
posted @ 2012-05-26 15:31 冰吻的夜 阅读(564) 评论(0) 推荐(0) 编辑
摘要: 原则上,C++类中私有变量不允许在类之外的其他任何地方访问,一般来说功能完善的类都会提供get,set方法来操作类属性值,但如果没有get、set方法都没有提供,比如使用的是第三方提供的.o(或者动态库)来进行开发的,并且实际应用中我们确确实实需要改变其中某个对象的一个私有参数,有没有什么办法呢?我们知道,一个进程有程序段和数据段,如果我们知道了对象的数据空间,那么得到该对象的成员变量值也就很简单了,而实际上,对象数据段的首地址其实就是对象地址,以例子说明:class A{public:int i;bool setJ(int _j){j = _j;};int getJ() const {ret 阅读全文
posted @ 2012-05-26 15:29 冰吻的夜 阅读(2323) 评论(0) 推荐(0) 编辑
摘要: 当要进行底层移植的时候肯定会遇到这些问题。特整理了下。java语言基本数据类型在JAVA中一共有八种基本数据类型,他们分别是byte、short、int、long、float、double、char、boolean整型其中byte、short、int、long都是表示整数的,只不过他们的取值范围不一样byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1)short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)lo 阅读全文
posted @ 2012-05-26 15:28 冰吻的夜 阅读(662) 评论(0) 推荐(0) 编辑
摘要: 我相信写WIN32程序的人,做过DLL,都会很清楚__declspec(dllexport)的作用,它就是为了省掉在DEF文件中手工定义导出哪些 函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出 类。但是,MSDN文档里面,对于__declspec(dllimport)的说明让人感觉有点奇怪,先来看看MSDN里面是怎么说的:不使用 __declspec(dllimport) 也能正确编译代码,但使用 __declspec(dllimport) 使编译器可以生成更好的代码。编译器之所以能够生成更好的代码 阅读全文
posted @ 2012-05-26 15:18 冰吻的夜 阅读(241) 评论(0) 推荐(0) 编辑
摘要: new和delete运算符用于动态分配和撤销内存的运算符new用法:1.开辟单变量地址空间1)new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a.2)int *a = new int(5) 作用同上,但是同时将整数赋值为52.开辟数组空间一维: int *a = new int[100];开辟一个大小为100的整型数组空间二维: int **a = new int[5][6]三维及其以上:依此类推.一般用法:new 类型 [初值]delete用法:1. int *a = new int;d 阅读全文
posted @ 2012-05-26 15:17 冰吻的夜 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 在C++创建DLL,以及使用C++或者C#分别调用DLL中的方法,环境VS2005。VS2005中很多工程都可以生成DLL,例如atl,mfc,win32等等。选择Win32,步骤如下:1:新建项目TestDLL,选择win32中的win32控制台应用程序,在“应用程序设置”中,选择“应用程序类型”为DLL,并将下方的附加选项勾上“空项目”,就可以了。2:添加一个C++类,这时vs2005会生成TestDLL.h和TestDLL.cpp的文件,在.h文件中,键入如下代码:#define LIBEXPORT_API extern "C" __declspec(dllexpor 阅读全文
posted @ 2012-05-26 15:16 冰吻的夜 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 1,#pragma data_seg()一般用于DLL中。也就是说,在DLL中定义一个共享的,有名字的数据段。最关键的是:这个数据段中的全局变量可以被多个进程共享。否则多个进程之间无法共享DLL中的全局变量。2,共享数据必须初始化,否则微软编译器会把没有初始化的数据放到.BSS段中,从而导致多个进程之间的共享行为失败。3,你所谓的结果正确是一种错觉。如果你在一个DLL中这么写:#pragma data_seg("MyData")int g_Value; // Note that the global is not initialized.#pragma data_seg() 阅读全文
posted @ 2012-05-26 15:14 冰吻的夜 阅读(210) 评论(0) 推荐(0) 编辑