我正在尝试使用mono.cecil编写一个混淆器,现在正在重命名变量。我知道变量名不会存储在程序集中(我提供给混淆器),而是存储在pdb中。有没有办法只使用程序集重命名(例如生成pdb然后重命名)?
答案 0 :(得分:0)
这里不需要进入pdb的东西......
using Mono.Cecil;
...
AssemblyDefinition asm = AssemblyDefinition.ReadAssembly("path to your program");
foreach (TypeDefinition t in asm.MainModule.Types)
{
if (!t.Name == "<Module>")//global type
{
foreach (MethodDefinition m in t.Methods)
{
m.Name = "New Name for your method";
// You better use a random name & an array where you can put
// names that has been already used in order to avoid having twice
// the same name
}
}
}
答案 1 :(得分:0)
您不应该随混淆的程序集一起分发pdb。
如果您需要在pdb中重命名变量:
assembly.MainModule.LoadSymbols()
组装后加载pdb variableDefinition.Name = newName
修改变量的名称assembly.MainModule.SaveSymbols()
保存pdb