自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 资源 (57)
  • 收藏
  • 关注

原创 Nginx 源码解析连载之变量解析

了解Nginx的变量机制就主要有三方面,第一点是变量获取的接口,第二点是对配置文件中变量的解析,第三点是在使用变量时的调用过程,我们来一点点看(这里只举一个变量的例子):我们来看模块ngx_http_proxy_module中的变量$host的使用过程 首先第一点,变量的声明与接口调用:见文件ngx_http_variables.c中有声明static ngx_http_var...

2013-05-30 08:18:43 268

原创 Java调用本地方法简单测试

系统环境:Linux CentOs5Java平台:JDK1.6.0_27本地方法:使用C语言,gcc编辑器这里只是一个简单的描述,其目的只是为了调用本地方法这个过程的跑通,所以一切从简!过程步骤: 1.编写Java类文件,包含本地方法声明以及调用本地方法的main方法。 2.使用javac 编译Java类文件,与正常编译...

2011-09-21 22:20:17 322

原创 java的jar打包工具的使用

java的jar是一个打包工具,用于将我们编译后的class文件打包起来,这里面主要是举一个例子用来说明这个工具的使用。 在C盘下的temp文件夹下面: [color=red]有一个com.pack.surfront的package[/color] 这个package下面有一些已经class文件如:Test1.class,Test2....

2011-07-26 15:10:35 225

原创 mysql 中文乱码 完全版解决办法

mysql是一小型数据库,各方面都讲究轻量级的实现。关于编码问题也是如此,只要搞清楚几个关键概念,便能轻轻松松的解决这个问题。在网上以搜索相关的主题是各种解法汇集,但是都没能清楚的说明解决问题的关键所在。看如下: 在进行mysql安装的时候会有一个选择mysql默认编码的机会,他默认的方式是latin1的编码方式.在这个地方应该选择我们想要的编码方式,当然了主推utf-...

2011-07-20 20:26:40 142

原创 Ajax上传文件和真实进度条实现原理

ajax文件上传: 很多时候,上传文件都只是一个小页面中的一个功能,要求在实现文件上传的前提下不刷新页面。而一般情况下将客户端的文件包装成网络地址传递到服务器端然后通过流来进行文件传输的任务都是使用浏览器来帮我们完成的,而且似乎我们非常难以插手进去。对于普通的form字段,我们可以手动拿到其中的值,然后封装成一个请求数据传输的对象,然后发出ajax请求,就可以将我们客户端的数据传递到后台...

2011-05-31 11:10:29 1010

原创 Java多线程学习笔记1

Java多线程支持称得上是java的一个重量级特性。在一般的项目开发中可能很难看到他的身影,但是有关多线程的应用却是无处不在,例如java应用程序开发中的图形界面程序,其中图形界面的处理和由我们控制的java主线程执行的程序就分别由各自的线程来执行。还有就是J2EE中服务器同时处理两个或两个以上的用户的访问的时候。下面分几个部分来讲解Java多线程的基本应用,随后有可能会谈到一些java具体的应用...

2011-05-10 13:31:46 160

原创 转(csdn)hibernate多字段查询-

1. 查询整个映射对象所有字段 Java代码 1. //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 2. String hql = "from Users"; 3. Query query = session.createQuery(hql); 4. 5...

2011-05-04 10:19:22 156

原创 hibernate 使用list集合映射的一个问题

主要问题:hibernate中集合映射list中的list-index中的问题:参见一个配置文件: 在User类的配置文件中配置了一个List是指定他向UserInfo的关联。其中有key,这是指定UserInfo类对应的table中的关联User类对应的表的外...

2011-05-04 10:18:18 296

原创 hibernate 连接查询方式之案例分析

Hibernate 效率分析:连接查询: 说明:在使用hibernate的时候,如果是一个双向的一对多的关联映射,如:(环境)public class Student { private int id; private String name; private TheClass includeClass;}public class TheClass { ...

2011-05-04 10:17:09 103

原创 Hibernate 集合映射的几个设置选项

Hibernate collection 映射:在使用set,list,map和bag标签来表示集合的时候有几个属性可以设置:1. cascade:级联属性,用于表示在对一个实体进行修改的时候修改与他关联的实体。cascade="all|none|save-update|delete|all-delete-orphan|delete-orphan",这个是在我们配置集合在one的一方中的s...

2011-05-04 10:15:18 123

原创 开始写博客了

     因为今天读了别人的一篇博客,是关于写代码烦了的时候该干些什么的讨论,而其中就包含写博客,对这一段的工作情况做一些总结,写一下感想。受其激励,终于带给了我这个一直想做却总也没有去做的事情的动力--写博客。只是为了记载我即将走下去的这条路中的种种,纵然平淡无奇,于我来说却颇为珍贵,用以怀恋我这平凡的一生。而如果我这小小的故事有了小小的读者,,,,,

2010-09-06 22:28:00 246

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6框架和源码

spring-framework-2.5.6框架和源码,如果你想使用spring,其中包含spring完成框架。而且存在源码,当你想深入学习spring的时候,这无疑是个不错的选择。 压缩密码:tri10002000

2011-03-03

精通oracle sql 编程

学习oracle的必不可少的经典教材,快来下载学习喔。因上传文件限制的需要,故分成了四卷!!

2011-03-03

精通Oracle.10g.pi.sql编程

学习oracle的必不可少的经典教材,快来下载学习喔。因上传文件限制的需要,故分成了四卷!!

2011-03-03

精通oracle sql 编程

学习oracle的经典资料,进阶必不可少。快快下载!!!!因为上传文件大小限制,故分成了四卷!

2011-03-03

经典密码学与现代密码学

经典密码学与现代密码学,对研究软件加密和加密算法不错!

2009-07-28

现代密码学pdg格式

现代密码学,对研究密码加密算法很不错的!

2009-07-28

DLL注入实例+教程

远程注入DLL方法有很多种,也是很多木马病毒所使用的隐藏进程的方法,因为通过程序加载的DLL在进程管理器是没有显示的.这里介绍一种用 CreateRemoteThread 远程建立线程的方式注入DLL. 首先,我们要提升自己的权限,因为远程注入必不可免的要访问到目标进程的内存空间,如果没有足够的系统权限,将无法作任何事.下面是这个函数是用来提升我们想要的权限用的. function EnableDebugPriv: Boolean; var hToken: THandle; tp: TTokenPrivileges; rl: Cardinal; begin Result := false; //打开进程令牌环 OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken); //获得进程本地唯一ID if LookupPrivilegeValue(nil, 'SeDebugPrivilege', tp.Privileges[0].Luid) then begin tp.PrivilegeCount := 1; tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; //调整权限 Result := AdjustTokenPrivileges(hToken, false, tp, SizeOf(tp), nil, rl); end; end; 关于 OpenProcessToken() 和 AdjustTokenPrivileges() 两个 API 的简单介绍: OpenProcessToken():获得进程访问令牌的句柄. function OpenProcessToken( ProcessHandle: THandle; //要修改访问权限的进程句柄 DesiredAccess: DWORD; //指定你要进行的操作类型 var TokenHandle: THandle//返回的访问令牌指针 ): BOOL; AdjustTokenPrivileges() :调整进程的权限. function AdjustTokenPrivileges( TokenHandle: THandle; // 访问令牌的句柄 DisableAllPrivileges: BOOL; // 决定是进行权限修改还是除能(Disable)所有权限 const NewState: TTokenPrivileges; { 指明要修改的权限,是一个指向TOKEN_PRIVILEGES结构的指针,该结构包含一个数组, 数据组的每个项指明了权限的类型和要进行的操作; } BufferLength: DWORD; //结构PreviousState的长度,如果PreviousState为空,该参数应为 0 var PreviousState: TTokenPrivileges; // 指向TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息 var ReturnLength: DWORD //实际PreviousState结构返回的大小 ) : BOOL; 远程注入DLL其实是通过 CreateRemoteThread 建立一个远程线程调用 LoadLibrary 函数来加载我们指定的DLL,可是如何能让远程线程知道我要加载DLL呢,要知道在Win32系统下,每个进程都拥有自己的4G虚拟地址空间,各个进程之间都是相互独立的。所我们需要在远程进程的内存空间里申请一块内存空间,写入我们的需要注入的 DLL 的路径. 需要用到的 API 函数有: OpenProcess():打开目标进程,得到目标进程的操作权限,详细参看MSDN function OpenProcess( dwDesiredAccess: DWORD; // 希望获得的访问权限 bInheritHandle: BOOL; // 指明是否希望所获得的句柄可以继承 dwProcessId: DWORD // 要访问的进程ID ): THandle; VirtualAllocEx():用于在目标进程内存空间中申请内存空间以写入DLL的文件名 function VirtualAllocEx( hProcess: THandle; // 申请内存所在的进程句柄 lpAddress: Pointer; // 保留页面的内存地址;一般用nil自动分配 dwSize, // 欲分配的内存大小,字节单位;注意实际分 配的内存大小是页内存大小的整数倍 flAllocationType: DWORD; flProtect: DWORD ): Pointer; WriteProcessMemory():往申请到的空间中写入DLL的文件名 function WriteProcessMemory( hProcess: THandle; //要写入内存数据的目标进程句柄 const lpBaseAddress: Pointer; //要写入的目标进程的内存指针, 需以 VirtualAllocEx() 来申请 lpBuffer: Pointer; //要写入的数据 nSize: DWORD; //写入数据的大小 var lpNumberOfBytesWritten: DWORD //实际写入的大小 ): BOOL; 然后就可以调用 CreateRemoteThread 建立远程线程调用 LoadLibrary 函数来加载我们指定的DLL. CreateRemoteThread() //在一个远程进程中建立线程 function CreateRemoteThread( hProcess: THandle; //远程进程的句柄 lpThreadAttributes: Pointer; //线程安全描述字,指向SECURITY_ATTRIBUTES结构的指针 dwStackSize: DWORD; //线程栈大小,以字节表示 lpStartAddress: TFNThreadStartRoutine; // 一个TFNThreadStartRoutine类型的指针,指向在远程进程中执行的函数地址 lpParameter: Pointer; //传入参数的指针 dwCreationFlags: DWORD; //创建线程的其它标志 var lpThreadId: DWORD //线程身份标志,如果为0, 则不返回 ): THandle; 整个远程注入DLL的具体实现代码如下: function InjectDll(const DllFullPath: string; const dwRemoteProcessId: Cardinal): Boolean; var hRemoteProcess, hRemoteThread: THandle; pszLibFileRemote: Pointer; pszLibAFilename: PwideChar; pfnStartAddr: TFNThreadStartRoutine; memSize, WriteSize, lpThreadId: Cardinal; begin Result := false; // 调整权限,使程序可以访问其他进程的内存空间 if EnableDebugPriv then begin //打开远程线程 PROCESS_ALL_ACCESS 参数表示打开所有的权限 hRemoteProcess := OpenProcess(PROCESS_ALL_ACCESS, false, dwRemoteProcessId); try // 为注入的dll文件路径分配内存大小,由于为WideChar,故要乘2 GetMem(pszLibAFilename, Length(DllFullPath) * 2 + 1); // 之所以要转换成 WideChar, 是因为当DLL位于有中文字符的路径下时不会出错 StringToWideChar(DllFullPath, pszLibAFilename, Length(DllFullPath) * 2 + 1); // 计算 pszLibAFilename 的长度,注意,是以字节为单元的长度 memSize := (1 + lstrlenW(pszLibAFilename)) * SizeOf(WCHAR); //使用VirtualAllocEx函数在远程进程的内存地址空间分配DLL文件名空间 pszLibFileRemote := VirtualAllocEx(hRemoteProcess, nil, memSize, MEM_COMMIT, PAGE_READWRITE); if Assigned(pszLibFileRemote) then begin //使用WriteProcessMemory函数将DLL的路径名写入到远程进程的内存空间 if WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, memSize, WriteSize) and (WriteSize = memSize) then begin lpThreadId := 0; // 计算LoadLibraryW的入口地址 pfnStartAddr := GetProcAddress(LoadLibrary('Kernel32.dll'), 'LoadLibraryW'); // 启动远程线程LoadLbraryW,通过远程线程调用创建新的线程 hRemoteThread := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, lpThreadId); // 如果执行成功返回 True; if (hRemoteThread <> 0) then Result := true; // 释放句柄 CloseHandle(hRemoteThread); end; end; finally // 释放句柄 CloseHandle(hRemoteProcess); end; end; end; 接下来要说的是如何卸载注入目标进程中的DLL,其实原理和注入DLL是完全相同的,只是远程调用调用的函数不同而已,这里要调用的是FreeLibrary,代码如下: function UnInjectDll(const DllFullPath: string; const dwRemoteProcessId: Cardinal): Boolean; // 进程注入和取消注入其实都差不多,只是运行的函数不同而已 var hRemoteProcess, hRemoteThread: THandle; pszLibFileRemote: PChar; pszLibAFilename: PwideChar; pfnStartAddr: TFNThreadStartRoutine; memSize, WriteSize, lpThreadId, dwHandle: Cardinal; begin Result := false; // 调整权限,使程序可以访问其他进程的内存空间 if EnableDebugPriv then begin //打开远程线程 PROCESS_ALL_ACCESS 参数表示打开所有的权限 hRemoteProcess := OpenProcess(PROCESS_ALL_ACCESS, false, dwRemoteProcessId); try // 为注入的dll文件路径分配内存大小,由于为WideChar,故要乘2 GetMem(pszLibAFilename, Length(DllFullPath) * 2 + 1); // 之所以要转换成 WideChar, 是因为当DLL位于有中文字符的路径下时不会出错 StringToWideChar(DllFullPath, pszLibAFilename, Length(DllFullPath) * 2 + 1); // 计算 pszLibAFilename 的长度,注意,是以字节为单元的长度 memSize := (1 + lstrlenW(pszLibAFilename)) * SizeOf(WCHAR); //使用VirtualAllocEx函数在远程进程的内存地址空间分配DLL文件名空间 pszLibFileRemote := VirtualAllocEx(hRemoteProcess, nil, memSize, MEM_COMMIT, PAGE_READWRITE); if Assigned(pszLibFileRemote) then begin //使用WriteProcessMemory函数将DLL的路径名写入到远程进程的内存空间 if WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, memSize, WriteSize) and (WriteSize = memSize) then begin // 计算GetModuleHandleW的入口地址 pfnStartAddr := GetProcAddress(LoadLibrary('Kernel32.dll'), 'GetModuleHandleW'); //使目标进程调用GetModuleHandleW,获得DLL在目标进程中的句柄 hRemoteThread := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, lpThreadId); // 等待GetModuleHandle运行完毕 WaitForSingleObject(hRemoteThread, INFINITE); // 获得GetModuleHandle的返回值,存在dwHandle变量中 GetExitCodeThread(hRemoteThread, dwHandle); // 计算FreeLibrary的入口地址 pfnStartAddr := GetProcAddress(LoadLibrary('Kernel32.dll'), 'FreeLibrary'); // 使目标进程调用FreeLibrary,卸载DLL hRemoteThread := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, Pointer(dwHandle), 0, lpThreadId); // 等待FreeLibrary卸载完毕 WaitForSingleObject(hRemoteThread, INFINITE); // 如果执行成功返回 True; if hRemoteProcess <> 0 then Result := true; // 释放目标进程中申请的空间 VirtualFreeEx(hRemoteProcess, pszLibFileRemote, Length(DllFullPath) + 1, MEM_DECOMMIT); // 释放句柄 CloseHandle(hRemoteThread); end; end; finally // 释放句柄 CloseHandle(hRemoteProcess); end; end; end;

2009-07-27

STL_Programmer_Guide

STL_Programmer_Guide十分适合学习STL,我的资源中还有c++ STL中文版!

2009-07-18

vc++MSDN精简版

vc++MSDN精简版,适合于初学者和只使用VC++的学者,而且方便,体积小!

2009-07-17

VC++深入详解 教程

VC++深入详解 教程,下载看一下挺不错的,欢迎下载!

2009-07-15

C%2B%2B+GUI+Programming+with+Qt4

C%2B%2B+GUI+Programming+with+Qt4.pdf C%2B%2B+GUI+Programming+with+Qt4.pdf

2009-07-14

SoftICE的全部命令中文解说

SoftICE的全部命令中文解说 对于爱好该软件的人士是一个十分不错的参考手册!

2009-07-13

新手学Visual C++30例代码

本书用语平实,浅显易懂,由浅入深,循序渐进 的确是一本不可多得的新手入门好书 我粗略的看了其中的一部分,就把我以前看了好多 其他相关的书籍都没弄懂的东西明白了

2009-07-13

OllyDbg完全教程

统一制作的ollydbg完全教程,适合初学者下载学习,走入反汇编的世界!

2009-07-04

dumpbin.exe

VC++附带的小工具,使用方便,功能强大!专用于dll的十六进制输出!

2009-07-04

几个金典游戏的C语言源代码

精心收集的几个C语言源代码专供初学者学习研究!含有1.俄罗斯方块,2.扫雷,3.推箱子4.贪吃蛇5.地对空大战,6.坦克大战7.计算机,8.五子棋9.任务管理器,

2009-06-27

几个金金典游戏C语言源代码(上)

精心收集的的几个金典游戏C语言源吗,专供初学者学习研究含有1.俄罗斯方块,2.扫雷,3.推箱子4.贪吃蛇5.地对空大战,6.坦克大战7.计算机,8.五子棋9.任务管理器,

2009-06-27

十个游戏C语言源代码

花费一下午收集的十几个C语言游戏源代码,专供初学者学习研究!含有1.俄罗斯方块,2.扫雷,3.推箱子4.贪吃蛇5.地对空大战,6.坦克大战7.计算机,8.五子棋9.任务管理器,还有一些编译没有通过的,但是还是可以参考学习的!

2009-06-23

经典小游戏的c语言源代码

收集的C语言源代码,初学者研究研究一定大有裨益的!

2009-06-19

通过BHO插件获取帐号和密码

一款通过BHO插件来获得登录信息的BHO源码,很强大,你懂的

2011-11-13

LIFERAY学习资料

这是liferay 的学习资料,没有设么用,我当网盘使用,到一个文件而已

2011-04-29

这是程书坤的开题报告

附近的卡萨累计访客拉德斯基范德萨立刻就疯狂拉升的附加快点撒浪费jad看来是发jad看来是福建打死了

2011-03-18

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6 框架 源码

spring-framework-2.5.6 框架 源码

2011-03-03

spring-framework-2.5.6框架和源码

spring-framework-2.5.6框架和源码

2011-03-03

spring-framework-2.5.6框架和源码

spring-framework-2.5.6框架和源码

2011-03-03

spring-framework-2.5.6框架和源码

spring-framework-2.5.6框架和源码,如果你想使用spring,其中包含spring完成框架。而且存在源码,当你想深入学习spring的时候,这无疑是个不错的选择。 压缩密码:tri10002000

2011-03-03

spring-framework-2.5.6框架和源码

spring-framework-2.5.6框架和源码,如果你想使用spring,其中包含spring完成框架。而且存在源码,当你想深入学习spring的时候,这无疑是个不错的选择。 压缩密码:tri10002000

2011-03-03

spring-framework-2.5.6框架和源码

spring-framework-2.5.6框架和源码,如果你想使用spring,其中包含spring完成框架。而且存在源码,当你想深入学习spring的时候,这无疑是个不错的选择。 压缩密码:tri10002000

2011-03-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除