C#如何反编译生成返回枚举数
我正在尝试反编译一些使用IEnumerators和yield return的C#代码,但是没有反编译器愿意将变量重命名为有效的C#名称。我尝试过ILSpy、JustDecompile、dotPeek和Reflector,但没有成功 到目前为止的反编译示例:C#如何反编译生成返回枚举数,c#,ienumerable,decompiling,yield-return,C#,Ienumerable,Decompiling,Yield Return,我正在尝试反编译一些使用IEnumerators和yield return的C#代码,但是没有反编译器愿意将变量重命名为有效的C#名称。我尝试过ILSpy、JustDecompile、dotPeek和Reflector,但没有成功 到目前为止的反编译示例: private IEnumerator _WaitForSecondsThenStop(float startToFadeTime, float fadeOutLength) { AudioObject.<_WaitForSec
private IEnumerator _WaitForSecondsThenStop(float startToFadeTime, float fadeOutLength)
{
AudioObject.<_WaitForSecondsThenStop>c__Iterator0 <_WaitForSecondsThenStop>c__Iterator = new AudioObject.<_WaitForSecondsThenStop>c__Iterator0();
<_WaitForSecondsThenStop>c__Iterator.startToFadeTime = startToFadeTime;
<_WaitForSecondsThenStop>c__Iterator.fadeOutLength = fadeOutLength;
<_WaitForSecondsThenStop>c__Iterator.<$>startToFadeTime = startToFadeTime;
<_WaitForSecondsThenStop>c__Iterator.<$>fadeOutLength = fadeOutLength;
<_WaitForSecondsThenStop>c__Iterator.<>f__this = this;
return <_WaitForSecondsThenStop>c__Iterator;
}
private IEnumerator\u waitforsecondhenstop(浮点开始到浮点结束时间,浮点结束时间)
{
AudioObject.c__迭代器0 c__迭代器=新的AudioObject.c__迭代器0();
c__迭代器.startToFadeTime=startToFadeTime;
c__迭代器。衰减长度=衰减长度;
c__迭代器.startToFadeTime=startToFadeTime;
c__迭代器。衰减长度=衰减长度;
c__迭代器.f__this=this;
返回c__迭代器;
}
ILSpy应该是正确地反编译枚举数的,但是它对我不起作用。在我读过的某个地方,它可能是由一些代码优化导致的,这些优化使得ILSpy无法识别模式,所以它可能是由这一点引起的
然而,我想问的是:是否有一个C#反编译器可以将所有字段、变量和类重命名为有效的C#名称?我对疯狂的状态自动机很满意,只要它能编译成正确的C代码。我最后用以下4个正则表达式更改了名称:
Pattern Replacement What it fixes
<(\w+)>c__Iterator Iter_$1 <_WaitForSecondsThenStop>c__Iterator
<(\w+)>_ _L_$1_ <form>__2
<\$?> _S_ <$>startToFadeTime
\$(\w+) _SS_$1 $current
模式替换它修复了什么
c_uu迭代器Iter_uu$1 c_u迭代器
_1美元2美元
_S_uu开始FadeTime
\$(\w+)\u SS\u$1$当前
编辑:经过一些检查,它仍然没有涵盖所有内容,我将在修复后更新该表。我最终用以下4个正则表达式更改了名称:
Pattern Replacement What it fixes
<(\w+)>c__Iterator Iter_$1 <_WaitForSecondsThenStop>c__Iterator
<(\w+)>_ _L_$1_ <form>__2
<\$?> _S_ <$>startToFadeTime
\$(\w+) _SS_$1 $current
模式替换它修复了什么
c_uu迭代器Iter_uu$1 c_u迭代器
_1美元2美元
_S_uu开始FadeTime
\$(\w+)\u SS\u$1$当前
编辑:经过一些检查后,它仍然没有涵盖所有内容,我会在修复后更新表格。这种类型的问题对于SO来说是特别离题的。我希望有5k+站点代表的人知道这一点。哦,是的,我已经想到了一个解决方案,可以让它成为主题(至少有点),那就是用一些正则表达式“手动”替换它。你使用的是哪个版本的ILSpy?2.x版本在视图->选项->反编译枚举器中有一个选项,如果选中该选项,则应给出实际的yield语句。在3.x中,它是自动完成的,您不能关闭它。这种类型的问题专门针对SO。我希望有5k+站点代表的人知道这一点。哦,是的,我已经想到了一个解决方案,可以让它成为主题(至少有点),那就是用一些正则表达式“手动”替换它。你使用的是哪个版本的ILSpy?2.x版本在视图->选项->反编译枚举器中有一个选项,如果选中该选项,则应给出实际的yield语句。在3.x中,它是自动完成的,您无法关闭它。