内存映射

以下部分代码出自:windows核心编程

主要应用:
主界面只有一个,并可以注入多个窗口,主界面管理和配置各个被注入后进程的所有信息。
当dll注入后,不想用dll的共享段作为进程间的通信。主要是为了避免交叉,即一个dll对应一个进程来使用。为了是卸载方便,不影响其他被注入的进程。

其实并非hook,使用远程注入,所以还要在目标进程的消息循环上做手脚,即修改汇编代码。
JMP到dll里面做处理后,jmp回到进程里去。

创建:

HANDLE s_hFileMap;
PVOID pView1;

s_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE, 0, 4 * 1024, TEXT("MMFSharedData"));
if (s_hFileMap != NULL) {

if (GetLastError() == ERROR_ALREADY_EXISTS) {
chMB("Mapping already exists - not created.");
CloseHandle(s_hFileMap);

} else {
pView1 = MapViewOfFile(s_hFileMap,
FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);

if (pView1 == NULL) {

chMB("Can't map view of file.");
}
}

} else {
chMB("Can't create file mapping.");
}

//释放:
CloseHandle(s_hFileMap);
UnmapViewOfFile(pView1);


另一个进程使用:

HANDLE hFileMapT;
PVOID pView2;

BOOL OnInit(){
hFileMapT = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE,
FALSE, TEXT("MMFSharedData"));

if (hFileMapT != NULL) {
pView2 = MapViewOfFile(hFileMapT, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);

if (pView2 == NULL) {
MessageBox(0,L"Can't map view.",0,0);
}
} else {
MessageBox(0,L"Can't open mapping.",0,0);
}
return TRUE;
}
void OnClose(){
CloseHandle(hFileMapT);
UnmapViewOfFile(pView2);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值