这几天想玩windows系统内核,但是碰到些问题很费解。
windows系统的内核应该是ntoskrnl.exe,我用软件查看它的导入表导入了很多函数,其中有一个是hal.dll的,我又从系统目录里找出hal.dll的文件用软件查看了一下它的导出表,发现导出了很多函数。百度上对这个dll的解释是这是一个windows硬件提取层的模块,但是看了一下它的大小也就256kb这样的大小,导出了那么多函数但是体积却那么小,这个dll里面有windows系统的内核功能代码吗?或者是在别的文件了?关于ntoskrnl.exe我可不可以把它理解成操作系统的主程序,而它再调用其他的系统模块来实现功能?也像windows上的主程序调用dll那样,只不过它是操作系统,比较特殊罢了。系统之间的文件这样调用来调用去的,真正的系统源码到底是藏在哪个文件了?如果能找到代码的源头,那么能不能忽略这些调用者直接让我们的程序去调用这个源头,忽略掉那些调用路径或者说是直接逆向工程这些文件从而试图还原并直接使用这些代码?
windows系统的内核应该是ntoskrnl.exe,我用软件查看它的导入表导入了很多函数,其中有一个是hal.dll的,我又从系统目录里找出hal.dll的文件用软件查看了一下它的导出表,发现导出了很多函数。百度上对这个dll的解释是这是一个windows硬件提取层的模块,但是看了一下它的大小也就256kb这样的大小,导出了那么多函数但是体积却那么小,这个dll里面有windows系统的内核功能代码吗?或者是在别的文件了?关于ntoskrnl.exe我可不可以把它理解成操作系统的主程序,而它再调用其他的系统模块来实现功能?也像windows上的主程序调用dll那样,只不过它是操作系统,比较特殊罢了。系统之间的文件这样调用来调用去的,真正的系统源码到底是藏在哪个文件了?如果能找到代码的源头,那么能不能忽略这些调用者直接让我们的程序去调用这个源头,忽略掉那些调用路径或者说是直接逆向工程这些文件从而试图还原并直接使用这些代码?
而且,windows或linux等操作系统,也是调用别人或通用的硬件驱动,所以才不会很大
看看吧!
dll我知道是为了隐藏代码,可是很多dll里面只是有这么个函数,具体该函数的实现代码却不在该dll里,函数里的内容是再去调用其他dll里面的另一个函数,这样一个dll调用一个dll,我只是想知道到底这份代码的源头在哪?就算是隐藏起来的多少也会占有空间的吧,死活都要有个地方吧
没办法,我就喜欢刨根问底,而且你不知道内核但是人家知道,这会被out掉的~~~
你可以看一下这个图:http://p.blog.csdn.net/images/p_blog_csdn_net/hongmy525/339986/o_WinNtKernel2-3.bmp
ntosknl应该算是微内核的Kernel部分,包括基本的内存分页机制、驱动支持等等。
HAL是一个转换层,就是让不同的设备驱动程序能和OS内核沟通。消除不同架构的区别,方便内核的移植。
至于电源管理、即插即用之类、GDI等内核的其它功能都是system32目录下一堆的.sys、.dll、.drv实现的。
Windows这么复杂的系统,源代码要好多个GB,要上千人的团队来开发。有很多系统内部结构都是没有公开文档的。所以单纯靠逆向工程把整个系统还原,不是一个人能完成的事情。
另外越是深入内核,功能就越原始,比如修改内存页表分配内存页之类的,以这种方式的话,你基本上就得用汇编写程序了,那么多辅助的系统组件不是吃白饭的,目的就是大大简化程序的开发和使用。
我不是想要逆向还原整个windows系统,这估计要花上半辈子的时间。我只是想希望能在写软件的时候能有比别的程序更高的特权,感觉windows内核编程的权限还是不够。我就是想看透这个windows系统,对于未知的东西总是好奇嘛。起码能够知道一个程序调用一个API的调用路径,找到函数的源头,只看自己需要的部分就行,然后逆向分析它,看看有什么可以利用的地方。我倒不是希望能在windows系统上找到源代码,我只是想能找到那些代码封装在的模块,但现在看来windows那么多模块文件难了~~~
不过还是谢了~~~
哦。那我就是被out的那一个了。