阅读:3030回复:28
程序是怎样加载ntoskrnl.exe的???
我好困惑,这东西是每个程序必须的,但没发现它是怎么被加载的啊。
大家看 application->kernel32.dll->ntdll.dll 但ntdll.dll就不导入函数了啊 刚才我把一个网上的ring0的C程序总算编译过去了,结果它竟然显式导入ntoskrnl.exe了,系统不认,无法初始化 ntoskrnl.exe是怎么回事?难道整个系统就一份copy?那在C程序里怎么用它啊,一些它导出的函数怎么连接啊 |
|
|
沙发#
发布于:2002-06-21 16:42
大兄弟,ntoskrnl.exe是Ntldr加载的NT内核呀,未加/3GB的机器上加载地址总为0x80400000。导出了大多数内核函数。
|
|
板凳#
发布于:2002-06-21 16:45
大兄弟,ntoskrnl.exe是Ntldr加载的NT内核呀,未加/3GB的机器上加载地址总为0x80400000。导出了大多数内核函数。 我知道是ntldr加载的 是不是ntoskrnl.exe全局就一份,而且它的加载和普通dll不一样,是直接读入内存的,所以在windows里甚至可以改变它的文件? 那我在程序里怎么用?不要告诉我要象病毒一样去找它导出函数的地址。 |
|
|
地板#
发布于:2002-06-21 16:52
根本不用理会ntoskrnl,可能你的程序写错了或加载的lib有问题
应该加载 #pragma comment(lib,\"D:\\\\NTDDK\\\\libfre\\\\i386\\\\ntdll.lib\") |
|
|
地下室#
发布于:2002-06-21 16:54
根本不用理会ntoskrnl,可能你的程序写错了或加载的lib有问题 兄弟,真行了 我想起来了,ntdll.dll和ntoskrnl.exe导出的很多函数好像名字都是一样的。 兄弟能否多讲一些? 对了,我怎么直接用ntoskrnl.exe? 我想在病毒里面应该可以比较容易用 |
|
|
5楼#
发布于:2002-06-21 16:54
它只是一个exe形式的sys呀。既然是内核,自然只有一份。初始化期一过它就像sys一样活着而不像普通exe。
先说你改它干嘛。 |
|
6楼#
发布于:2002-06-21 16:56
它只是一个exe形式的sys呀。既然是内核,自然只有一份。初始化期一过它就像sys一样活着而不像普通exe。 我不是说我要改它,而是Funlove确实改了它。 但它和普通sys不一样吧,一样吗?一个sys被装载以后它的文件是不是被占用了?我没试验过。 |
|
|
7楼#
发布于:2002-06-21 16:56
有了ntoskrnl.lib,像DLL一样用它,了解?
|
|
8楼#
发布于:2002-06-21 16:58
有了ntoskrnl.lib,像DLL一样用它,了解? 不了解! 我用了ntoskrnl.lib,结果程序就显式导入ntoskrnl,系统不让运行。还是狐狸兄说的方法能行。 |
|
|
9楼#
发布于:2002-06-21 17:03
我不是说我要改它,而是Funlove确实改了它。
但它和普通sys不一样吧,一样吗?一个sys被装载以后它的文件是不是被占用了?我没试验过。 ----------------------------------------------------------------------- sys被加载后随便删,ntoskrnl会检查(同很多系统sys一样)自己被该过没,不过卑鄙的病毒可以把检查代码一起改了,呵呵。 不了解! 我用了ntoskrnl.lib,结果程序就显式导入ntoskrnl,系统不让运行。还是狐狸兄说的方法能行。 --------------------------------------------------------------------- 你的程序是应用程序吧,Ring3下你当然得导入ring3的Ntdll.dll的函数,内核程序(比如驱动)就导入ring0的ntoskrnl。 |
|
10楼#
发布于:2002-06-21 17:06
sys被加载后随便删,ntoskrnl会检查(同很多系统sys一样)自己被该过没,不过卑鄙的病毒可以把检查代码一起改了,呵呵。
那我明白了。ntoskrnl不会检查自己,是ntldr检查的,所以Funlove把ntldr也改了。 兄弟能否给我讲一下sys的装载机理?和dll不一样?一个sys就装入一份而不管多少程序用它? ring0的东西可以导入ntoskrnl?我的程序(其实是网上下的)是ring3的 |
|
|
11楼#
发布于:2002-06-21 17:17
兄弟能否给我讲一下sys的装载机理?和dll不一样?一个sys就装入一份而不管多少程序用它? sys和dll一样都是只装载一次,不管有好多程序调用它,如果发生改变数据时,就会执行copy-on-write机制 |
|
|
12楼#
发布于: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. |
|
13楼#
发布于:2002-06-21 17:19
[quote]兄弟能否给我讲一下sys的装载机理?和dll不一样?一个sys就装入一份而不管多少程序用它? sys和dll一样都是只装载一次,不管有好多程序调用它,如果发生改变数据时,就会执行copy-on-write机制 [/quote] 但dll好像被占用,不能改变它的文件。dll和exe差不多,都是用文件映射的,估计sys不是,是真的全读到内存里了。所以你看看,你就没法在windows下删除kernel32.dll。 |
|
|
14楼#
发布于: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为就可以了)。 |
|
15楼#
发布于:2002-06-21 17:26
多说几句吧 “既导入ring3函数,又导入ring0函数”?那你怎么调用ring0?一个call指令显然不行的,这涉及到特权级改变啊 其实ntdll.dll就是一个ntoskrnl的外壳,只不过它能用int 2e从ring3切到ring 0而已。 |
|
|
16楼#
发布于:2002-06-21 17:27
sys和dll一样都是只装载一次,不管有好多程序调用它,如果发生改变数据时,就会执行copy-on-write机制 SI是怎么改的NT内存保护策略? |
|
|
17楼#
发布于: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 |
|
|
18楼#
发布于: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不太一样。 |
|
|
19楼#
发布于:2002-06-21 17:31
既导入ring3函数,又导入ring0函数”?那你怎么调用ring0?一个call指令显然不行的,这涉及到特权级改变啊
---------------------------------------------------------------------- 你没理解我的意思,呵呵。特权切换让系统去做,我也不用长call。不成的原因是加载exe得加载器拒绝初始化我的导入表(这我有法)和该死的I/O管理器安全检查(这过不了,只有老老实实将文件头表现为sys格式)。 |
|
上一页
下一页