C#中不安全代碼的侷限性是什麼?例如,我可以像使用C或C++一樣進行幾乎任意的指針轉換和算術運算嗎?C中的不安全代碼#
12
A
回答
11
是的。當不安全時,All bets are off。
這是「不安全」背後的想法 - 即可驗證類型的「安全性」已被移除,並且您可以從一種類型的指針轉換爲另一種類型的指針,而無需運行時將運行時從shooting yourself in the foot中刪除所以願望 - 很像C或C++。
下面是在C#中使用不同的指針類型的例子:
fixed (Byte* dstBytes = ¤tImage[0])
{
var dstBuffer = (Int64*)dstBytes;
const int blockCount = ImageSizeInBytes/sizeof(Int64);
for (var j = 0; j < blockCount; j++)
{
dstBuffer[j] = srcBuffer[j];
}
}
注意陣列的類型爲Byte[]
,但我得到一個Byte*
後,我可以將它轉換爲Int64*
,並在8個字節工作時間。
1
是的,你可以在任何你喜歡的地方製作一個指針點。
但是,由於程序在虛擬地址空間中運行,因此只能訪問該空間中實際存在的內存,即無法訪問任何其他進程,並且無法訪問未訪問的內存「已被分配。
0
您可以瞭解更多信息請參考以下頁面:
http://msdn.microsoft.com/en-us/library/y31yhkeb.aspx
不安全的代碼提供了對幾乎所有的原始變量聲明指針(基本類型)的能力;您可以在指針類型之間進行投射。指針運算基於指針類型的存儲大小,因此對指針應用後增量或後減量將通過sizeof(type)增加地址。
3
是的,這都是可能的。這裏是MSDN的Unsafe Code Tutorial。
對於所有這些說如何使用這是一個可怕的想法:是的,但它是有原因的。我不得不使用這個(第一次),通過第三方API獲取網絡攝像頭數據,返回Byte *
。
相關問題
- 1. 什麼是C/C++中的「安全」和「不安全」代碼?
- 2. 使不安全的代碼在C#安全
- 3. 如何編譯C#不安全代碼
- 4. 使「不安全」代碼塊「安全」
- 5. TypeScript中不安全的代碼區域
- 6. .NET中的代碼安全
- 7. JavaScript中的安全代碼
- 8. .NET Thread不安全代碼
- 9. 修復在C#中的數組數組(不安全的代碼)
- 10. 如何在安全比賽中使用不安全的代碼?
- 11. 下面的C代碼是否安全?
- 12. 不安全的代碼有多不安全?
- 13. 爲什麼我的不安全代碼塊比我的安全代碼慢?
- 14. C++多線程 - 線程安全代碼
- 15. PHP代碼安全
- 16. Java代碼,安全
- 17. Javascript代碼安全
- 18. SQL代碼安全
- 19. 憲兵不安全的代碼檢測
- 20. 使用不安全代碼的原因
- 21. 真正不安全的代碼性能
- 22. 不安全的代碼說明
- 23. Silverlight和不安全的代碼
- 24. IntPtr和避免不安全的代碼
- 25. 安全的Javascript代碼
- 26. Mysqli的安全代碼
- 27. PHP的代碼安全性
- 28. 相當簡單的c代碼中的安全漏洞
- 29. 安全索引裏面不安全代碼
- 30. RaspberryPi/USB中的安全PHP代碼
+1對於鏈接,(和一個很好的答案)。 – Sam 2013-06-04 14:00:02