【发布时间】:2012-04-20 08:58:06
【问题描述】:
我只需要在我的 C# 代码中搜索一些文本。
我已经有了 .NET Reflector 和 File Disassembler Add-In,但这些似乎只是反编译了一个 DLL。
【问题讨论】:
标签: c# .net visual-studio decompiling decompiler
我只需要在我的 C# 代码中搜索一些文本。
我已经有了 .NET Reflector 和 File Disassembler Add-In,但这些似乎只是反编译了一个 DLL。
【问题讨论】:
标签: c# .net visual-studio decompiling decompiler
实际上,这些答案都不对。
是的,所有工具都可以将*.dll文件反编译成*.csproj文件,但它们都不支持CLI或批处理。您可以节省安装时间。
目前最好的解决方案是使用dotPeek,将所有*.dll 文件放入一个文件夹并使用探索文件夹选项。
dotPeek 将分析给定文件夹并显示位于文件夹内的DLLs 树。您可以为每个加载的dll 手动生成csproj。
如果您遇到这篇文章是因为您正在寻找答案如何在您的或第 3 方dlls 中找到特定指令,特别是使用反射,您可以使用此 PowerShell 脚本将dlls 反编译为 IL 并查看用于指令(System.Reflection.Assembly::Load(string) 用于反射)。
它使用 .NET Framework SDK 工具包中的中间语言 DisASseMbler (ILDASM)。根据您的 SDK 版本调整路径。
function Get-LibDump
{
Param(
# Specifies a path to one or more locations. Wildcards are permitted.
[Parameter(Mandatory=$true,
Position=0,
ParameterSetName="Basic",
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
HelpMessage="Path to one or more locations.")]
[ValidateNotNullOrEmpty()]
[SupportsWildcards()]
[ValidateScript({$_ | Test-Path})]
[System.IO.FileInfo]
$Path
)
process
{
$dumpFileFilePath = $Path.BaseName + '.il'
$outFile = "C:\LibDump\$dumpFileFilePath"
Start-Process -FilePath 'c:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\ildasm.exe' -ArgumentList "/UNICODE /OUT=`"$outFile`" `"$($Path.FullName)`"" -Wait
"Dump from:`n$(Resolve-Path -Path $Path.FullName -Relative)" | Out-File -FilePath $outFile -Encoding:unicode -Append
}
}
# Use
Get-ChildItem -Path $PathToLibFolder -Filter '*.dll' -File -Recurse | Get-LibDump
【讨论】: