首页
社区
课程
招聘
求助关于进程间通信的问题
发表于: 2013-1-29 20:05 8664

求助关于进程间通信的问题

2013-1-29 20:05
8664
近日来研究一个程序,此程序A会启动一个进程B,但是进程B并没有访问网络,是由进程A来发送封包数据.
    猜测封包数据是由进程B生成,传递给进程A,现在在下想知道的是进程B是如何传递数据给进程A的,望各位给个方向

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
菜鸟路过,帮顶
2013-1-29 20:29
0
雪    币: 5
活跃值: (229)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
A建立一个共享的内存映射文件,B写之。这样可以吗?
2013-1-29 21:09
0
雪    币: 63
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
可以啊,我感觉直接共享内存变量也可以,就是不知道怎么跟踪调试这种
2013-1-29 21:28
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
如果楼主想看看内存映射在OD中的样子,自己先动手写一个,然后再调试自己的程序不就可以了么?
上传的附件:
2013-1-29 21:49
0
雪    币: 63
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
      感谢,OD下断OpenFileMapping无反应,是否排除掉此方法呢
      另外我在1楼提到的这个类型的 程序B 发送数据给程序A,程序A来发送封包,这个是大家经常使用的方法还是一个个例呢? 如果是经常使用的方法那么这种方法一般情况下是采用何种方式来进行数据间的通信的呢?
      另外我用OD回溯封包来源时是一直循环在 PeekMessageA、TranslateMessage、DispatchMessageA附近,奈何知识不广,只是猜测为循环接收到某消息后去读取数据发送封包,亦或是此消息内就包含了封包,能否告知一二,小菜谢过了
2013-1-30 19:52
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
WM_COPYDATA?
2013-1-30 20:55
0
雪    币: 63
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
      试过了 进程B并没有发送WM_COPYDATA消息
2013-1-30 20:57
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我不知道别人的习惯,但我个人是经常使用这个方法进行进程间通信的,虽然通信方法非常非常的多,但这个方法也应该是经常被人用,依个人浅见,原因应该无非以下几点:

1、管道 WIN7下经常会有权限的问题。
2、SOCKET 仅仅为了两个进程通信就用SOCKET,未免有点大材小用。
3、DLL共享 需要一个DLL作为中转。
4、其它方法 都有各种各样的局限性。

加上内存映射使用非常简单,所以应该还是比较普及的。

具体使用的方法也无非两种:
1、消息投递 接收方获得MSG消息后使用某个事先约定好的接口函数或者其它方式获取映射区域的数据;
2、定时器,接收方定时扫描映射区域,发现数据即可采集;

映射区域在创建后是由一个指针所指向的,代码作者有可能使用函数接口进行保护,也可能直接把指针拿过来使用,比如memcpy、memset之类。但无论如何,本质上都依赖于指向该区域的指针,所以调试时跟踪这个指针个人以为比较好一点。如果实在不行,建议使用OD的超级字符串插件查询一下里面的内容,说不定会有收获。

以上是个人的一点看法,不一定正确。
2013-1-30 21:25
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
10
发送的消息不一定是WM_COPYDATA,建议先确定是否通过窗口来传递
如果是甚至就收集B所传的消息号,再带到自己的程序发给A进行排除
2013-1-30 21:51
0
雪    币: 63
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
感谢cyfage的经验之谈,也感谢其他各位的解答,试了好几种常见的方法都没有找出来,看来得细细的逆了。
2013-1-31 05:12
0
雪    币: 652
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
方式比较多吧。
    1 管道中还有命名管道和非命名管道
    2消息队列据!
    3 信号量, 不能传递复杂消息,只能用来同步
    4 共享内存
    5  黏贴板
    6  邮槽
    7 套接字
我用的最多的还是管道和套接字。

估计楼主的是共享内存或者管道了。
2013-1-31 09:27
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
看得晕晕的,我的天……
2013-2-4 07:03
0
雪    币: 244
活跃值: (63)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
Mark以下,学习啦
2013-7-22 18:33
0
雪    币: 3496
活跃值: (749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习下。
2013-11-21 11:50
0
游客
登录 | 注册 方可回帖
返回
//