0

我使用 .NET reflector 5.1.5.0 反编译了一个扩展名为.exe的文件。导出到项目后,我有一些带有许多“特殊”字符的类:(

例如:

  • Label_065C(为什么原来的标签名被转换了...)

  • 匹配 matchBaseTag = new Regex(@"(?<=base\s+href\=[ \x27\x22 ])(?[^ \x27\x22 ]*)(?=[\x27\x22])")。匹配(结果);(我认为 x27 是一个十六进制代码)

  • 版权所有\x00a9 ... 公司 2008
  • 如果(this.SiteID == 0xce
  • addArticle.Parameters.Add("@Title", SqlDbType.NVarChar, 0x100 ).Value

我想问为什么值(那个粗体)被改变了!以及如何理解它们的真正价值(原文)

对不起,因为我的英语不好,非常感谢!(我在等你的回复:()

4

3 回答 3

2

您可以在 View-> options-> Disassembler-> Number Format 中将数字格式设置为十进制

于 2009-09-21T09:01:38.800 回答
1

二进制文件中的信息只是编译器解释任何转义序列等字符串的内容- 它是原始文本数据,而不是源。同样,SiteID比较之类的值只是整数。

Reflector 提供了一些可以编译为相同二进制代码的源代码 - 它不知道您使用的是十六进制文字还是十进制文字等。您可以更改它在 View / Options / Disassembler 下使用的数字格式,强制它十六进制或十进制或让它决定。看起来没有类似的选项来确定如何反编译非 ASCII 字符 - 如果它可以使用\uXXXX表单而不是\x, IMO,那就太好了。

我不知道“标签”位,因为您没有提供足够的上下文来说明您在哪里看到它或它以前是什么。

于 2009-09-21T08:59:37.763 回答
0

通常,当 Reflector 的表示与我认为应该的表示之间存在差异时 - 我使用 ILDasm。我认为整数问题可以通过 Jon 和 najmeddine 所说的来解决。字符串有点难(比如版权属性值和你的正则表达式字符串)。

字符串常量(源代码中引号中的内容)作为 unicode 字节序列存储在二进制文件中(在 blob 或用户字符串堆中)。如果您执行以下操作,您可以使用 ILDasm 准确查看二进制文件中的内容: 0. 在 ILDasm 中加载程序集 1. 查看->元信息检查 Raw:Heaps 2.查看->元信息单击显示!

如果您搜索“版权”,它很可能位于 blob 堆中(属性值对字节使用不同的序列化,并且与其他二进制值在 blob 堆中),对于您的 RegEx 字符串,它应该在用户字符串中堆。

一旦您查看了 ILDasm 中的值,您就会看到程序集中的实际内容......如果这与 Reflector 显示的内容之间存在差异......很有可能 Reflector 正在尽最大努力解码二进制字符串以将不可读的字符转义为更易读的格式。由于有几种可能的编码/解码,因此 Reflecor 有时会显示一个有效的字符串 - 但只是没有正确解码(如 ' 和 " 的 \x27 和 \x22 解码)。

所以简而言之,你的值在程序集中没有改变(很可能)只是反射器没有将它正确解码为原始字符串。

于 2009-09-22T14:07:26.927 回答