2017-03-01 105 views
2

好吧,所以我有一个应用程序,我一直负责编辑该源不可用,并且由于机密性,我无法共享应用程序/代码 - 我意识到这使得这些有些问题具有挑战性,但是因为我已经完成了这个任务,所以我认为它是简单的,我忽略了。编辑没有源代码的C#汇编没有反映执行更改

我已经在过去执行这一点,唯一不同的是,这是使用4.5和最新的C#编译器等

这里一个新的版本的情况:

我可以打开应用程序,并阅读它适当地编辑IL。事实上,我可以在反射桌面(最新),Telerik(我通常使用的)也使用更新的reflexil中使用reflexil进行编辑,而我也尝试过dnSpy每晚最新的3.0.1。

哎呀,我以为我失去了理智,我甚至用旧的GreyDragon打开它,还编辑了一些IL,保存了EXE程序集,甚至直接在入口点IL也不执行更改,但由于事先未改变原始的,但在所有这些工具中,如果我重新打开之前编辑和保存的程序集exe文件,它会在所有情况下正确显示修改后的C#以及相应的IL指令。

我可以精确定位的唯一事情是可以再次有所不同的是更新的目标dotnet版本,并将其编译到新的C#编译器/ ver中。

那么,是否有任何理由认为,最新版本的C#Rosylyn等会阻止IL编辑方法(以及几乎所有可以执行IL编辑的工具),它们之前从现在开始工作,几乎就像一个辅助指令备份表等等,保存原始未经编辑的副本,将执行?或者,组装再生的特定“设置”是否会导致这种行为?

让我们从开始试图描述更精细的细节之前我可能缺少的一些基本障碍开始。

再次抱歉没有实际的代码分享,但希望真正的上师会知道发生了什么,并有想法。谢谢!

+0

这些程序集是否驻留在GAC中? –

+0

您不必共享机密代码,但您始终可以共享您为此问题而编写的代码。另外...你的问题是什么?如果你不想添加代码来简单地解释你试图存档的内容,你可以添加粗体文本来分隔这段文本。 –

+0

我想这里是simplist的例子: 添加IL代码void main不做任何比弹出一个messagebox说“测试”。一旦我编辑了所有的exe文件,它就会忽略编辑,就像在某处有所有旧代码的备份一样,而这只是一个不在GAC中的EXE。再次,如果我将编辑后的exe文件拖回到所有可以编辑IL的四个工具之一中,它就会显示新的C#反编译指令,用于消息框调用和IL,以及实际运行的组织代码NONE。 –

回答

0

发表我自己的答案不能相信我错过了这一点。

答案是即使它没有作为GAC中的程序集安装,但此应用程序行为发生了变化,我错过了某个进程运行NGEN.EXE以将NI本机映像编译为NATIVE图像并安装它 - 然后包含有问题的friggin机器代码的缓存版本 - 正是我的直觉所发生的事情,我只需要找到“备份副本”即可。