简介
本文将提供一个编辑一个程序集的清单和修改大会是多么容易的一个简单的例子一步一步的指导。问题
在一个较大的发展团队工作,意味着你可能并不总是有一个特定的程序集源代码的访问,或如果这样做,你可能无法编译任何理由(例如,你在客户现场)。
最近,我有两个问题,我解决了一个大会通过拆卸,修改舱单和IL,然后重新。
附带的代码(以上)两个项目。第一个项目是一个WinForms项目,使用一个类库。类库下面的代码行:使用System.Reflection;使用System.Runtime.CompilerServices;[大会的AssemblyVersion("; 1.0.1.0quot";)]公共类识别TestClass{
60;公共静态十进制SquareNumber(十进制baseNumber) {
160; 返回CalculatePower(baseNumber 2);
; } 私人静态十进制CalculatePower(十进制baseNumber,INT指数) { 十进制的returnValue = 1; 为(int i = 0;我LT;指数;我) 的returnValue *= baseNumber; 返回的returnValue;
;}}
让我们假设一个瞬间,我们的类库是用在一些地方,我们重新编译它来修复在以前的版本中存在的问题。我们需要分发到我们的客户,但我们有编译错误的版本,并不能使用,因为新版本依赖问题大会。
一些新的功能在我们的WinForms应用程序需要访问CalculatePower方法,不幸的是有一个私人的存取。这意味着我们需要改变其向公众而不是私人的存取(见下文)。MessageBox.Show(TestClass.CalculatePower(decimal.Parse(txtBase.Text)
; int.Parse(txtExponent.Text))。toString()方法,
160; "Resultquot;
; MessageBoxButtons.OK, &
#160; MessageBoxIcon.Information);解决方案
幸运的是,微软已经包括了所有你需要的工具与Visual Studio。NET中。开始在Visual Studio。NET 2003命令提示。
在命令提示符下,键入ILDASM LT; entergt;打开大会,你需要的工作。在我们的例子中,这将是SatelliteAssembly.dll。打开文件后,选择File - GT;转储。确保所有的复选框被选中,然后单击确定。系统将提示您保存为IL文件。我建议创建一个新目录英寸保存,另存为SatelliteAssembly.IL(然后关闭ILDASM)。打开您最喜爱的编辑工具(我使用Visual Studio.NET 2003年)内SatelliteAssembly.IL。大会/ * 20000001 * / SatelliteAssembly查找的IL代码,看起来像这样:{ / / ---以下自定义属性添加 / /自动,不要取消注释------- / /自定义/ * 0C000001:0A000002 * /实例无效[mscorlib程序/ * 23000001 * /]
60;/ / System.Diagnostics.DebuggableAttribute / * 01000004 */::.构造函数(BOOL, / / BOOL)/ * 0A000002 * / =(01 00 01 01 00 00) 。哈希算法0x00008004 。VER 1:0:1:0}更改1:0:1:0(1.0.1.0)版2:0:1:0(2.0.1.0)。查找的IL代码,看起来像这样:静态方法/ * 06000002 * /私人hidebysig
0; ValueType的[mscorlib程序/ * 23000001 * /] System.Decimal / * 01000002 * / CalculatePower(ValueType的[mscorlib程序/ * 23000001 * /]
0; System.Decimal / * 01000002 * / baseNumber
60; INT32指数)}公共私营存取。确保命令提示符工作目录是临时目录,用来保存IL文件。在命令提示符下,类型ILASM / DLL SatelliteAssembly.IL LT; entergt;。
您现在留下了一个大会,有新的版本号和公共方法访问器。这可以派上用场,当你没有明确的访问源代码或源代码是不可用。兴趣点
显然,拆卸/组装提供的电源是相当惊人的,还有许多其他的调整和变化,可以通过该设施提供。
我有没有尝试过这种方法混淆代码(发展,我们的代码是不混乱)。如果您曾经试图混淆代码,让我知道它是如何工作的。
ILASM一个交换机的数量,你可能想调查(例如:/ DEBUG提供调试信息。PDB文件)。