|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
源代码保护方面其实现在考虑得没那么多了..NET也可以反编译.ASP写得复杂的话别人能看得懂的话.他也有能力自己写了.这方面担心的倒不太多. 纵观现在网上可以下载的那些所谓BBS还有什么网站等等的源代码
明天咱们谈谈Windows 2000下中止机制的扩大,起首声名本文提到的手艺并不是自己发明的,只不外是我在进修Windows内核过程当中的一点心得而已,目标在于为和我一样方才步入Windows底层进修的伴侣供应一点适用的材料,同时也顺带纪录下本人的进修进程。假如您是Windows Kernel高手,还望有工夫能多多指导一下咱们这些晚辈;假如您也是初学者,一样接待到咱们FZ5FZ网站来交换切磋!那好吧,咱们就直接进入正题,假如您对中止还不怎样懂得,那面前将是一次冲动人心的路程。
1> Windows圈套机制简介
圈套(Trap)是Windows体系中一种不成短少的体系机制。当体系中产生中止(硬件中止或软件中止),异常时,处置器会捕获这个举措,并将体系的掌握转移到一个固定的处置法式处,停止响应的操作处置。在处置器入手下手处置产生的中止或异常前,必需保留一些处置器情况参数到仓库中以备体系复原时利用。体系是经由过程一种称为圈套帧(Trap Frame)的体例来完成的,它将体系中全体线程的情况数据保留到内核仓库(Kernel Stack)中,在履行完后经由过程仓库的出栈机制来恢复体系掌握流程中的履行点。内核中的圈套机制分为中止和异常。中止是体系中随即产生的异步事务,与以后体系的处置器形态有关。同时体系中的中止可分为可屏障中止和不成屏障中止。而异常则是一种同步事务,在特定情形下异常可以重现,而中止不成以。中止又可以分为硬件中止和软件中止。很分明硬件中止是与硬件相干的,好比I/O装备履行的某些操作,处置器时钟或硬件端口上的处置等。软件中止则是经由过程中止指令int xx引入的,它常常是使用法式在用户形式履行落后入操作体系的代码,这时候体系为用户供应了各类各样的体系办事。好比咱们前次提到的体系办事挪用(System Service Call),在Windows NT/2000下就是经由过程软件中止int 0x2e(System Service Interrupt)来完成的,固然在Windows XP/2003下微软利用了一种称为“疾速体系挪用接口”来为用户供应体系办事,不外大批的中止办事依然存在与体系当中的。
2> 中止处置及其相干流程
此处咱们会商的是与特定处置器相干的数据布局,所以会有一些移植方面的成绩,本文仅针对Intel的x86 Family处置器,而且本文附带的法式也只撑持在Intel x86处置器上正常履行。作甚IDT?IDT(Interrupt Descriptor Table)称为中止描写符表。它是可包容8192个单位的数组,数组中的每一个成员是称之为“门”的长度为8字节的段描写符。在IDT中门可分为三种:中止门(Interrrupt Gate),圈套门(Trap Gate)和义务门(Task Gate),但次要的是中止门和圈套门。而它们二者之间也只要少量不同,咱们在此只关怀IDT中的中止门,假如您对这方面对照感乐趣,请查阅Intel处置器的相干文档《Intel Architecture Software Developer's Manual,Volume 3》。同时,在体系中存在一个中止描写符表存放器(IDTR),它包括了体系中止描写符表的基地址和IDT的限制信息,它于一条汇编指令sidt互相关注。鄙人文中咱们将看到它是咱们完成各类中止描写符表扩大的基本和关头!还有一点是需求注重的,在Windows体系中引入了分页,分段和虚拟存储机制后,就存在这一种调剂机制,将需求履行的代码和数据调入内存,将不需求的数据调到外存(帮助存储器,如硬盘等)。假如咱们在履行某些代码时发明了咱们需求的数据不在内存中时,就会收回一个“缺页中止”,这时候体系就会在IDT中搜索这个中止的ISR(Interrupt Service Routine,中止办事例程),履行响应的调入任务。人人可以想象假如咱们的中止描写符表被调出到外存后会是甚么样的了局?那时体系将没法定位“缺页中止”的办事例程,至此体系将会溃散失落!
在中止描写符表中,咱们方才提到了一个感乐趣的存放器IDTR,固然咱们更关怀对咱们来讲更直接的数据:IDT中的代码段选择器(Code Segment Selector),中止履行代码的偏移量(Offset)和中止描写符的权限品级(Descriptor Privilege Level)参数。上面咱们看看中止指令的履行流程,咱们应当晓得使用法式履行在用户形式(Ring 3)下,而中止描写符表则是存在于内核形式(Ring 0)才可以会见的体系地址空间内的。在软件中止产生后,也就是使用法式挪用了某条软件中止指令后,处置器起首在IDT中检索传入的中止号参数,找到呼应的进口单位后就反省中止门的权限品级参数,看是不是答应Ring 3下的使用法式挪用,如许操作体系就为咱们保存了对软件中止挪用掌握的权利,但是硬件中止和异常是不会存眷权限方面的信息。假如以后权限品级(Current Privilge Level,CPL)数值大于中止门描写符需求的权限(Descriptor Privilege Level),也就是权限不敷时会激发一个通用回护毛病(General Protection Fault),反之则停止处置器的切换从用户仓库到内核仓库。如今是保留线程情况的时分了,处置器将在用户形式下的仓库指针(SS:ESP)和尺度的中止帧(EFLAGS和CS:EIP)压入仓库。以后处置器进入咱们的中止办事例程,履行相干的代码处置后经由过程汇编指令iretd前往到挪用的使用法式。在指令iretd履行时,体系将存储在仓库中的线程情况数据出栈复原,待体系恢复中止指令履行前的情况后就接着履行使用法式的后续代码。
问题是他们究竟是喜欢他们是使用软件时,速度快还是速度慢好.(当然在3秒以内).无论是他们输入资料时,查找资料时,分析资料时. |
|