无锡手机网站建设服务,重庆seo公司排名,久久建筑网101图集下载,企业内网怎么搭建大家好#xff0c;我是沙漠尽头的狼。
本方首发于Dotnet9#xff0c;介绍使用dnSpy调试第三方.NET库源码#xff0c;行文目录#xff1a;
安装dnSpy编写示例程序调试示例程序调试.NET库原生方法总结
1. 安装dnSpy
dnSpy是一款功能强大的.NET程序反编译工具#xff0c;…大家好我是沙漠尽头的狼。
本方首发于Dotnet9介绍使用dnSpy调试第三方.NET库源码行文目录
安装dnSpy编写示例程序调试示例程序调试.NET库原生方法总结
1. 安装dnSpy
dnSpy是一款功能强大的.NET程序反编译工具可以对.NET程序进行反编译代替库文档的功能代码丢失或者损坏可直接恢复所以能在完全没有源码的情况下即时调试程序甚至还能修改程序
Github有二进制可执行程序下载地址也有源码可以自行编译本文使用前者Github地址是https://github.com/dnSpy/dnSpy 2. 编写示例程序
示例为一个桌面程序输入数字右侧回显输入的数字是奇数还是偶数 示例代码比较简单界面绑定和ViewModel关系截图看完所有 奇偶判断由类TestTool的TellMeOddEven方法返回再回看回显咦0是奇数1是偶数
TestTool类是其他库定义我假装你没有源码哈虽然你有 类具体定义如下
namespace TestDll;public class TestTool
{public string TellMeOddEven(int number){if (number % 2 1){return ${number}是偶数;}return ${number}是奇数;}
}3. 调试示例程序
打开dnSpy将主程序引用的TestDll拖入 可以看到反编译后的代码 反编译出来的方法定义会和第三方源码可能不同以下是一些可能导致不同反编译结果的因素 编译器优化不同版本的编译器可能会对代码进行不同的优化例如使用不同的算法、数据结构或者代码重排等。这些优化可能会导致反编译出来的代码结构和顺序不同本文示例使用 .NET 8开发.NET Framework编译的库可能反编译出来与源码几乎一致。 反编译工具更新dnSpy本身也会不断更新以适应新的.NET版本和编译器特性。这些更新可能会改变反编译算法和策略从而导致不同版本的dnSpy反编译结果不一致。
代码简单对比源码和反编译的代码查看对整型入参除2取余如果等于1判断为偶数否则为奇数当然这是错的假如代码逻辑复杂可以用dnSpy调试。
运行测试程序并在dnSpy中给方法打断点在调试菜单附加测试程序就和VS中操作类似 4. 调试.NET库方法
上面调试示例程序的方法可用于其他第三方.NET库那么.NET自身库方法呢
方法类似找到.NET库对应类、对应方法运行目标程序然后打断点。.NET库方法这样找点击【文件】》【从GAC打开】》搜索目标库双击库再查找目标方法后面调试步骤就是一样了 5. 总结
技术交流加群请添加站长微信号dotnet9com文中示例代码MultiVersionLibrary
dnSpy很强大的还能直接监视第三方代码的变量、修改值等就和你使用VS开发自己的程序一样了解更多用法还请查看文章开头给的链接https://github.com/dnSpy/dnSpy 这篇大佬的文章也不错建议看看《神器如 dnSpy无需源码也能修改 .NET 程序》。
对了示例程序中奇偶数判断不对我又没代码我想纠正怎么办
解决这个问题上面大佬的文章您可以拜读了下一篇站长继续讲解第三方库拦截能实现不修改第三方库达到修改方法逻辑和返回结果的效果可以提前预习快学会这个技能-.NET API拦截技法当然下一篇会有新知识点非公有类非公有方法拦截技法。
以原仓库两张dnSpy调试第三方库的动图结束本文