簡體   English   中英

無法編譯一些反編譯的C#代碼

[英]Trouble compiling some decompiled C# code

我正在反編譯一個開源項目(因為尚未發布最新版本的源代碼)。 使用RedGate的Reflector工具,它給了我這段代碼:

if(somecondition == true)
{
    ref Vector3i vectoriRef;
    float num17 = length - num;
    Vector3i end = vectori3;
    (vectoriRef = (Vector3i) &end)[1] = vectoriRef[1] - ((int) num17);
}

somecondition是一個布爾值。 lengthnum是在代碼外部定義的浮點數。 vectori3也在代碼外部定義,其類型為Vector3i。 Vector3i類型本質上就是此代碼 ,但x,y和z存儲為整數。

當我嘗試編譯此反編譯代碼時,出現以下錯誤:

  • 第2行:僅賦值,調用,遞增,遞減和新對象表達式可以用作語句
  • 第三行: 預期
  • 第3行:無效的表達方式“ ref”
  • 第6行:“ Vector3i”是“類型”,但像“變量”一樣使用

關於如何修復此代碼以使其正確編譯以及打算做什么的任何想法?

更新:原來的來源在他們的倉庫中,但你必須遵循的鏈接和線索迷宮,甚至找到它。 感謝所有張貼的人!

該代碼使用可變值類型,這是C#中的“最差做法”。 我們為可變值類型生成的代碼可能很難正確分析和反編譯。 顯然,您在反編譯引擎中遇到了一個錯誤。 C#不支持給定的語法。 (將來可能會出現;我已經編寫了“ ref locals”的原型,並且效果很好,但是尚不清楚該功能實際上是否對客戶有價值,足以保證完整的設計和實現。)

仔細閱讀代碼,您會看到它的作用: vectori3的副本復制到end中,然后獲取對end的引用(請記住,對值類型的調用的“ this”始終是對變量的引用因為調用可能會使該變量的內容發生變化。)然后使用ref對該變量進行變化。 但為什么?? 這段代碼沒有任何意義 為什么要創建變量的本地副本,然后對副本進行變異,然后丟棄變異的副本?

我懷疑您不僅在反編譯器中發現了錯誤,而且還發現了錯誤。 您可能還發現了代碼中的錯誤。

乍一看

if (somecondition)
{
    vectori3[1] -= (int)(length - num);
}

我不清楚顯式引用語法-我以前從未見過,也無法讓VS接受它-但最后一行拆分為

vectoriRef = (Vector3i) &end;
vectoriRef[1] = vectoriRef[1] - ((int) num17);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM