上一页 1 2 3 4 5 6 7 8 9 10 ··· 16 下一页
摘要: 之前写过一篇关于C#委托与事件的文章(见《C#委托和事件例析》),不过还是收到一些网友的提问。所以,今天再换另一个角度来详解一下这个问题。一、在控制台下使用委托和事件我们都知道,C#中有“接口”这个概念,所谓的“接口”就是定义一套标准,然后由实现类来具体实现其中的方法,所以说“接口,是一组类的抽象”。同样道理,我们可以将“委托”理解为“方法的抽象”,也就是说定义一个方法的模板,至于这个方法具体是怎么样的,就由方法自己去实现。我们知道接口的最大好处就是可以实现多态,同理,“委托”是可以实现方法的多态,当我们想调用某个具体方法的时候,我们不直接调用这个方法,而是去调用这个委托。当然,我们必须在具体 阅读全文
posted @ 2014-02-28 21:23 曾是土木人 阅读(973) 评论(0) 推荐(0) 编辑
摘要: 我是对Java了解相对较多,而对C#则是因工作需要才去看了一下,C#跟Java在语法上非常相似,而最初让我比较困惑的就是委托、事件部分,相信大多数初学者也有类似的困惑。经过跟Java的对比学习,发现这其实跟Java的监听、事件是等同的,只是表述上不同罢了。 委托+事件是观察者模式的一个典型例子,所谓的委托其实就是观察者,它会关心某种事件,一旦这种事件被触发,这个观察者就会行动。 下面是最近写的一个例子,相信能够加深大家对委托和事件的理解。using System;using System.Collections.Generic;using System.Text;namespace C... 阅读全文
posted @ 2014-02-28 19:54 曾是土木人 阅读(16394) 评论(0) 推荐(0) 编辑
摘要: 今天在将一套程序放到其他服务器上执行的时候,发现后台的登录验证码不管输入正确与否,总是显示:验证码输入有误接着就开始debug了。因为正确的验证码结果已经经过加密之后保存在了session中,所有用于输入的验证码会跟session中的进行比对,从而判断验证码是否输入有误!既然老是显示:"验证码输入有误"说明session中保存到结果可能有问题。然后,dump下session,发现结果为null......解决办法:使用phpinfo查看session信息,找出session的保存路径,然后给其设置写入的权限即可注:记得重启apache或iis原创文章,转载请注明出处:曾是土 阅读全文
posted @ 2014-01-21 23:31 曾是土木人 阅读(4068) 评论(0) 推荐(0) 编辑
摘要: 假设需要一个类别库,改类别库共包含以下5个类:GrandFather(祖父类)、Father(父类)、Son(儿子类)、Daughter(女儿类)、GrandSon(孙子类)各个类之间的继承关系为:相应的代码为:class GrandFather{};class Father:public GrandFather{};class Son:public Father{};class Daughter:public Father{};class GrandSon:public Son{};View Code 想要让该类别库具备IsKindOf的功能,即能在执行时期侦测某个对象是否“属于某个类别”, 阅读全文
posted @ 2013-12-17 23:46 曾是土木人 阅读(2928) 评论(1) 推荐(2) 编辑
摘要: 关于复制构造函数的具体细节:浅层复制和深层复制等可以看下 范磊老师的《零起点学通C++》视频教程和《C++ Primer Plus》一书。相信看完后,对复制构造函数能基本掌握了! 阅读全文
posted @ 2013-12-15 21:50 曾是土木人 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 运算符重载是一种形式的C++多态。运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。实际上,很多C++运算符已经被重载。eg:将*运算符用于地址,将得到存储在这个地址中的值,将他用于2个数字时,得到的将是他们的乘积。C++根据操作数的数目和类型来决定采用哪种操作。 C++允许将运算符重载扩展到用户定义的类型。例如,允许使用+将两个对象相加。编译器将根据操作数的数目和类型决定使用加法定义。运算符重载可以使代码看起来更自然。例如,将2个数组相加是一种常见的运算。通常,需要使用下面这样的for循环来实现:for (int i = 0; i 3 #include "MyTi 阅读全文
posted @ 2013-12-14 15:54 曾是土木人 阅读(568) 评论(0) 推荐(0) 编辑
摘要: 需求假设要设计一个名为estimate()的函数,估算编写指定行数的代码所需的时间,并且希望不同的程序员都可以使用该函数。对于所有的用户来说,estimate()中一部分代码都是相同的,但该函数允许每个程序员提供自己的算法来估算时间。为实现目标,采用的机制是,将程序员要使用的算法函数的地址传递给estimate()。实现代码如下// funpointer.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include double betsy(int);double pam(int);//estimate函数的第二个参数接受一个函数指针v 阅读全文
posted @ 2013-12-13 16:05 曾是土木人 阅读(840) 评论(0) 推荐(0) 编辑
摘要: 环境:Win7 64位+VC2008软件及源码下载:(http://pan.baidu.com/s/1jGE52pK)涉及到的知识点:C++多线程编程libcurl的使用(包括发送http请求、发送cookie给服务器、保存cookie)关于libcurl的资料,推荐大家参考下官方文档:http:/... 阅读全文
posted @ 2013-12-11 19:50 曾是土木人 阅读(10312) 评论(37) 推荐(4) 编辑
摘要: 如果需要C#版的,可以看下我之前写的:C#如何获取其他程序ListView控件中的内容获取其他进程的数据需要使用到以下几个函数:VirtualAllocEx()VirtualFreeEx()WriteProcessMemory()ReadProcessMemory()以获取任务管理器中的进程列表为例,运行结果如下:关键代码 HANDLE hProcess; LVITEM *pointer; HWND hwnd,hListview; int headerhwnd; //listview控件的列头句柄 int rows,cols; //listvi... 阅读全文
posted @ 2013-12-04 19:37 曾是土木人 阅读(8364) 评论(7) 推荐(1) 编辑
该文被密码保护。 阅读全文
posted @ 2013-11-29 23:47 曾是土木人 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 目录SSDT Hook效果图SSDT简介SSDT结构SSDT HOOK原理Hook前准备如何获得SSDT中函数的地址呢SSDT Hook流程SSDT Hook实现进程保护Ring3与Ring0的通信如何安装启动停止卸载服务参考文献源码附件版权SSDT Hook效果图加载驱动并成功Hook NtTerminateProcess函数:当对 指定的进程进行保护后,尝试使用“任务管理器”结束进程的时候,会弹出“拒绝访问”的窗口,说明,我们的目的已经达到:SSDT简介SSDT 的全称是 System Services Descriptor Table,系统服务描述符表。这个表就是一个把 Ring3 的 阅读全文
posted @ 2013-06-29 17:24 曾是土木人 阅读(22518) 评论(1) 推荐(4) 编辑
摘要: 为了安全起见,Windows XP及其以后的系统将一些重要的内存页设置为只读属性,这样就算有权力访问该表也不能随意对其修改,例如SSDT、IDT等。但这种方法很容易被绕过,我们只要将这些部分修改为可写属性就可以了,不过当我们的事情做完后记得把它们恢复为只读属性,不然会造成一些很难预料到的后果。 cr0是系统内的控制寄存器之一。控制寄存器是一些特殊的寄存器,它们可以控制CPU的一些重要特性。 控制寄存器最初出现于低级的286处理器中,以前称之为机器状态字(machine status word),在386以后它们被重命名为控制寄存器(control register)。 cr0寄存器直... 阅读全文
posted @ 2013-06-18 13:59 曾是土木人 阅读(5290) 评论(1) 推荐(1) 编辑
摘要: 以上有个问题:为什么同样的汇编指令JMP 12345678却对应不同的机器码呢?首先,机器码E9表明这是一个近跳转(Near Jmp)这里需要补充下相关知识:JMP分3种:①短跳转(Short Jmp,只能跳转到256字节的范围内),对应机器码:EB②近跳转(Near Jmp,可跳至同一段范围内的地址),对应机器码:E9③远跳转(Far Jmp,可跳至任意地址),对应机器码: EA短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移。远跳转指令中包含的是目标的绝对地址。所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地 阅读全文
posted @ 2013-06-18 10:15 曾是土木人 阅读(4429) 评论(2) 推荐(1) 编辑
摘要: 一、数据传输指令─────────────────────────────────────── 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI... 阅读全文
posted @ 2013-04-26 15:41 曾是土木人 阅读(604) 评论(0) 推荐(0) 编辑
摘要: 如果你将应用程序生成x86而不是Any CPU时,在64位操作系统中不会出错错误,而在32位操作系统中可能会出现以下错误“/xxxxx”应用程序中的服务器错误。--------------------------------------------------------------------------------未能加载文件或程序集“xxx”或它的某一个依赖项。试图加载格式不正确的程序。说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息: System.BadImageFormatException: 阅读全文
posted @ 2013-04-23 18:34 曾是土木人 阅读(1371) 评论(0) 推荐(1) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 16 下一页