首页
社区
课程
招聘
[求助]进程间内存读写权限的问题,拜托高手,请教大家
2014-3-28 17:56 4533

[求助]进程间内存读写权限的问题,拜托高手,请教大家

2014-3-28 17:56
4533
环境描述:
有个项目是连接设备读写卡片,设备有基本的SDK接口库(A.DLL),然后做了个管理设备的助手(C#应用程序,B.EXE),之后又做了一个面向应用的SDK接口库(C.DLL),B.DLL与A.DLL是普通的调用关系,C.DLL和B.EXE通过socket通讯,B.EXE和A.DLL之间其实也有个接口库是D.DLL,这个D.DLL通过B.EXE指定的SDK名,API名和参数列表进行动态加载A.DLL,使用的是汇编PUSH 和 CALL方式动态的加载API和传入参数。

问题:
现在调用C.DLL的一个应用程序E.EXE有个数组作为指针向A.DLL发送,有时候函数执行成功,但是并没有向数组中写入数据,有时候直接被D.DLL的的try捕获到异常而返回。D.DLL使用汇编PUSH的指针地址没有问题,直接使用C.DLL调用D.DLL没有问题,但是通过socket之后就无法正常执行参数中带指针的函数。

分析:
E.EXE和B.EXE属于两个进程,数组空间属于E.EXE的栈空间,所以属于E.EXE的数组空间即时传入B.EXE中也没有读写权限,所以有时候程序无法正确写入,或者有时候程序直接因为没有写入权限而直接产生异常,被D.DLL的Try捕获到。

请问各位高手,我的分析是否正确,内存空间是不是具有这种不同进程间的权限?使用malloc或者其他方法会解决?

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞0
打赏
分享
最新回复 (3)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whnet 2014-3-28 18:27
2
0
简直是无语。  居然把指针在两个进程间传递?  你不能直接传数据么。  

另外如果你这DLL太多了。  什么叫普通调用也看不懂。直接画张图吧。 简单明了
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shootingzq 2014-3-28 19:12
3
0
不好意思,我用词不专业,普通调用就是静态或者动态引用DLL。

刚才在论坛搜索了一下,感觉是不是 OpenProcess WriteProcessMemory  ReadProcessMemory这三个函数可以支持我在不同进程间的内存空间读写。

之所谓不直接传递数据,因为卡片中的数据格式错综复杂,有ascii,有二进制,有压缩BCD,而读写一串数据有可能包含多种数据,而直接传递的数据只能是ascii,两边的字符转换工作量太大。
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whnet 2014-3-28 20:08
4
0
谁说直接传送 只能ascii。。。 你在哪听说这种说话的。 。。
游客
登录 | 注册 方可回帖
返回