C# .NET应用程序不';当PE代码段可写时,它似乎不起作用

C# .NET应用程序不';当PE代码段可写时,它似乎不起作用,c#,asp.net,.net,portable-executable,sectionheader,C#,Asp.net,.net,Portable Executable,Sectionheader,我希望有人知道发生了什么 假设我有一个.NET应用程序(显然,任何其他应用程序都不存在这样的问题)。 我在一个十六进制编辑器中打开应用程序,搜索代码段标题,并通过添加一个IMAGE_SCN_MEM_WRITE值(我指的是OR操作)来更改特征值(段标题中的最后一个) 例如,它是0x60 0x00 0x00 0x02, 我将其更改为0xE00x00 0x00 0x02。 (图像\u SCN\u MEM\u WRITE=0x80 0x00 0x00 0x00) 然后,在我更改任何内容之前,我尝试启动运

我希望有人知道发生了什么

假设我有一个.NET应用程序(显然,任何其他应用程序都不存在这样的问题)。 我在一个十六进制编辑器中打开应用程序,搜索代码段标题,并通过添加一个IMAGE_SCN_MEM_WRITE值(我指的是OR操作)来更改特征值(段标题中的最后一个)

例如,它是0x60 0x00 0x00 0x02, 我将其更改为0xE00x00 0x00 0x02。 (图像\u SCN\u MEM\u WRITE=0x80 0x00 0x00 0x00)

然后,在我更改任何内容之前,我尝试启动运行良好的应用程序,并收到此错误消息 “无法启动此应用程序”

这就是当我按下OK时它重定向我的地方

上面是这么说的:

应用程序的配置方式不允许确定.NET Framework运行时的适当版本。相应的垫片代码为shim_NOVERSION_FOUND。 您无法自行解决配置问题。请与应用程序供应商联系以解决此问题

那么这里可能有什么问题呢?
哦,顺便说一句,文件中没有其他字节被更改,当我更改特征值时,一切正常。

为什么要在十六进制编辑器中编辑文件?这样做的目的是什么?现在还不清楚你想达到什么目的。试着理解PE格式。马上就被难住了。这有用吗?FWIW我认为这是一个非常有效的问题,因为最好的学习来自修补IMO。我的猜测是,由于您编辑了文件,但没有更新PE校验和,因此它不再匹配,导致安全检查失败。编辑后,使用工具计算并替换校验和,或者您可以尝试MSVC++的editbin(使用参数:/section:.text,cerw),如果没有其他问题,它会随更改一起更新校验和,以查看问题是否消失。我考虑过这一点。校验和设置为零。我认为正在发生的事情是,有一些代码在内存中由于某种原因修改了自身,因此原始文件不允许编辑任何内容,也不允许正常启动。我不知道你为什么还要添加这个代码。