能力值:
( LV6,RANK:90 )
|
-
-
2 楼
驱动运行在保护模式.内存在系统内存区域.
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
楼上的兄弟可不可以推荐点这方面的资料啊.
|
能力值:
( LV12,RANK:210 )
|
-
-
4 楼
看雪FTP里, 斑竹doskey上传了很多驱动相关的资料
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
谢谢啊.. 我去看看。 我就是搞不清楚驱动程序是不是会象DLL文件一样映射到用户进程的地址空间呢?
|
能力值:
( LV12,RANK:210 )
|
-
-
6 楼
对于NT系统, 从下表中可以看到, Ring 0程序使用的08号(Code)和10号(Data)与Ring 3程序使用的18号(Code)和20(Data)号这4个描述符描述的是同一个4G线性空间, 这就是Windows程序使用的所谓"4G平坦空间"的由来. 从表中也可以看出, 对于Ring 3地址空间中的某地址, 例如 0020:00403000在Ring 0地址空间中可以用同一个偏移访问(0010:00403000)
因此, 得到的结论是
无论是从Ring 0代码还是从Ring 3代码的角度来看Windows的内存安排, 两者都可见的部分完全相同
强调两者都可见, 是因为Ring 3代码无法访问地址在80000000以上的空间
-------------------------------------------------------------------------------
Sel. Base Limit DPL P G Description
-------------------------------------------------------------------------------
0008 00000000 FFFFFFFF 0 P 4Kb Execute/Read, accessed
0010 00000000 FFFFFFFF 0 P 4Kb Read/Write, accessed
0018 00000000 FFFFFFFF 3 P 4Kb Execute/Read, accessed
0020 00000000 FFFFFFFF 3 P 4Kb Read/Write, accessed
|
能力值:
( LV12,RANK:210 )
|
-
-
7 楼
最初由 yoshimitsu 发布 谢谢啊.. 我去看看。 我就是搞不清楚驱动程序是不是会象DLL文件一样映射到用户进程的地址空间呢?
驱动程序在系统地址空间, 系统地址空间是被所有用户进程共享的
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
我想修改ServiceDescriptorTable挂接API. 这样挂接是整个系统内有效还是仅仅一个程序有效呢?
当我修改的时候, 会不会象用户模式那样, 系统用copy-on-write机制呢??
|
能力值:
( LV12,RANK:210 )
|
-
-
9 楼
ServiceDescripterTable在不同的Windows发行版本中是不一样的, 这种方法不保险啊
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
兄弟. 你能不能给我详细介绍下用驱动挂接API的原理啊? 或者给我推荐点这方面的资料.
|
能力值:
( LV12,RANK:210 )
|
-
-
11 楼
看雪论坛就有, 例如
http://bbs.pediy.com/showthread.php?s=&threadid=22707&highlight=Hook
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
谢谢兄弟了. 是不是 .sys文件和.dll文件 都会映射到进程的地址空间, 只不过.sys文件是映射到内核地址空间, 而.dll文件是映射到用户地址空间啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
最初由 thebutterfly 发布 看雪FTP里, 斑竹doskey上传了很多驱动相关的资料
ftp的地址和密码是??
谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
工具版块里面有地址, 但是密码我不知道怎么得到, 如果你知道, 麻烦告诉一声.
|
能力值:
( LV12,RANK:210 )
|
-
-
15 楼
最初由 nipcdll 发布 ftp的地址和密码是?? 谢谢
恕不告知
好像有了精华贴就可以看到自己的帐号和密码了
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
楼上的兄弟。 我看了你给我推荐的帖子, 但是我想搞懂的问题还是没搞懂..
其实我是这个意思:
当我们在用户层挂接API的时候, 如果我们用修改目标函数前5个字节的方法, 那我们的HOOK函数所在的DLL必须要想办法映射到目标函数所在程序的地址空间中, 这样JMP后面所跟的地址才是有效地址.
那用驱动程序修改ServiceDescriptorTable的时候, 我们的HOOK函数的地址只在我们自己的驱动程序中, 那当其他程序调用目标函数是岂不是会得到一个无效地址, 除非我们的HOOK函数所在的驱动程序被映射到了目标函数做在程序的地址空间.
你看我的想法对吗? 是不是有错啊?
麻烦你给我解释下。 谢谢了。
|
能力值:
( LV8,RANK:130 )
|
-
-
17 楼
没有学过驱动开发的话最好不要碰这个东西,一天蓝几百次屏可不好玩
运行于内核态的程序,在整块内存中仅有一份映像,每个进程中的地址相同,彼此可见。虽然在每个进程中装入的页表都不一样,但内核空间使用的物理页和线性地址都是相同的。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
楼上的兄弟,
你说 "每个进程中的地址相同",
"内核空间使用的物理页和线性地址都是相同的"
是不是意味这驱动程序不需要象.DLL那样重定位?
|
能力值:
( LV12,RANK:210 )
|
-
-
19 楼
驱动的映象基址DDK默认是10000h, 肯定需要重定位
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
在用户层下, 我们想挂接API, 首先要做的事就是要把我们的HOOK函数所在的DLL映射到目标函数所在的进程空间, 比如用鼠标钩子和插入DLL等方法.
那我现在要挂接的是内核函数, 我需要做这一步吗??
|
能力值:
( LV12,RANK:210 )
|
-
-
21 楼
不需要, 驱动本身就是映射到所有进程的地址空间的
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
啊? 是这样的啊?
这下我知道了.. 太感谢你了 thebutterfly
你是从哪儿知道这些东东的啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
还有个问题, 比如A进程和B进程中都有kernel32.dll的映像. 现在我修改A进程的KERNEL32.DLL的代码, B进程肯定不会受到影响,
但假设说A通过驱动修改了ServiceDescriptorTable, 那B也会受到影响吗?
|
能力值:
( LV8,RANK:130 )
|
-
-
24 楼
看明白我的话,你就不会问这个问题了
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
楼上的兄弟. 按照你的意思, 如果回答我在23楼提的问题, 那答案就是B会受到影响.
对吗?
|
|
|