**一分钟感言**

来源:互联网 发布:knn算法原理 编辑:程序博客网 时间:2024/05/16 18:34

2005.07.27. 今天又看了下利用钩子拦截API函数的代码,发现它拦截的其实是函数的调转代码,因为API在

编译的时候会形如: CALL  XXXX  

                          XXXX:  JMP  YYYY

这个时候我们其实是将JMP YYYY都换成自己的JMP MYFUNC.这里有个疑问,如果真是这样,那我们完全可以只修改XXXX地址下的后四个字节,而不是五个;而如果不是,那就是说是形如CALL YYYY; 我们的修改是直接

在函数内部了,这个时候有平衡堆栈的情况要考虑。 我没有试验过,但是感觉后者是正确的。

2005.09.16

关于内存映射文件
     1.读取磁盘文件大小
     2.保存虚拟的地址空间为这个大小(但是这个时候没有提交内存页)
     3.隐藏的映射机构保证在需要使用到文件中的某个数据时或者提出页中断或者直接把已在内存中的数据读出
     4.在分配时按照页为最小粒度
     5.为什么书上说对于一个磁盘文件的倒序存储,如果用映射机构的话讲是0内存,0缓冲。我猜想这是因为映射机构记录了对磁盘文件的最新访问方式,原本是文件的地址1000(长度2000)映射到虚拟空间的2000,则倒序的时候就是把1000映射到4000,这个映射机构只要记住并且在外部程序调用到1000到4000地址内的数据的时候能够转化后加载就可以了。实现了运行时加载。
     6.更进一步,读取任何地址时都需要这个映射机构。
     PS:文中的隐藏的映射机构是我对这种机制的理解,不见于任何公开文档中。

原创粉丝点击