自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

BpLife

free and true love

  • 博客(74)
  • 收藏
  • 关注

原创 feed the pigeons

I start to feed one of the pigeons. A minute later two more fly by and a minute after that another 3. Then 4, and so on (Ex: 1+2+3+4+...). One portion of food lasts a pigeon for a minute, but in case

2014-06-26 16:49:35 747

原创 无类型语言crowbar源码解析-0

最近对编译原理比较感谢在看自制编程语言,

2014-05-06 18:28:34 1491

原创 linux下简单安装insight

http://baptiste-wicht.com/posts/2012/01/install-insight-debugger-linux-mint-ubuntu.html

2014-05-06 16:57:33 750

原创 lex,yacc easy calulator

/*lex.l*/%{#include "y.tab.h"extern vbltable[26];%}%option noyywrap%%[1-9][0-9]*|0|([0-9]+\.[0-9]+) {yylval.dval = atof(yytext); return NUMBER;}[ \t] ;[a-z]+ {yylval.vblno = yytext[0] - 'a';

2014-04-17 18:28:25 756

原创 recognizing easy sentence with lex and yacc

%{#include /* we found the following required for some yacc implementations. *//* #define YYSTYPE int */%}%token NOUN PRONOUN VERB ADVERB ADJECTIVE PREPOSITION CONJUNCTION%%sentence: simple_

2014-04-12 22:10:33 725

原创 lex demo

%{enum { LOOKUP =0, VERB, ADJ, CONJ};int state;int add_word(int type, char *word);int lookup_word(char *word);%}%option noyywrap%%\n {state = LOOKUP;}^VERB {state = VERB;}^ADJ {sta

2014-04-12 21:36:19 458

转载 A20 Gate

很多稀奇古怪的东西都是由于系统升级时,为了保持向下兼容而产生的,A20 Gate就是其中之一。在8086/8088中,只有20根地址总线,所以可以访问的地址是2^20=1M,但由于8086/8088是16位地址模式,能够表示的地址范围是0-64K,所以为了在8086/8088下能够访问1M内存,Intel采取了分段的模式:16位段基地址:16位偏移。其绝对地址计算方法为:16位基地址左移4

2014-03-08 21:12:33 680

转载 0x86内存管理寄存器

一、内存管理寄存器处理器提供了4个内存管理寄存器(GDTR、LDTR、IDTR和TR),用于指定内存分段管理所用系统表的基地址,如图4-2所示。处理器为这些寄存器的加载和保存提供了特定的指令。有关系统表的作用请参见4.2节"保护模式内存管理"中的详细说明。 (点击查看大图)图4-2  内存管理寄存器GDTR、LDTR、IDTR

2014-03-07 17:14:27 1449

原创 ActiveX 笔记

1.ActiveX控件可以看做是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。容器应用程序是可以嵌入和链接对象的应用程序。服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序。2.一个典型的ActiveX控件它具有方法,属性,事件这三种特性。3.ColeControl提供了一个OnDraw函数,当控件窗口发生重绘时就会调用

2014-01-01 11:09:16 484

原创 sysenter/sysexit 原理

1.从ring0到ring3最开始是用的int2E,此模式切换过程设计很多次内存访问,还有两次查表操作机访问权限的检查,这导致模式切换的开销很大从PentiumII 处理器开始,Inter引入了新的指令sysenter/sysexit,来实现快速的模式切换。2.其做法尽可能避免内存访问,而通过处理器的内部寄存器来指定必要信息。sysenter使用3个MSR寄存器来指定跳转目的地址和栈位

2013-12-12 16:10:15 1868

原创 IO设备控制操作--DeviceIoControl

1.除了ReadFile和WirteFile以外,应用程序还可以通过另外一个API DeviceIoControl 操作设备。DeviceIoControl内部会使操作系统创建一个IRP_MJ_DEVICE_CONTROL类型的IRP,然后操作系统会将这个IRP转发到派遣函数中。2.I/O控制码(IOCTL)一个32位值。DDK提供一个宏CTL_CODE(devicetype,Func

2013-12-11 16:32:24 3427

原创 缓冲区读写操作

1.在驱动程序创建设备对象的时候,需要考虑好该设备时采用何种读写方式。当IoCreateDevie创建设备后,需要对设备对象的Flags进行设置。2.设备对象有3中读写方式:1.DO_BUFFER_IO2.DO_DIRECT_IO3.其他读写操作一般由ReadFile或者WriteFile函数引起的。3.DO_BUFFER_IO 是系统在内核中申请一块空

2013-12-10 18:01:31 1820

原创 测试IRP 和Dispatchroutin

下面是NT驱动demo#include "ntddk.h"void MyUnload(PDRIVER_OBJECT pDriverObj);NTSTATUS CreateDevice(PDRIVER_OBJECT pDriverObj);NTSTATUS MyDispatchRoutin(PDEVICE_OBJECT pDevObj,PIRP pIrp);extern "C" NTST

2013-12-10 16:01:03 771

原创 WINDOWS I/O 模型

1.对计算机的处理器来说,I/O硬件设备其实只是一些符合某些接口规范的控制器而已。处理器并不直接与设备打交道,而是向设备控制器发号施令,或者接收设备控制器的通知和命令。控制器和处理器之间通过总线进行通信2.I/O系统由5个部分组成:i/o管理器,即插即用管理器,电源管理器,WMI例程,以及驱动程序。3.I/O管理器除了支持与设备相关的驱动程序设计以外,它也允许与设备无关的驱

2013-12-10 13:42:18 616

原创 IO_STACK_LOACKTION结构体

typedef struct _IO_STACK_LOCATION { UCHAR MajorFunction; UCHAR MinorFunction; UCHAR Flags; UCHAR Control; // // The following user parameters are based on the service that is

2013-12-10 09:59:48 827

原创 执行体线程--ETHREAD

typedef struct _ETHREAD { KTHREAD Tcb;//内嵌了KTHREAD对象作为第一个数据成员 LARGE_INTEGER CreateTime;//包含了线程创建时间,他是在线程创建时被赋值的。 union { LARGE_INTEGER ExitTime;//包含了线程的退出时间, LIST_ENTRY L

2013-12-09 17:23:45 2642

原创 执行体进程--EPROCESS

执行体层位于内核层之上,它侧重于提供各种管理策略,同时为上层应用层程序提供基本的功能接口。// Process structure.//// If you remove a field from this structure, please also// remove the reference to it from within the kernel debugger// (nt\p

2013-12-08 20:35:38 1384

原创 内核线程结构--KTHREAD

WRK中KTHREADtypedef struct _KTHREAD { // // The dispatcher header and mutant listhead are fairly infrequently // referenced. // DISPATCHER_HEADER Header;//线程对象也是个分发器对象。 LIST

2013-12-08 19:38:32 1924

原创 内核层的进程机构--KPROCESS

1.WRK中的KPROCESStypedef struct _KPROCESS { // // The dispatch header and profile listhead are fairly infrequently // referenced. // DISPATCHER_HEADER Header;//此域表明KPROCESS对象也是一个分

2013-12-08 16:55:50 2354

原创 进程和线程

1.进程是各种资源的容器,它定义了一个地址空间作为基本的执行环境;而线程是一个指令执行序列。直接访问所属进程中的资源2.抢占式调度算法需要一个时钟中断来获得对处理器的控制权,而非抢占式算法并不需要时钟中断。3.三种典型的线程调用算法:1.先到先服务算法。(FIFO)队列2.时间片轮转调度算法。处理器的时间被分成最大长度不超过某个值的时间片段,称为时间片。这种方法存在

2013-12-08 15:21:09 554

原创 并发和同步

1.并发指多个控制流同时在执行,即可能是真正的并发执行,也可能是分时的并发执行,同步则是保证在并发执行的环境中各个控制流可以有效执行,包括对资源的共享或互斥访问,以及代码功能逻辑循序。2.为了保护对一个内存单元操作,我们必须使该操作称为一个院子操作。Intel x86 指令体系中,有些运算指令加上lock就可以保证其原子性。如add,adc,and btc,bts 等等。windows

2013-12-07 20:31:18 1486

原创 IRP与派遣函数

1.派遣函数是WINDOWS驱动程序中的重要概念。驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求时在派遣函数中处理的。2.用户模式下所有驱动程序的I/O请求,全部由操作系统化为一个叫做IRP的数据结构,不同的IRP数据会被“派遣”到不同的派遣函数(Dispatch Functin )中,这也是派遣函数名字的由来。3.IRP的处理机制类似Windows应用程序的

2013-12-06 10:53:26 1378

转载 最常被程序员们谎称读过的计算机书籍

马克·吐温曾经说过,所谓经典小说,就是指很多人希望读过,但很少人真正花时间去读的小说。这种说法同样适用于“经典”的计算机书籍。在Stack Overflow(以及其它很多软件论坛)上,诸如”程序员最应该读的计算机书籍有哪些?“这样的问题会周期性的出现。这样的问题不断的被提出、被回答,只是形式不同罢了。相同的几本书总是会出现在清单的前几名内,所以,如果想知道人们谈论的都是些什么,你有必要去读

2013-12-06 08:41:48 577

转载 认真过好你的二十几岁

“别活得太认真,你逃不出你的命运。” – Van Wilder这句流行的名言,对于如今的20几岁的青年,看起来就是让他们没有任何目标的自由生活,尽可能的为所欲为,不接受任何指引。作为一个工作狂、一个创业者,从我自学校毕业,这句话就没有和我产生过共鸣,不仅如此,我甚至还十分慎重的过好每一分钟,因为我知道,20几岁,这是一生中一段非常独特的时间,是人生的其它时间代替不了的。一个朋友

2013-12-06 08:29:52 530

原创 WDM式驱动的基本结构

1.对于WDM驱动程序来说,一般都是基于分层。也就是说,完成一个设备操作,至少要由两个驱动设备共同完成一个是物理设备对象(Physical Device Object)PDO,另一个是功能设备对象(Function Device Object)FDO。关系是附加与被附加的关系。当PC插入某个设备的时,PDO会自动创建。确切的说,是由总线驱动创建的。PDO不能单独操作设备,需要配合FDO一起使用。系

2013-12-05 16:54:54 1155

原创 windows系统概念

1.从系统启动一直到内核能够正常工作,再到用户登录到系统,windows系统中的各个组件都要完成相应的初始化任务2.系统内核接收应用程序的请求,与硬件设备进行通信;另一方面,硬件设备向计算机发送信号,驱动程序收到信号后,与系统内核一起把信号传递给恰当的应用程序。3.ntoskrnl.exe 包含2层,一层是微内核(micro-kernel),这一层包含了基本的操作系

2013-12-05 10:41:19 797

原创 WinDbg 内核调试常用命令

1. vertarget 命令可以显示目标系统的基本信息,如系统版本,计算机名,内核基质等kd> vertargetWindows 7 Kernel Version 7601 (Service Pack 1) MP (1 procs) Free x86 compatibleBuilt by: 7601.18113.x86fre.win7sp1_gdr.130318-1533Machine

2013-12-05 09:46:07 1804

原创 NT式驱动基本结构

1.对于NT式驱动来说,主要的函数是DriveEntry函数,卸载函数,以及各个IRP的派遣函数2.驱动加载过程与驱动入口函数(DriverEntry)   NTSTATUS DriveEntry(IN PDRIVER_OBJECT pDriverobject,  IN PUNICODE_STRING pRegistryPath);//函数名可以自己定义DriverEntry主

2013-12-04 19:03:49 1179

原创 设备对象(DEVICE_OBJECT)

1.每个驱动程序会创建一个或多个设备对象(下文称DO),用DEVICE_OBJECT数据结构表示。每个DO都会有个指针指向下一个DO,因此就形成了一个DO链。DO链的第一个DO是由DRIVER_OBJECT 结构体中的 PDRIVER_EXTENSION 指明的.DO保存DO特征和状态信息,以下是字段信息:typedef struct _DEVICE_OBJECT { CSHORT

2013-12-03 20:09:03 1620

原创 驱动对象(DRIVER_OBJECT)

每个驱动程序会有唯一的DRIVER_OBJECT驱动对象与之对应,并且这个DRIVER_OBJECT是在驱动加载时候,被内核中的对象管理器所创建。它作为驱动一个实例被内核加载,并且内核对一个驱动只加载一个实例。确切的说,是由内核的I/O管理器负责加载的。驱动程序需要在DriveEntry中初始化。typedef struct _DRIVER_OBJECT { CSHORT Type;

2013-12-03 19:10:44 944

原创 驱动程序是怎么操作硬件设备的

这里以CreateFile API 为例,其他操作设备的API类似。首先应用程序调用CreateFile Api,这个API是由Win32子系统的三大模块中的Kernel32.dll实现的。CreateFile函数会调用Ntdll.dll中的NtCreateFile函数,其中NtCreateFile是未文档化的函数,最好不要直接调用NtCreateFile 的作用是穿越用户模式的边界,

2013-12-03 15:08:37 2991

转载 如何阅读大型代码库?

Casey问我:“对于新手,有什么有针对性的诀窍来阅读大型代码库吗?”碰巧,我认为这是一个非常好的问题。我觉得想要成为一个优秀的开发者,阅读代码库并弄清清楚内部是怎么回事的能力非常重要。在你的职业生涯中你会中途加入一个现有的项目并被要求迅速融入进去。或者,甚至更难,会有一个项目丢给你让你自己一个人搞清楚。最坏的情景就是你被带入一个项目,要你替换掉让工程运行失败的“那些肆无忌惮的*杂

2013-12-03 14:05:25 493

原创 驱动笔记

1.对PNP(plug and play )and IRP 处理 ,是NT式驱动和WDM驱动的重大区别之一2.windows 的I/0 操作死基于异步设计的。也就是线程在发起一个I/0操作的时候,可以不等待这个I/o操作完成。就发起另一个I/O操作请求。这样CPU就不会将时间浪费在等待I/O 操作完成上。这样就大大提高了操作系统设计对I/O的吞吐能力。编写驱动程序的时候尽量让驱动程序支持异步操作

2013-12-03 11:29:13 777

转载 坐得越久 死得越快

又一项研究显示,久坐对你的健康是真的、真的、真的非常有害。请买一个可站着工作的桌子吧!可站着编程的电脑桌一项对超过20万个澳大利亚人的研究结果给这样一个事实又增加了一份活体证明:坐得越久的人死得越快。研究同时还发现,锻炼不能改变这种趋势——尽管它能有效降低这种风险。研究结果清晰的告诉我们这样一个简单的信息:多站立、少坐着,这样能延长你的寿命。尽管

2013-12-02 12:17:32 729

转载 潘石屹:26年后他成了总裁我还在挑砖

这是一段多年前的回忆录,按说早已不算新闻。但这个与亿万富翁潘石屹有关的故事,却揭示了“富人之所以为富人,穷人之所以为穷人”的秘密。对广大创业者来说,其中的启示永不过时。讲述这段回忆录的是一个叫李勇的打工汉。26年前,他和潘石屹在深圳的南头边关相识,走深圳、闯海南,一起挑过砖,成了一对共患难的“苦友”。然而,如今的李勇仍然辗转各地打工,而潘石屹早已成为SOHO中国董事长,2013年,

2013-11-29 14:03:48 1339

转载 编程巨星的唯一秘诀

别以为是那些软件开发定律,别以为是开发出那些特殊用途的软件,别以为是软件设计技术本身。只有一条真理决定了一个软件程序员的成功还是失败。由于坚持这个真理,一个资深的程序员能在一天的时间里学会一门新的编程语言,而由于不坚持这条真理,一个初级的程序员用十年时间也只能挣到一份糊口的钱、永远是来实现别人的设计、永远不够优秀而得不到晋升的机会。这条真理让你看清了差的程序员和好的程序员的不同之处,好的程序员和伟

2013-11-29 08:26:24 411

原创 写壳笔记

我的stub是从dll中注入到宿主程序的。当然stub重定位是按照宿主的imagebase进行重定位的,当宿主程序重新启动不是按原先imagebase加载时,程序是运行不起来的。解决办法就是 修改IMAGE_OPTIONAL_HEADER ,DllCharacteristics字段代码如下: PIMAGE_NT_HEADERS pNt=peTool.GetNTheaderPt();

2013-11-28 19:34:30 638

转载 你最喜欢的程序员漫画”精选

一个调皮的孩子在课堂上扔纸飞机,被老师抓到后罚在黑板上写500遍“我以后再也不在教室里扔纸飞机了(I will not throw paper airplanes in class.)”,于是这个小孩就在黑板上写了下面一段代码:一看就是个计算机小天才。这幅漫画是Dan Williams最喜欢的一副漫画,他把它贴到了http://stackoverflow.com上,并问大家:你最喜

2013-11-28 18:20:09 892

转载 再多读一篇文章会怎样?

再多读一篇文章会怎样?也许跟没读一样。看起来好像自己提高了,但差不多只是个表面现象。你阅读了如此多的文章,但换来的也许只是一点点的进步。要想掌握一种技术,你只有一条路——去做。我想学会视频编辑,至少是要能成为一种业余爱好,研究一下这些技术。看看今晚我究竟花落多少时间来看YouTube和Vimeo网站上人们用神奇的相机和天才的剪辑做出的视频?35分钟。而我花了

2013-11-26 13:42:20 562

转载 Python中下划线---完全解读

Python 用下划线作为变量前缀和后缀指定特殊变量_xxx 不能用’from module import *’导入__xxx__ 系统定义名字__xxx 类中的私有变量名核心风格:避免用下划线作为变量名的开始。因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是“

2013-11-25 21:40:51 586

空空如也

空空如也

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

TA关注的人

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