我有一个名为foo.exe的.net exe文件,我在十六进制编辑器(HxD)中打开foo,然后搜索myString。我没有看到它。

我在ILSpy中打开foo.exe并能够找到myString。

我确实在十六进制编辑器中看到了人类可读的文本,但我认为.net字符串以其他方式编码。

某些背景是我们有一个客户端站点,该站点使用大约10年以上的旧代码交换服务器,并且服务器配置是硬编码的。在测试期间,旧服务器仍处于联机状态,直到生产12个小时后才发现问题。

#1 楼

C#将其字符串文字编码为UTF-16。
(http://csharpindepth.com/Articles/General/Strings.aspx)

要在HxD中搜索十六进制,您需要检查HxD中的Unicode字符串复选框,之后便可以搜索您的字符串。

如果能够在不破坏UTF-16和文件大小的情况下将字符串更改为正确的字符,则新字符串将得到更新。答案,但将其丢弃,仅添加一个可以更好地说明您答案的屏幕截图



评论


请不要像Microsoft经常那样将编码称为“ Unicode”。 Unicode有几种编码,这里使用的是UTF-16。

– svick
17年6月20日15:38



@svick,有时是UCS16,这也很烦人(编码为16位整数的Unicode代码点。

–躲藏
17年6月23日在1:30