c# - 通过 DecompileTypeAsString 反编译时如何反编译生成相同代码的特定方法
问题描述
使用 ILSPY 的 NOOB
我正在尝试通过 ILSpy 反编译一个方法。当我使用以下代码时,我重新生成的代码与在原始 C# 中键入的内容非常接近
decompiler.DecompileTypeAsString(new FullTypeName($@"{MyFullTypeName}"));
生成的代码如下所示。
public async Task<IReadOnlyList> FuncName(parameterList)
{
//Actual code body
}
而当我使用以下代码段时,
string functionName = "ReflectionNamed__5";
var name = new FullTypeName(functionName);
ITypeDefinition typeInfo = decompiler.TypeSystem.MainModule.Compilation.FindType(name).GetDefinition();
if (typeInfo.Methods.First().HasBody)
{
var tokenOfFirstMethod = typeInfo.Methods.First().MetadataToken;
var methodCodeString = decompiler.DecompileAsString(tokenOfFirstMethod);
Console.WriteLine(methodCodeString);
}
生成的代码如下:
//Using statements
private void MoveNext()
{
int num = <>1__state;
IReadOnlyList<string> result;
try
{
if (num != 0)
{
//Abstraction of a using statement
}
try
{
TaskAwaiter<IReadOnlyList<string>> awaiter;
if (num != 0)
{
//Somewhat resembles the actual code
}
else
{
awaiter = <>u__1;
<>u__1 = default(TaskAwaiter<IReadOnlyList<string>>);
num = (<>1__state = -1);
}
result = awaiter.GetResult();
}
finally
{
if (num < 0 && <oLogger>5__2 != null)
{
<oLogger>5__2.Dispose();
}
}
}
catch (Exception exception)
{
<>1__state = -2;
<>t__builder.SetException(exception);
return;
}
<>1__state = -2;
<>t__builder.SetResult(result);
}
有没有办法通过只反编译一个函数来生成 DecompileTypeAsString 生成的代码?
解决方案
我在 ILSpy 上提交了一个问题,它已被标记为增强。所以估计目前是不可能的。
我现在将采用丑陋的正则表达式路线,并在以后的版本中重新检查增强功能。
推荐阅读
- python - 在 VS Code 中,我不想让 Black 格式化我的 settings.json
- c++ - DLL 中的 VS 单元测试强制 declspec(dllexport)
- azure - Azure FrontDoor 后端详细信息添加到现有 FrontDoor 问题
- powershell - Powershell Rename-Item 一次性替换多个命名参数
- php - 在 php.ini 中安装 xdebug 语法错误时出错
- python-2.7 - 使用 python 运行源命令并保持环境完整以供下一组命令使用
- azure - 使用 PS 连接 Azure:请尝试使用不同的凭据或不同的订阅 ID 登录
- python - 如何在数组中重复字符串?
- python-3.x - 脚本使用时使 youtube-dl 显示输出
- reactjs - 如何使用从另一个文件导入的功能组件在 React Native 中显示模态