自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(338)
  • 资源 (13)
  • 收藏
  • 关注

原创 PHP漏洞全解(六)-跨网站请求伪造

CSRF(Cross Site Request Forgeries),意为跨网站请求伪造,也有写为XSRF。攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请求后,引发跨站请求伪造攻击。攻击者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个链接,由于是用户自己点击的,而他又是合法用户拥有合法权限,所以目标用户能够在网站内执行特定的HTTP链接,从而达到攻

2012-04-16 09:40:03 1045

原创 PHP漏洞全解(四)-xss跨站脚本攻击

XSS(Cross Site Scripting),意为跨网站脚本攻击,为了和样式表css(Cascading Style Sheet)区别,缩写为XSS跨站脚本主要被攻击者利用来读取网站用户的cookies或者其他个人数据,一旦攻击者得到这些数据,那么他就可以伪装成此用户来登录网站,获得此用户的权限。跨站脚本攻击的一般步骤:1、攻击者以某种方式发送xss的http链接给目标用户2

2012-04-16 09:39:03 482

原创 PHP漏洞全解(二)-命令注入攻击

命令注入攻击PHP中可以使用下列5个函数来执行外部的应用程序或函数system、exec、passthru、shell_exec、“(与shell_exec功能相同)函数原型string system(string command, int &return_var)    command 要执行的命令    return_var 存放执行命令的执行后的状态值string

2012-04-16 09:37:48 588

原创 用C语言编写复杂的中断干扰处理器

当从外部的硬件或者处理器向CPU发出异常信号的时候,中断就会发生了。CPU通过传递执行流来响应中断服务程序,其中CPU响应的过程是这样的:首先对事件进行处理,处理之后再返回中断代码。ISR本质上是一个不设任何参数和不返回任何值得函数。但是,和一般的规则函数不一样,你几乎可以在任何情况下调用ISR函数,因此在调用的时候要特别小心,特别是登陆和退出ISR函数时,要严格按照特定的执行规则和执行顺序来

2012-04-13 17:41:02 940

原创 一个简单的NT驱动之创建设备对象函数(CreateDevice)

/***************************************************************** 函数名称:CreateDrivce* 功能描述:初始化设备对象* 参数列表:   pDriverObject:从I/O管理器中传进来的驱动对象* 返回值:返回初始化状态*************************************

2012-04-13 17:16:43 1764

原创 RemoveHeadList 宏定义

如果查看DDK头文件,会发现有几个内核函数是以宏的方式实现的。这种宏中有几个宏的定义是相当糟糕的。例如,我们看到RemoveHeadList的定义如下:#define RemoveHeadList(ListHead)        (ListHead)->Flink;        {RemoveEntryList((ListHead)->Flink)}如果以以下方式调用Rem

2012-04-13 15:20:47 1813

原创 #ifdef __cplusplus 倒底是什么意思?

时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif   这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代

2012-04-13 14:01:33 476

原创 Sleep、SleepEx

Sleep和 SleepEx函数的功能是在指定的执行时间内中止所在线程的执行。SleepEx扩展了Sleep的功能,在最短超时时间间隔已到的情况下恢复线程执行外,在以下两种情况下发生时也可以恢复执行:I/O完成回调函数被调用、异步过程调用(APC)被安排进入线程中。函数原型:VOID WINAPI Sleep(    DWORD dwMillseconds);DWORD WIN

2012-04-13 13:27:52 7498

转载 wcslen与lstrlen如何区别

size_t strlen( const char *string ); size_t wcslen( const wchar_t *string ); int lstrlen(   LPCTSTR lpString  // string to count ); strlen()返回ANSI字符串长度; wcslen()返回宽字符串长度; lstrlen()依据字符

2012-04-13 11:06:42 1807

原创 #pragma 预处理指令详解

在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。      其格式一般为: #pragma  para      其中par

2012-04-12 17:52:44 441

原创 toa ltoa ultoa三个函数的区别

itoa ltoa ultoa 这3个函数在头文件 中其原形:char *itoa(int value,char *string,int radix)cahr *ltoa(long value,char *string,int radix) char *ultoa(unsigned long value,char *string,int radix)va

2012-04-12 17:21:05 7304

转载 MFC中GetDlgItemText与GetDlgItemInt函数 -

GetDlgItemText 函数 用于获取对话框中指定控件的标题或文本。  UINT GetDlgItemText(HWND hDlg, int nIDDlgItem, LPTSTR lpString, int nMaxCount);hDlg 窗口的句柄。 nIDDlgItem   指定控件的标识符(ID)。 lpString   指向用于接收获取结果的缓冲区的指针。

2012-04-12 17:17:37 20597

原创 GetCurrentProcessID、OpenProcessToken、LookupPrivilegeValue、Adj...

GetCurrentProcessID            得到当前进程的ID   OpenProcessToken          得到进程的令牌句柄LookupPrivilegeValue          查询进程的权限AdjustTokenPrivileges          判断令牌权限              要对一个任意进程(包括系统安全进程和服务进程)进

2012-04-12 16:37:09 887

转载 select_sort(选择法排序)==C++源代码

//----数学中有乘法口诀。。那只是工具。我们都很熟悉。//----C++中有一些基本的程序。也只是工具。我们必须像熟悉乘法口诀一样去熟悉这些程序。//----很基础的一些东西,必须熟练。。。    #include using namespace std;int main(){ void select_sort(int array[],int n);

2012-04-12 16:05:54 1154

转载 bubblesort(冒泡法排序)==C++源代码

//----数学中有乘法口诀。。那只是工具。我们都很熟悉。//----C++中有一些基本的程序。也只是工具。我们必须像熟悉乘法口诀一样去熟悉这些程序。//----很基础的一些东西,必须熟练。。。 //-======这些程序写的很粗糙。。。如果想用,请将其做进一步完善与修改。。。。#include    using namespace std;int main(){

2012-04-12 16:05:14 728

原创 EnumProcesses函数

当你开发的软件在用户那里运行出错了,想怎么办呢?当然是希望把出错时候的运行环境信息生成报表,然后再Email回来查看了。这里就介绍一个函数可以把当时运行环境的进程全部找到,然后可以输出每个进程的信息。当然,这个函数也可以使用到杀病毒软件里,用来查看可疑的进程信息。函数EnumProcesses声明如下:BOOLWINAPIEnumProcesses (    DWORD

2012-04-12 16:00:11 4813

原创 atoi,atol,strtod,strtol,strtoul实现类型转换

atof(将字符串转换成浮点型数)相关函数     atoi,atol,strtod,strtol,strtoul表头文件     #include 定义函数     double atof(const char *nptr);函数说明     atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时

2012-04-12 15:19:25 503

原创 NTSYSAPI NTSTATUS NTAPI

NTSYSAPINTSTATUS PsLookupProcessByProcessId(IN ULONG ulProcId,            OUT PEPROCESS * pEProcess);Winnt.h里有 #define NTSYSAPI       DECLSPEC_IMPORT 。对于这么一个NativeAPI,我们使用前必须声明。使用NTSYSAPI表明P

2012-04-12 13:26:24 1950

原创 内核函数系列

如果我们了解系统调用表有关知识,也已知道如何拦截系统调用表中的函数,那么下面,我们再来了解一下我们要钩取的函数:目标函数。这方面,如果我们不仅了解系统调用表中有哪些函数,还知道这些函数的工作机制就最好了。但实际上,ntdll.dll 中的导出函数有好几百个,别说一个一个的探究,就是把它们都列出来,看着看着头都大了。幸运的是,我们不必了解每个函数,只要了解其所在的系列就行了。为什么这么说?因为微软已

2012-04-12 11:46:55 1222

原创 cli/sti 用法

cli 禁止中断发生sti 允许中断发生在对 ss 和sp操作的时候,  如果有中断发生,中断的保存现场的操作是将相关寄存器值保存到ss:sp指向的地址.如果ss 或者sp没有完成赋值操作, 这时候ss:sp指向的地址则是不期望的地方. 如果将系统或者其他应用的数据覆盖,会导致系统/应用崩溃. 下面是两条规则:     1)在改变ss:sp之前,必须用cli指令屏蔽中断

2012-04-12 10:34:04 1045

原创 x86的控制寄存器CR0,CR1,CR2,CR3

状态和控制寄存器组除了EFLAGS、EIP ,还有四个32位的控制寄存器,它们是CR0,CR1,CR2和CR3。这几个寄存器中保存全局性和任务无关的机器状态。CR0中包含了6个预定义标志,0位是保护允许位PE(Protedted Enable),用于启动保护模式,如果PE位置1,则保护模式启动,如果PE=0,则在实模式下运行。1位是监控协处理位MP(Moniter coproc

2012-04-12 10:29:34 1220

转载 C语言中extern关键字详解

内容清单:1. 用extern声明外部变量(1)在一个文件内声明的外部变量(2)在多个文件中声明外部变量(3)在多个文件中声明外部结构体变量2. 用extern声明外部函数3. 总结 1. 用extern声明外部变量定义:外部变量是指在函数或者文件外部定义的全局变量。外部变量定义必须在所有的函数之外,且只能定义一次。(1)      在一个文件内声明的外

2012-04-11 17:34:29 753

原创 汇编指令sysenter 和sysexit这两条新汇编的解释

简单说来就是User模式向System模式的一种调用。做过Native API编程的话应该就知道,即使是看起来像内核的NTDLL.dll也只不过是Ring3级的,最终的系统调用是由ntoskrnl.exe程序向内核发送IO请求,然后内核与驱动程序返回执行结果。这个调用的中间步骤就是用SYSENTER和SYSEXIT来实现,以达到保护模式的作用。以下是转自CSDN的一篇详细一点的文章。SY

2012-04-11 16:37:06 8533

转载 城里城外看SSDT

引子2006年,中国互联网上的斗争硝烟弥漫。这时的战场上,先前颇为流行的窗口挂钩、API挂钩、进程注入等技术已然成为昨日黄花,大有逐渐淡出之势;取而代之的,则是更狠毒、更为赤裸裸的词汇:驱动、隐藏进程、Rootkit……前不久,我不经意翻出自己2005年9月写下的一篇文章《DLL的远程注入技术》,在下面看到了一位名叫L4bm0s的网友说这种技术已经过时了。虽然我也曾想过拟出若干辩解之词

2012-04-11 16:04:34 1166

原创 C语言位运算详解

位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1

2012-04-11 15:18:11 1484

原创 C语言中地址操作符&的使用

示例一01#include 02int find(int*a);03 04main()05{06    intb = 1;0

2012-04-11 15:12:25 5979

原创 Windows 自旋锁分析(四)

5,KeAcquireInStackQueuedSpinLock的实现机制 在单核处理器(WindowsXP)下观察KeAcquireInStackQueuedSpinLock的实现hal!KeAcquireInStackQueuedSpinLock:   mov    eax,dword ptr ds:[FFFE0080h]   shr     eax,4    mo

2012-04-10 15:27:27 1444

原创 Win32 汇编 [23] - 位测试指令: BT、BTC、BTR、BTS

BT、BTS、BTR、BTC;BT(Bit Test):            位测试 ;BTS(Bit Test and Set):      位测试并置位 ;BTR(Bit Test and Reset):    位测试并复位 ;BTC(Bit Test and Complement): 位测试并取反  ;它们的结果影响 CF ;它们的指令格式相同: BT r16/r32,

2012-04-10 15:11:17 7476

原创 原子操作与 x86 上的 lock 指令前缀

原子操作是不可分割的操作,在执行完毕时它不会被任何事件中断。在单处理器系统(UniProcessor,简称 UP)中,能够在单条指令中完成的操作都可以认为是原子操作,因为中断只能发生在指令与指令之间。在多处理器系统(Symmetric Multi-Processor,简称 SMP)中情况有所不同,由于系统中有多个处理器在独立的运行,即使在能单条指令中完成的操作也可能受到干扰。

2012-04-10 14:51:08 20802 1

原创 用汇编实现原子操作

原子操作(1) - 用汇编实现原子操作“最轻量级的锁”,通常也叫”原子操作”,之所以加引号是因为他们在汇编级别并不是原子操作,是用多条指令完成的,这些操作大多都是利用CPU支持的汇编指令.在某些构架过时的CPU体系结构上,它们应该是用比较重量级的线程内锁实现的吧(我的猜测).最常见的原子操作有Compare and Exchange,Self Increase/Decrease等等80

2012-04-10 14:46:02 4088

原创 Windows 自旋锁分析(三)

4,KeAcquireSpinLockRaiseToDpc的实现机制在MSDN上是这么说的:调用KeAcquireSpinLockRaiseToDpc的程序必须运行在IRQLKeAcquireSpinLockRaiseToDpc和KeAcquireSpinLock具有同样的功能,但是比KeAcquireSpinLock具有更高的效率。下面将着重关注KeAcquireSpinLo

2012-04-10 14:26:45 1008

原创 Windows 自旋锁分析(二)

3 KeAcquireSpinLockAtDpcLevel的实现机制MSDN上说明调用KeAcquireSpinLockAtDpcLevel的程序必须运行在DISPATCH_LEVEL上。在多核处理器(Windows2003)下先来查看一下KeAcquireSpinLockAtDpcLevel的汇编代码nt!KeAcquireSpinLockAtDpcLevel:  mov

2012-04-10 14:26:14 1374

原创 Windows 自旋锁分析(一)

自旋锁是一种在内核定义,只能在内核态下使用的同步机制。自旋锁用来保护共享数据或者资源,使得并发执行的程序或者在高优先级IRQL的对称多处理器的程序能够正确访问这些数据。分析Windows自旋锁,首先需要介绍Windows的IRQL。 1 Interrupt Request Level(IRQL)介绍IRQL是Interrupt RequestLevel,中断请求级别。一个由window

2012-04-10 14:25:16 3790

原创 CONTAINING_RECORD宏

今天看到别人的代码用了 CONTAINING_RECORD 这样的一个宏,我看了它的定义,如下:#define CONTAINING_RECORD(address, type, field) ((type *)( (PCHAR)(address) - (ULONG_PTR)(&((type*)0)->field)))class A{      char c;      in

2012-04-10 11:28:57 466

原创 c union

定义一个联合类型的一般形式为:   union 联合名   {   成员表   };  例如:   union w{     int a;     char b;  };    联合定义之后,即可进行联合变量说明,被说明为w类型的变量,可以存放整型量a或存放字符数组b。  二、联合变量的说明    联合变量的说明和结构变量的说明方式相

2012-04-10 10:45:52 321

原创 C_C++的union的学习笔记总结

前言  熟悉C的程序员都知道union(联合体)的用法,利用union可以用相同的存储空间存储不同型别的数据类型,从而节省内存空间。当访问其内成员时可用"."和"->"来直接访问。在C++出现后,它继承了union并保留了其在C中的特性。但是在C++中的union又有了新的扩展,这需要大家了解,要不然你会感到费解和迷惑。下面我讲两点。  一、在union中存储对象  在C中union中

2012-04-10 10:44:57 622

原创 C extern

1.引言C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不

2012-04-09 16:17:12 346

原创 WM_CLOSE / WM_DESTROY / WM_QUIT 几个消息的逻辑关系

WM_DESTROY 是关闭程序的WM_CLOSE 是关闭窗口的WM_QUIT 是关闭消息环的以下说明程序是如何退出的:使用者选按【File/Close】,于是发出 WM_CLOSE。CMyFrameWnd 并没有设置WM_CLOSE 处理常式,于是交给预设之处理常式。预设函数对于WM_CLOSE 的处理方式是呼叫 ::DestroyWindow, 并因而发出WM_DE

2012-04-09 15:03:26 720

转载 Windows API FlushFileBuffers和SetFilePointer函数

在PC硬件体系结构里,速度最快的存储器是CPU里面的寄存器,接着到二级缓存,再到系统RAM内存,最后才到硬盘。由于这样的体系结构,就决定了操作系统对文件的操作方式,或者说是最优化的算法。比如操作系统接收到写文件的数据时,就会先把数据保存到RAM里,然后在合适的时间或者合适的数据量时再写到硬盘里。但有时候我们希望数据一定要保存到硬盘里,而不是保存在RAM里,这时就需要使用函数FlushFileBuf

2012-04-09 14:21:44 1784

原创 VC++ CopyFile函数用法

BOOL CopyFile( LPCTSTR lpExistingFileName, // pointer to name of an existing file LPCTSTR lpNewFileName, // pointer to filename to copy to BOOL bFailIfExists // flag for operation if file exis

2012-04-09 14:13:32 61306 3

TensorFlow技术解析与实战 带书签 高清

本章主要介绍了人工智能、机器学习、深度学习的关系,以及深度学习的学习步骤,分析了这个领域的相关人群,以及这个领域的重要赛事。然后,全面介绍了 TensorFlow 的作用、特性,并介绍了国内做人工智能的公司,讲述了目前在产业界进行的探索,和提供给开发者的一些基础平台。

2019-02-20

深度学习框架PyTorch:入门与实践(陈云)

书从多维数组Tensor开始,循序渐进地带领读者了解PyTorch各方面的基础知识,并结合基础知识和前沿研究,带领读者从零开始完成几个经典有趣的深度学习小目,包括GAN 生成动漫头像、AI滤镜、AI 写诗等。本书没有简单机械地介绍各个函数接口的使用,而是尝试分门别类、循序渐进地向读者介绍PyTorch的知识,希望读者对PyTorch有一个完整的认识。本书内容由浅入深,无论是深度学习的初学者,还是第一次接触PyTorch的研究人员,都能在学习本书的过程中快速掌握PyTorch。即使是有一定PyTorch使用经验的用户,也能够从本书中获得对PyTorch 不一样的理解。 [1] 该书由浅入深,利用Jupyter notebook帮助读者快速学习PyTorch,并带领读者从零开始完成Kaggle比赛、GAN生成动漫头像、AI滤镜、RNN写诗、图像描述等深度有趣的应用。

2019-02-19

王晋东博士迁移学习系列

“看了王晋东同学的“迁移学习小册子”, 点三个赞! 迁移学习被认为是机器学习的下一个爆点,但介绍迁移学习的文章却很有限。 这个册子深入浅出,既回顾了迁移学习的发展历史,又囊括了迁移学习的最新进展。 语言流畅,简明通透。 应该对机器学习的入门和提高都有很大帮助!”

2019-02-17

深度学习原理与应用实践OCR(带有书签)

介绍了行业现状, 以及一些常用网络和算法。 比较好的入门资料。

2019-01-27

apache kylin权威指南

: 前  言 “麒麟出没,必有祥瑞。” ——中国古谚语 “于我而言,与Apache Kylin团队一起合作使Kylin通过孵化成为顶级项目是非常激动人心的,诚然,Kylin在技术方面非常振奋人心,但同样令人兴奋的是Kylin代表了亚洲国家,特别是中国,在开源社区中越来越高的参与度。

2019-01-27

深度强化学习原理入门

去年,DeepMind 的 AlphaGo 以 4-1 的比分打败了世界围棋冠军李世乭。超过 2 亿的观众就这样看着强化学习(reinforce learning)走上了世界舞台。几年前,DeepMind 制作了一个可以玩 Atari 游戏的机器人,引发轩然大波。此后这个公司很快被谷歌收购。 很多研究者相信,强化学习是我们创造通用人工智能(Artificial General Intelligence)的最佳手段。这是一个令人兴奋的领域,有着许多未解决的挑战和巨大的潜能。

2019-01-25

spark 源码分析

《Apache Spark源码剖析》以Spark 1.02版本源码为切入点,着力于探寻Spark所要解决的主要问题及其解决办法,通过一系列精心设计的小实验来分析每一步背后的处理逻辑。 《Apache Spark源码剖析》第3~5章详细介绍了Spark Core中作业的提交与执行,对容错处理也进行了详细分析,有助读者深刻把握Spark实现机理。第6~9章对Spark Lib库进行了初步的探索。在对源码有了一定的分析之后,读者可尽快掌握Spark技术。

2019-01-25

深入理解Java虚拟机高清PDF

《深入理解Java虚拟机:JVM高级特性与最佳实践》共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。第一部分从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、模块化,以及JDK的编译,这对理解本书后面内容有重要帮助。第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监

2018-12-18

docker 高清

docker高清教程 。简洁实用

2018-09-13

Windows内核原理与实现

关于windowNT内核介绍的很详细。驱动开发。内核核心数据结构等等

2012-11-26

黑客反汇编

超级无敌黑客反汇编,黑客必备。各种手法。linux window 系统反汇编。

2012-03-27

极好的c++精华笔记

C++ 极好的c++精华笔记,学c++的同学很值得一看

2012-03-27

linux内核驱动编写

极好的 linux 内核驱动 资料 学习linux的同学看啊

2011-10-18

空空如也

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

TA关注的人

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