阅读:3029回复:28
程序是怎样加载ntoskrnl.exe的???
我好困惑,这东西是每个程序必须的,但没发现它是怎么被加载的啊。
大家看 application->kernel32.dll->ntdll.dll 但ntdll.dll就不导入函数了啊 刚才我把一个网上的ring0的C程序总算编译过去了,结果它竟然显式导入ntoskrnl.exe了,系统不认,无法初始化 ntoskrnl.exe是怎么回事?难道整个系统就一份copy?那在C程序里怎么用它啊,一些它导出的函数怎么连接啊 |
|
|
沙发#
发布于:2002-06-24 14:56
厉害,厉害
终于见到高手讨论了 pjf,我佩服 |
|
板凳#
发布于:2002-06-21 18:34
搞得像病毒一样 所以我才研究它啊,呼呼 |
|
|
地板#
发布于:2002-06-21 18:32
好好。
这种话题多多议善啊。 sys应该是在2G空间上面的(不加/3G的话),就是pjf说的系统空间,被2G下面的进程共享的。 |
|
地下室#
发布于:2002-06-21 17:54
搞得像病毒一样
----------------------------------------------------------------------- 本来这就是不写驱动获取ring0的尝试之一,什么程序才需要这样呢?呵呵 |
|
5楼#
发布于:2002-06-21 17:52
exe就不行
--------------------------------------------------------------------- 当然。exe只能加载,它不让你运行起来,555 不过也是为了安全 |
|
6楼#
发布于:2002-06-21 17:50
1、不导入呗---哈哈。其实就是自己做初始化的事(取内核函数地址等)。
------------------------------------------------------------ 搞得像病毒一样 2、不是很详细了么:“将文件头表现为sys格式”,否则不理睬你。 ------------------------------------------------------------exe就不行? |
|
|
7楼#
发布于:2002-06-21 17:49
loader就不加载我导入ntoskrnl.exe的程序,你有什么法?
I/O管理器安全检查?详细些 ------------------------------------------------------------------------- 1、不导入呗---哈哈。其实就是自己做初始化的事(取内核函数地址等)。 2、不是很详细了么:“将文件头表现为sys格式”,否则不理睬你。 |
|
8楼#
发布于:2002-06-21 17:44
dll确实是从文件里只装入一次
---------------------------------------------------------------------- 我们对“装载”这个词的理解造成的分歧,呵呵。那书很久前看了很多遍,好像还记得,呵呵。 举个例子,我做一个消息钩子,每次一个进程调用界面服务导致系统自动加载我的DLL并调其入口,你在DllMain里加个MessageBox就知道它在你切换焦点时总会跳出来。注意:系统将dll文件映射入一个进程空间并调用入口才是我说的加载!与matt的定义有无出入我不管,一个进程用一个dll,这个dll就被映射入该进程空间、DllMain被调用-----被加载了! 9x的确与2000还有些出入。 sys在系统内核空间,环境切换时都不用改变,所用进程全局共享。 |
|
9楼#
发布于:2002-06-21 17:32
既导入ring3函数,又导入ring0函数”?那你怎么调用ring0?一个call指令显然不行的,这涉及到特权级改变啊 loader就不加载我导入ntoskrnl.exe的程序,你有什么法? I/O管理器安全检查?详细些 |
|
|
10楼#
发布于:2002-06-21 17:31
既导入ring3函数,又导入ring0函数”?那你怎么调用ring0?一个call指令显然不行的,这涉及到特权级改变啊
---------------------------------------------------------------------- 你没理解我的意思,呵呵。特权切换让系统去做,我也不用长call。不成的原因是加载exe得加载器拒绝初始化我的导入表(这我有法)和该死的I/O管理器安全检查(这过不了,只有老老实实将文件头表现为sys格式)。 |
|
11楼#
发布于:2002-06-21 17:30
[quote]no,no,sys自然只需加载一次(内核空间,of course),dll会被多次加载(一个用到的进程一次,只是可以内存共享)。copy-on-write机制也仅仅对dll而言,因为它属于进程空间。 error!it is a basic concept! please read win95 system programming secrets---the chapter 3 [/quote] 别吵 dll确实是从文件里只装入一次,但它会被映射到不同的进程空间 sys我不太熟,它是全局的吗?为各个进程共享? 还有win9X和2000不太一样。 |
|
|
12楼#
发布于:2002-06-21 17:28
no,no,sys自然只需加载一次(内核空间,of course),dll会被多次加载(一个用到的进程一次,只是可以内存共享)。copy-on-write机制也仅仅对dll而言,因为它属于进程空间。 error!it is a basic concept! please read win95 system programming secrets---the chapter 3 |
|
|
13楼#
发布于:2002-06-21 17:27
sys和dll一样都是只装载一次,不管有好多程序调用它,如果发生改变数据时,就会执行copy-on-write机制 SI是怎么改的NT内存保护策略? |
|
|
14楼#
发布于:2002-06-21 17:26
多说几句吧 “既导入ring3函数,又导入ring0函数”?那你怎么调用ring0?一个call指令显然不行的,这涉及到特权级改变啊 其实ntdll.dll就是一个ntoskrnl的外壳,只不过它能用int 2e从ring3切到ring 0而已。 |
|
|
15楼#
发布于:2002-06-21 17:24
sys和dll一样都是只装载一次,不管有好多程序调用它,如果发生改变数据时,就会执行copy-on-write机制
------------------------------------------------------------------------ no,no,sys自然只需加载一次(内核空间,of course),dll会被多次加载(一个用到的进程一次,只是可以内存共享)。copy-on-write机制也仅仅对dll而言,因为它属于进程空间。 对于sys若你未改变NT内存保护策略(softice会改),ring0程序一样不能改(当然去除CR0的WP为就可以了)。 |
|
16楼#
发布于:2002-06-21 17:19
[quote]兄弟能否给我讲一下sys的装载机理?和dll不一样?一个sys就装入一份而不管多少程序用它? sys和dll一样都是只装载一次,不管有好多程序调用它,如果发生改变数据时,就会执行copy-on-write机制 [/quote] 但dll好像被占用,不能改变它的文件。dll和exe差不多,都是用文件映射的,估计sys不是,是真的全读到内存里了。所以你看看,你就没法在windows下删除kernel32.dll。 |
|
|
17楼#
发布于:2002-06-21 17:19
多说几句吧
ntdll.dll主要导出系统服务的包装函数(int2e/sysenter),以及一些Rtl*函数;ntoskrnl.exe为了让内核程序(如驱动)也可用,导出了一些系统服务的再包装(Zw*用了int2e、Nt*未用int2e),以及一些Rtl*函数。 你确定你的程序在Ring0执行,自然导入ntoskrnl的,等等。 以前我曾试过让我的程序既导入ring3函数,又导入ring0函数(我的目的是做一个将自己加载入ring0的ring3程序,因为NT确实支持将exe、dll加载入内核。可惜一旦你不止要它加载、还要它执行起来时,它就要执行严格检查;另一限制就是因为里面导入了ring0函数(address>0x80000000),加载器不执行此exe),最后只有找其它方法,还不如写驱动,faint. |
|
18楼#
发布于:2002-06-21 17:17
兄弟能否给我讲一下sys的装载机理?和dll不一样?一个sys就装入一份而不管多少程序用它? sys和dll一样都是只装载一次,不管有好多程序调用它,如果发生改变数据时,就会执行copy-on-write机制 |
|
|
19楼#
发布于:2002-06-21 17:06
sys被加载后随便删,ntoskrnl会检查(同很多系统sys一样)自己被该过没,不过卑鄙的病毒可以把检查代码一起改了,呵呵。
那我明白了。ntoskrnl不会检查自己,是ntldr检查的,所以Funlove把ntldr也改了。 兄弟能否给我讲一下sys的装载机理?和dll不一样?一个sys就装入一份而不管多少程序用它? ring0的东西可以导入ntoskrnl?我的程序(其实是网上下的)是ring3的 |
|
|
上一页
下一页