程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 淺談C#互操作的內存溢出成績

淺談C#互操作的內存溢出成績

編輯:關於C++

淺談C#互操作的內存溢出成績。本站提示廣大學習愛好者:(淺談C#互操作的內存溢出成績)文章只能為提供參考,不一定能成為您想要的結果。以下是淺談C#互操作的內存溢出成績正文


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#的互操作照樣得當心為好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved