如何将我的一个线程映射到别的程序的地址空间里?

weiwenbing 2000-05-26 09:48:00
1.怎么把我自己的一个线程映射到一个正在运行的程序的地址空间里?
希望哪位高手能指点迷津!!请说得详细一点,包括用哪个函数,函数中的
各个参数又如何获得.
2.我以前听说CreateRemoteThread()可以,但是其中的第
一个参数--程序的进程ID我不知道怎样得到.因此请说得尽量详细点,谢谢!!!
...全文
227 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjf 2000-05-29
  • 打赏
  • 举报
回复
获得另一个进程的ID可以通过查询注册表中的信息;
BO2K原代码中有着方面的内容;下载一个看看应该有启发;
weiwenbing 2000-05-28
  • 打赏
  • 举报
回复
fupf88,万分感激你耐心的帮助,不管这个问题能不能解决,我都非常感谢你.
等到没人回复这个问题时,我再发分给大家.
fupf88 2000-05-27
  • 打赏
  • 举报
回复
找不到吗?这本书很有名的啊?
其实我也是一知半解,纸上谈兵而已,姑且抄抄书吧:)
16位WINDOWS操作系统所有进程运行在一个地址空间里,所以可以用SetWindowLong来把窗口的内存块中的窗口地址改为新的(你自己的)WndProc,但WIN32地址空间独立,SetWindowLong调用将被简单忽略,所以必须想法把你的子类代码放入另一个进程的地址空间,这种技术称之为向一个进程的地址空间注入一个DLL,然后就可以SetWindowLong了
1 最简单的方式是设置注册表:HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINDOWS\APPINIT_DLLS,将其值设为你的DLL路径,如c:\mylib.dll,重启后有效,这样每当USER32.DLL被映射到进程时,USER32.DLL检索此字符串并载入此库,这种方法只对那些也映射USER32.DLL的进程有效(好在是绝大部分),并且对WIN95无效.
2 使用HOOK来注入DLL,其原理和WINDOWS运行机制有关.在这里只说明怎么做:设置一个WM_GETMESSAGE钩子,
HOOK hHook=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hinstDll,NULL);
而后,当GetMsgProc被调用后,就SetWindowLong来派生子类
3 使用远程线程注入DLL,你需要在目标进程的地址空间中创建和执行线程并访问提交给线程的栈的物理存储,懂吗?反正我是不懂.

另外,如果你要注入的是子进程的化,CreateRemoteThread的第一个参数就可从
CreateProcess中获得了,不过如果是子进程的话,访问数据完全可以用进程通讯的方法来实现.
weiwenbing 2000-05-27
  • 打赏
  • 举报
回复
我确实是要通过这个来访问其他程序的数据.
fupf88,谢谢你的帮助,但是你说的那本书我不知道怎么得到.
所以请你把各种方法说得详细一点好吗?再次衷心的感谢你的帮助!!!
thur 2000-05-26
  • 打赏
  • 举报
回复
通过这个来访问其他程序的数据么?
fupf88 2000-05-26
  • 打赏
  • 举报
回复
你是问如何打破进程的边界吗?用远程线程注入DLL是一种方法,其他还有使用注册表,HOOK,以及一些WIN32函数,Jeffrey Richter的<<Windows高级编程指南>>详细讨论了这个问题,还有例子,你不妨参考一下这本书.

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧