我使用.NET反射器5.1.5.0来反编译一个扩展名为 .exe 的文件。 导出到项目后,我有一些包含许多“特殊”字符的类:(
例如:
Label_065C (为什么原始标签名称已转换...)
匹配matchBaseTag =新正则表达式(@“(?< = base \ s + href \ = [ \ x27 \ x22 ])(?[^ \ x27 \ X22 ] *)(= [\ X27 \ X22])“)匹配(结果)?。 (我认为x27是一个六进制代码)
我想问一下为什么值(粗体)发生了变化! 以及如何理解他们的真实价值(orignal)
很抱歉因为我的英语不好而且非常感谢! (我在等你的回复:()
答案 0 :(得分:2)
您可以在View->中将数字格式设置为十进制options->反汇编程序 - >数字格式
答案 1 :(得分:1)
二进制文件中的信息只是字符串之后的内容编译器解释了任何转义序列等 - 它是原始文本数据,而不是源文本。同样,SiteID
比较之类的值只是整数。
Reflector提供了一些可编译为相同二进制代码的源代码 - 它不知道您是使用了十六进制文字还是十进制文字等。您可以更改它在View / Options / Disassembler下使用的数字格式,强制它为十六进制或十进制或让它来决定。它似乎没有类似的选项来确定如何反编译非ASCII字符 - 如果它可以使用\uXXXX
形式而不是\x
,IMO会很好。
我不知道“标签”位,因为你没有给出足够的关于你所看到的地方或之前的情况。
答案 2 :(得分:0)
通常当Reflector的表示与我认为它应该存在之间存在差异时 - 我使用ILDasm。我认为整数问题可以通过Jon和najmeddine所说的来解决。字符串更难(如版权属性值和正则表达式字符串)。
字符串常量(源代码中引号中的内容)作为unicode字节序列存储在二进制文件中(在blob或用户字符串堆中)。如果执行以下操作,则可以使用ILDasm准确查看二进制文件中的内容: 0.在ILDasm中加载程序集 1.查看 - >元信息检查原始:堆 2.查看 - >元信息单击显示!
如果你搜索“copyright”,它最可能是在blob堆中(属性值使用不同的序列化到字节,并且在blob堆中包含其他二进制值),对于你的RegEx字符串,它应该在用户字符串堆。
一旦你查看了ILDasm中的值,你会看到程序集中的实际内容......如果它与Reflector显示的内容之间存在差异......很可能Reflector正在尽最大努力解码二进制字符串,用于将不可读的字符转换为更易读的格式。由于有几种可能的编码/解码,Reflecor有时会显示一个有效的字符串 - 但是没有正确解码(例如\ x27 anc \ x22解码'和')。
简而言之,你的值在程序集中没有改变(最有可能)只是Reflector没有正确地将它解码为原始字符串。