首页
社区
课程
招聘
[讨论]在目标驱动上分配内存问题
发表于: 2016-4-29 15:24 5041

[讨论]在目标驱动上分配内存问题

2016-4-29 15:24
5041
请问大家知不知道有什么内核函数或者方法可以在目标驱动上分配内存,比如我想在win32k.sys上分配内存,该怎么操作,WRK和IDA都久没有找到。

//这个函数可以在其它进程空间分配内存,想讨论下有没有什么内核函数或者方法可以在其它驱动空间里分配内存,希望渺茫。
LPVOID WINAPI VirtualAllocEx(
  _In_     HANDLE hProcess,
  _In_opt_ LPVOID lpAddress,
  _In_     SIZE_T dwSize,
  _In_     DWORD  flAllocationType,
  _In_     DWORD  flProtect
);


或许是我表达不对,我是想在目标驱动上分配它自己的内存,然后往里面写一些东西,看有没有办法。

与访问SSSDT,写SSSDT全局变量类似。怎么就不能理解我的话呢?我举的那个例子只是说明我的大概意思。

内核空间不同于进程空间。

不好意思,令大家误解,打搅大家了,这个帖子不用回复了

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 2291
活跃值: (938)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
在目标驱动上分配内存问题?这是什么鬼
2016-4-29 15:26
0
雪    币: 19
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
相当于 在win32k.sys调用ExAllocatePoolWithTag函数的效果,实际上并不是调用这个函数。

//这个函数可以在其它进程空间分配内存,想讨论下有没有什么内核函数或者方法可以在其它驱动空间里分配内存,希望渺茫。
LPVOID WINAPI VirtualAllocEx(
  _In_     HANDLE hProcess,
  _In_opt_ LPVOID lpAddress,
  _In_     SIZE_T dwSize,
  _In_     DWORD  flAllocationType,
  _In_     DWORD  flProtect
);
2016-4-29 15:31
0
雪    币: 112
活跃值: (293)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
所有驱动模块用的一个页目录吧
2016-4-29 17:01
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
分析win32k.sys加载的时候系统是怎么分配内存的,在这个时候做处理
2016-4-29 17:38
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
另外,不管是什么模块,win32k.sys也好
调用ExAllocatePoolWithTag所分配的内存都是Pool,不属于任何模块地址空间
2016-4-29 17:41
0
雪    币: 2291
活跃值: (938)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
在win32k.sys调用ExAllocatePoolWithTag函数这句话什么意思?想把分配的内存放在win32k加载的地址范围内?如果楼主是这个意思,那就是常识性的错误。。。
2016-4-29 17:52
0
雪    币: 19
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我的意思是相当于win32k.sys自己调用ExAllocatePoolWithTag,然后我引用这个内存,往里面放些玩意。
实际上并不是调用这个函数。
2016-4-29 18:47
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这问题可把大牛们弄糊涂了
2016-4-29 19:16
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
你应该先和大家讲明白,在您心中:
     "win32k.sys自己调用ExAllocatePoolWithTag"

     "非win32k.sys自己调用ExAllocatePoolWithTag"
的区别是什么!
2016-4-29 21:27
0
雪    币: 19
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
//这个函数可以在其它进程空间分配内存,想讨论下有没有什么内核函数或者方法可以在其它驱动里分配内存,希望渺茫。
LPVOID WINAPI VirtualAllocEx(
  _In_     HANDLE hProcess,
  _In_opt_ LPVOID lpAddress,
  _In_     SIZE_T dwSize,
  _In_     DWORD  flAllocationType,
  _In_     DWORD  flProtect
);
2016-4-29 23:03
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
VirtualAllocEx是可以在其它进程空间分配内存
分配的内存块属于该进程空间,但是不属于该进程的任何模块地址空间
驱动里面分配的内存,不属于任何进程空间,也不属于任何模块地址空间
在win32k.sys模块地址范围内调用ExAllocatePoolWithTag
分配的内存也只是一个Pool,不属于任何进程空间,也不属于任何模块地址空间
2016-4-29 23:16
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
任何模块,无论是Ring3还是Ring0
在加载之后,模块Base和模块大小是固定的,模块的地址空间范围也就固定了
任何分配内存的方式,都不可能把某个模块地址空间的范围扩大或缩小
分配的内存只是某个地址范围块,这个地址范围块不可能分配在任何模块地址范围之内
2016-4-29 23:27
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
LZ的问题犯了很低级的错误
2016-4-29 23:29
0
雪    币: 19
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
嗯,看来是找不到了,本来是想在看雪上找下办法的。
2016-4-29 23:37
0
雪    币: 19
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
或许是我表达不对,我是想在目标驱动上分配它自己的内存,然后往里面写一些东西,看有没有办法。

与访问SSSDT,写SSSDT全局变量类似。怎么就不能理解我的话呢?我举的那个例子只是说明我的大概意思。

内核空间不同于进程空间。

不好意思,令大家误解,打搅大家了。
2016-4-29 23:49
0
雪    币: 19
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
MiCopyPage
2016-4-30 21:14
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
18
你的意思是,要自己在驱动中实现VirtualAllocEx,然后通过VirtualAllocEx在别的进程申请内存?还是当别的驱动申请内存时替换掉申请的内存?
2016-5-1 20:20
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
19
你还是表达不对,没有目标驱动这个概念!在驱动程序中,所有驱动均为一个整体,只要调用内存申请函数,都会被视为在所有驱动中申请了一个公共的内存!
2016-5-1 20:24
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
还是那句话,楼主
2016-5-1 23:24
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
楼主你把大牛们都弄糊涂了
2016-5-1 23:25
0
游客
登录 | 注册 方可回帖
返回
//