jma*_*erx 5 .net c# decompiling
我有一个旧的 .NET DLL,我丢失了它的源代码,我想看看是否可以改变它的行为。
它有一个接收字符串并返回字符串的方法。
我想重写这个方法,以便我可以返回
startStr + " test";
Run Code Online (Sandbox Code Playgroud)
我尝试了.NET Reflector,但它生成的项目有一堆奇怪的错误,所以我无法重新编译它。
然后我尝试了 Reflexil,但它只提供装配级别的更改。
有什么办法可以用 C# 重写该方法并让 DLL 使用我的方法吗?
Reflexil 应该能够为您处理这个问题 - 您需要在 Reflector 中切换到 IL 视图,然后您可以转到您想要更改的方法,拉出 Reflexil 并进行更改。这避免了将程序集反编译为源代码的问题(这对我来说从来没有在 Reflector 中没有错误的情况下工作过)。
如果您只想将字符串附加到字符串变量,您可以执行以下操作:
// assuming your original string is already on the stack
ldstr " test"
call System.String System.String::Concat ( System.String, System.String )
Run Code Online (Sandbox Code Playgroud)
这将在堆栈上创建一个新字符串并附test加到它后面。完成编辑后,您可以将程序集保存回磁盘。
如果您需要更复杂的东西(例如附加函数调用返回的字符串),您只需调用正确的方法,然后调用Concat()堆栈上的两个字符串即可。
如果您的原始方法返回一个字符串,那么将其包装在新程序集中的新函数中可能是更好的解决方案。如果您确实需要更改原始程序集,我只会编辑 IL,因为 - 例如 - 从特定方法返回的字符串在同一程序集中使用,并且您需要该程序集中的其他函数来查看更改后的返回值。
注意:我为此使用了 Reflector 6.8.2.5 和 Reflexil 1.0 - 当前的 Reflector / Reflexil 可能有所不同。如果您需要这些文件进行更改,请告诉我。
| 归档时间: |
|
| 查看次数: |
1606 次 |
| 最近记录: |