如何找出.exe文件的主要功能在哪里?

时间:2019-04-09 19:49:17

标签: executable disassembly

我创建了一个简单的.exe文件,该文件仅将3的值分配给称为“ x”的整数,然后打印出该值。以下是源代码的图片:

source code

我用一个名为HxD的十六进制编辑器打开了.exe文件,并使用Visual Studio 2017的反汇编功能向我展示了我主要功能的操作码。经过一番搜索,我发现主要功能存储在偏移量为0xC10的文件中

这是反汇编:disassembly

以下是十六进制编辑器中的文件:hexadecimal view of .exe file

我知道十六进制编辑器中.exe文件的某些值与Visual Studio调试器所说的不同,但我知道主要从那里开始,因为我在十六进制编辑器中更改了x的值,然后在启动时.exe,它打印出了另一个值而不是3。我的问题是,.exe文件中的值表示:“在该点上,开始主函数的操作码。”

例如,在.bmp文件中,位置0x0A,0x0B,0x0C和0x0D的4个字节告诉您第一个像素的第一个字节的偏移量。

2 个答案:

答案 0 :(得分:0)

.exeportable executable

  

布局

     

便携式可执行32位的结构   PE文件由许多标题和节组成,这些标题和节告诉动态链接程序如何将文件映射到内存中。可执行映像由几个不同的区域组成,每个区域需要不同的内存保护。因此,每个部分的开头都必须与页面边界对齐。[4]例如,通常将.text部分(保存程序代码的 )映射为execute / readonly,然后...

因此,实际上这是.text节在文件中的位置的问题。确切的位置取决于其他部分的标题和位置。

答案 1 :(得分:0)

在Windows上,可执行文件(.exe)的入口点在文件的PE Header中设置。

WikiPedia说明了此标头like this (SVG file)的结构。

相对于文件的开头,PE标头从地址所指示的位置开始

  

DWORD 0x3C指向PE标头的指针

      File Header / DOS Header
     +--------------------+--------------------+
0000 |  0x5A4D  |         |                    |
0008 |                    |                    |
0010 |                    |                    |
0018 |                    |                    |
0020 |                    |                    |
0028 |                    |                    |
0030 |                    |                    |
0038 |                    | PE Header addr     |
0040 |                    |                    |
.... | .................. | .................. |

进入点被指定在相对于上述地址的位置

  

DWORD 0x28 EntryPoint

      PE Header
     +--------------------+--------------------+
0000 | Signature          | Machine | NumOfSect|
0008 | TimeDateStamp      | PtrToSymTable      |
0010 | NumOfSymTable      |SizOfOHdr| Chars    |
0018 | Magic   | MJV| MNV | SizeOfCode         |
0020 | SizeOfInitData     | SizeOfUnInitData   |
0028 | EntryPoint (RVA)   | BaseOfCode (RVA)   |
0030 | BaseOfData (RVA)   | ImageBase          |
0038 | SectionAlignment   | FileAlignment      |
0040 | ...                | ...                |
从PE标头的开头开始

。该地址是RVA (Relative Virtual Address),表示它相对于加载程序将文件加载到的图像基址

  

相对虚拟地址(RVA)不应与标准虚拟地址混淆。相对虚拟地址是对象从文件加载到内存后的虚拟地址,减去文件映像的基址。

此地址是主要功能的地址