And*_*man 1 .net c# coff portable-executable
从PE规格来看:
\n\n\n\n\n在位置
\n\n0x3c,存根具有 PE 签名的文件偏移量。\n 此信息使 Windows 能够正确执行映像文件,\n 即使它具有 MS DOS 存根。该文件偏移量在链接期间被放置在\n位置0x3c。2.2. 签名(仅图像)
\n
在 MS DOS 存根之后,在 offset 处指定的文件偏移处0x3c,是一个 4 字节签名,该签名将文件标识为 PE 格式图像文件。此签名为 \xe2\x80\x9cPE\\0\\0\xe2\x80\x9d (\n 字母 \xe2\x80\x9cP\xe2\x80\x9d 和 \xe2\x80\x9cE\xe2\x80\ x9d 后跟两个空字节)。
我尝试读取这些字节:
\n\nusing System;\nusing System.IO;\n\nclass Program {\n const String fileName = @".\\some_application.exe";\n const Int64 peMarkerPosition = 0x3c;\n\n static void Main(string[] args) {\n using (FileStream fs = new FileStream(fileName, FileMode.Open,\n FileAccess.Read)) {\n Byte[] marker = new Byte[4];\n fs.Position = peMarkerPosition;\n fs.Read(marker, 0, marker.Length);\n // Now I expect \'marker\'has such bytes: "PE\\0\\0".\n fs.Close();\n\n foreach (Byte b in marker) {\n Console.Write(Convert.ToChar(b)); // But I see other values...\n }\n\n Console.WriteLine("\\nPress any key for exit...");\n Console.ReadKey();\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n但marker变量有0x08、0x01和bytes (第一个和第二个不是和chars)...为什么我得到这样的结果0x00?x0x00PE
| 归档时间: |
|
| 查看次数: |
487 次 |
| 最近记录: |