Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 计算PE文件中入口点的文件偏移量_Windows_Assembly_Portable Executable - Fatal编程技术网

Windows 计算PE文件中入口点的文件偏移量

Windows 计算PE文件中入口点的文件偏移量,windows,assembly,portable-executable,Windows,Assembly,Portable Executable,在 有关于如何在exe文件中查找入口点的文件偏移量的信息 在这里我可以读到 EP(文件)=EntryPoint的地址–BaseOfCode+.text[指针或数据] +文件对齐 然而,当我自己计算这个时(我使用了两个不同的exe文件),我得出的结论是 EXE文件中入口点的偏移量=入口点的地址+.text[指针或数据]- .text[虚拟服装] 其中AddressOfEntryPoint从IMAGE_OPTIONAL_头中获取,其他两个值从IMAGE_SECTION_头中获取 那个网页上的信息是

有关于如何在exe文件中查找入口点的文件偏移量的信息

在这里我可以读到

EP(文件)=EntryPoint的地址–BaseOfCode+.text[指针或数据] +文件对齐

然而,当我自己计算这个时(我使用了两个不同的exe文件),我得出的结论是

EXE文件中入口点的偏移量=入口点的地址+.text[指针或数据]- .text[虚拟服装]

其中AddressOfEntryPoint从IMAGE_OPTIONAL_头中获取,其他两个值从IMAGE_SECTION_头中获取


那个网页上的信息是假的吗?像这样添加FileAlignment似乎是错误的,没有意义。还是这样?文件对齐建议我应该使用模或其他方法来计算值。如果BaseOfCode和FileAlignment是相同的值(大多数情况下是相同的),那么将它们添加到计算中不会有任何干扰,但这有什么意义呢?

正确,您根本不需要使用
FileAlignment

算法应该如下所示(与您的非常相似):

  • 从图像中获取
    AddressOfEntryPoint
    _可选_标题。AddressOfEntryPoint(这是一个VA)
  • 搜索此VA所在的节标题(通常是第一个,但实际上应该搜索所有节标题)
  • 获得正确的节标题后,获取其
    VirtualAddress
    指针或WDATA
    字段
  • AddressOfEntryPoint
    中减去
    VirtualAddress
    :您现在有了一个“delta”
  • 由于完全相同的增量适用于偏移,因此:将“增量”添加到
    指针或WDATA

您不需要
文件对齐
,因为入口点所在的部分已经与该值对齐。

我必须重新阅读PE规范,但添加文件对齐似乎确实是错误的。如果未对齐的偏移量是
x
,我会选择
x-x%FileAlignment