【100分求解】关于远程线程

「已注销」 2008-05-08 09:12:36
现在有一个宿主进程A,我用两种方法进入其地址空间,想调用进程A的某个地址处的一个函数X

方法一:采用SetWindowsHookEx(WH_GETMESSAGE),将我的一个DLL(以下称DLL B)加载到进程A的地址空间,然后DLL B调用函数X。 这样可以正确执行,没问题。

方法二:采用CreateRemoteThread,在进程A创建一个远程线程执行LoadLibrary(DLL B),经查看,DLL B被正确加载,DLL B中部分代码也能执行成功(比如用WriteProcessMemory修改了进程A的内存数据)。但是DLL B调用函数X失败,错误是内存访问违例。


问题:同样都是将DLL B加载到进程A内去调用函数X,为什么第一种方法就没问题,第二种方法就出错呢?
...全文
90 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wushigang 2008-05-09
  • 打赏
  • 举报
回复
同意四楼和六楼,区别在于线程的不同。所以原因可能在线程冲突上或者资源冲突上。
如果X函数里创建对话框之类,肯定用线程注入就要出错了。
不是对话框的话,线程变量冲突
chenxinbei 2008-05-09
  • 打赏
  • 举报
回复
mark too
cnzdgs 2008-05-08
  • 打赏
  • 举报
回复
这几种方法都是可以的,不过你描述的不够详细,还没法判断出问题。前两种方法分别是在什么时候调用X?另外X函数的参数是怎么给的?问题很可能是多线程访问冲突,这与X执行的具体操作有关。
「已注销」 2008-05-08
  • 打赏
  • 举报
回复
lake_cx 老兄说的跟我想的差不多。

但是第二种方法为什么会出错呢?
lake_cx 2008-05-08
  • 打赏
  • 举报
回复
第一种方式是在主线程执行你的目标方法
第二种方式是在子线程执行你的目标方法
第三种方式大部分情况下是在主线程执行你的目标方法
「已注销」 2008-05-08
  • 打赏
  • 举报
回复
函数X是个固定地址,地址没问题,因为每次测试我都查看了进程内存的。

我按你的方法调试一下,谢谢vocanicy老兄
vocanicy 2008-05-08
  • 打赏
  • 举报
回复
你的函数X的地址是如何得到的?


另外远程线程也是可以调试的,你在你的线程入口加一句DebugBreak();

然后注入线程,线程运行时会弹出警告框,你选择调试就可以了,这时你看到的是汇编,只需单步走几步就回到DLL B的空间,这时右键菜单选择goto source就可以看到源码了
和调试自己的程序一样
「已注销」 2008-05-08
  • 打赏
  • 举报
回复
我又测试了一种方法:

方法三:采用CreateRemoteThread,在进程A创建一个远程线程执行LoadLibrary(DLL B),DLL B 对进程A进行 APIHook,Hook住进程A的LoadLibraryA函数,然后在自己的MyLoadLibraryA函数里调用进程A的函数X,也同样没有问题。



补充一点:函数X是在进程A加载的一个DLL(非系统DLL)里的一个函数,但不是Export函数。
fishly_0 2008-05-08
  • 打赏
  • 举报
回复
mark
zdleek 2008-05-08
  • 打赏
  • 举报
回复
MARK,
原资源可在github中搜索到,这里只是用于个人学习方便。 课程内容 第1讲 知识图谱概论 (2019-3-1,2019-3-8) 1.1 知识图谱起源和发展 1.2 知识图谱 VS 深度学习 1.3 知识图谱 VS 关系数据库 VS 传统专家库 1.4 知识图谱本质和核心价值 1.5 知识图谱技术体系 1.6 典型知识图谱 1.7 知识图谱应用场景 第2讲 知识表示 (2019-3-15) 2.1 知识表示概念 2.2 知识表示方法 语义网络 产生式系统 框架系统 概念图 形式化概念析 描述逻辑 本体 本体语言 统计表示学习 第3讲 知识建模 (2019-3-15,2019-3-22) 3.1 本体 3.2 知识建模方法 本体工程 本体学习 知识建模工具 知识建模实践 第4讲 知识抽取基础:问题和方法(2019-3-22) 4.1 知识抽取场景 4.2 知识抽取挑战 4.3 面向结构化数据的知识抽取 4.4 面向半结构化数据的知识抽取 4.5 面向非机构化数据的知识抽取 第5讲 知识抽取:数据采集(2019-3-29) 5.1 数据采集原理和技术 爬虫原理 请求和响应 多线程并行爬取 反爬机制应对 5.2 数据采集实践 百科 论坛 社交网络等爬取实践 第6讲 知识抽取:实体识别(2019-3-29) 6.1 实体识别基本概念 6.2 基于规则和词典的实体识别方法 6.3 基于机器学习的实体识别方法 6.4 基于深度学习的实体识别方法 6.5 基于半监督学习的实体识别方法 6.6 基于迁移学习的实体识别方法 6.7 基于预训练的实体识别方法 第7讲 知识抽取:关系抽取(2019-4-19,2019-4-26) 7.1 关系基本概念 7.2 语义关系 7.3 关系抽取的特征 7.4 关系抽取数据集 7.5 基于监督学习的关系抽取方法 7.6 基于无监督学习的关系抽取方法 7.7 基于远程监督的关系抽取方法 7.8 基于深度学习/强化学习的关系抽取方法 第8讲 知识抽取:事件抽取(2019-3-29) 8.1 事件抽取基本概念 8.2 基于规则和模板的事件抽取方法 8.3 基于机器学习的事件抽取方法 8.4 基于深度学习的事件抽取方法 8.5 基于知识库的事件抽取方法 8.6 基于强化学习的事件抽取方法 第9讲 知识融合(2019-4-28) 9.1 知识异构 9.2 本体匹配 9.3 匹配抽取和匹配调谐 9.4 实体匹配 9.5 大规模实体匹配处理 9.6 知识融合应用实例 第10讲 知识图谱表示学习(2019-5-5) 10.1 知识表示学习概念 10.2 基于距离的表示学习模型 10.3 基于翻译的表示学习模型 10.4 基于语义的表示学习模型 10.5 融合多源信息的表示学习模型 10.6 知识图谱表示学习模型的评测 10.7 知识图谱表示学习前沿进展和挑战 第11讲 知识存储(2019-5-10) 11.1 知识存储概念 11.2 图数据库管理系统、模型、查询语言 11.3 RDF数据库管理系统、模型、查询语言 11.4 基于关系型数据库的知识存储 第12讲 基于知识的智能问答(2019-5-10) 12.1 智能问答基础 12.2 问题理解 12.3 问题求解 12.4 基于模板的知识问答方法 12.5 基于语义析的知识问答方法 12.6 基于深度学习的知识问答方法 12.7 IBM Watson原理和技术剖析 12.8 微软小冰的原理和技术剖析 第13讲 实体链接(2019-5-17) 13.1 实体链接基本概念 13.2 基于概率生成模型的实体链接方法 13.3 基于主题模型的实体链接方法 13.4 基于图的实体链接方法 13.5 基于深度学习的实体链接方法 13.6 基于无监督的实体链接方法 第14讲 知识推理(2019-5-17) 14.1 知识推理基础概念 14.2 基于逻辑的知识推理方法 14.3 基于统计学习的知识推理方法 14.4 基于图的知识推理方法 14.4 基于神经网络的知识推理方法 14.5 多种方法混合的知识推理方法

15,473

社区成员

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

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