我正在尝试反编译一些使用IEnumerators的C#代码,但没有一个反编译器费心将变量重命名为有效的C#名称。我已经尝试了ILSpy,JustDecompile,dotPeek和Reflector,但都没有成功。
到目前为止反编译的例子:
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;
}
ILSpy应该是正确的able to反编译枚举数,但是它不适用于我。在我读到的某个地方,它可能是由代码的一些优化导致的,这些优化使得ILSpy无法识别模式,所以它可能是由它引起的。
然而,我想问的是:是否有一个C#反编译器可以将所有字段、变量和类重命名为有效的C#名称?我可以接受状态自动机的疯狂,只要它编译成正确的C#代码即可。
发布于 2017-03-09 02:11:32
我最终用以下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
编辑:经过一些检查后,它仍然没有完全覆盖所有内容,一旦我修复它,我会更新表格。
https://stackoverflow.com/questions/42684888
复制