浅谈C#互操作的内存溢出问题
2013-10-10 10:00
716 查看
c#调用C++DLL代码,发现了一个隐藏很深的问题。 危害很大,而且不易察觉。
大概是申明c++的函数时候,有一个long类型的指针。在C#中我的申明成了这样:
public extern void Method(ref uint para);
最初怎么也没有发现这里面有什么问题,知道这个隐藏的问题暴露出来,把前面申明的一个变量改变了, 我才恍然大悟。
uint test = 0;
int *p = new IntPtr();
Method(ref test);
在调用Method这里下断点,p的值是分配的一个内存地址。F10跳过Method,p指针就指向了0x00000000!!;
初步分析,是在栈上只给test分配了4个字节存放值,结果通过互操作返回了8个字节的值,就把紧挨着的存放p指针地址的4个字节占用了,恰好这四个字节又是高位,返回数据的高位都是0。 以前了解过c++的栈内存溢出,没想到在c#里被我遇到了,问题看似不大,如何被恰好相邻的四个字节是返回地址,说不定危害不小啊!! 看来c#的互操作还是得小心为好。
您可能感兴趣的文章:
相关文章推荐
- C#互操作的内存溢出问题
- 《编程之美》读书笔记18: 3.7 队列中取最大数操作问题
- C#操作Excel,调用ApplicationClass.Quit()关闭Excel时,发生异常:Microsoft Office Word 遇到问题需要关闭
- WebException 操作超时的问题解决
- 读阿里巴巴开发规范关于list集合操作的问题
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题
- 关于PHP中操作MySQL数据库的一些要注意的问题
- 第十八课:js样式操作需要注意的问题
- Android Bitmap操作内存问题总结(图片处理、截屏等)
- [转]在Java中实现.net中DataTable功能以及操作双数据库的List连接问题解决方案探究
- Linux C 第十一章文件操作十个问题及解答
- 【空间释放】解决Linux下rm操作不释放空间的问题
- 重新遇到+=操作的隐藏转型问题。
- checkbox在jquery版本1.9 以上用attr不可重复操作的问题【附解决方案】
- 添加自定义操作后,安装时未能找到.installstate文件的问题
- SOAP绑定操作和参数的名称空间问题?
- 在loadrunner操作中,所碰见问题及解决方法
- 统计工龄 模拟EXCEL排序 银行排队问题之单队列多窗口问题 银行业务队列简单模拟 堆栈操作合法性 两个有序序列的中位数
- 编程之美 set 10 队列中取最大值操作问题
- jsp中判断的问题(例如不同权限有不同操作,页面相同)