Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
验证';*。地图';文件匹配Delphi应用程序_Delphi_Mapping_Executable - Fatal编程技术网

验证';*。地图';文件匹配Delphi应用程序

验证';*。地图';文件匹配Delphi应用程序,delphi,mapping,executable,Delphi,Mapping,Executable,对于我的程序,我需要验证(详细的)映射文件.map是否与Delphi应用程序.exe 当然,这种验证应该用Delphi实现。 有办法检查吗?也许通过验证EXE中的一些信息?我认为一个非常简单的启发式方法是检查PE文件中的各个部分是否在同一位置开始和结束: 例如,下面是地图文件的顶部 Start Length Name Class 0001:00401000 000A4938H .text CODE

对于我的程序,我需要验证(详细的)映射文件
.map
是否与Delphi应用程序
.exe

当然,这种验证应该用Delphi实现。

有办法检查吗?也许通过验证EXE中的一些信息?

我认为一个非常简单的启发式方法是检查PE文件中的各个部分是否在同一位置开始和结束:

例如,下面是地图文件的顶部

 Start         Length     Name                   Class
 0001:00401000 000A4938H .text                   CODE
 0002:004A6000 00000C9CH .itext                  ICODE
 0003:004A7000 000022B8H .data                   DATA
 0004:004AA000 000052ACH .bss                    BSS
 0005:00000000 0000003CH .tls                    TLS
我还研究了
dumpbin/headers
对这些部分的看法:

SECTION HEADER #1
   .text name
   A4938 virtual size
    1000 virtual address (00401000 to 004A5937)
   A4A00 size of raw data
     400 file pointer to raw data (00000400 to 000A4DFF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
60000020 flags
         Code
         Execute Read

SECTION HEADER #2
  .itext name
     C9C virtual size
   A6000 virtual address (004A6000 to 004A6C9B)
     E00 size of raw data
   A4E00 file pointer to raw data (000A4E00 to 000A5BFF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
60000020 flags
         Code
         Execute Read

...truncated
请看.text部分。根据dumpbin,它从
00401000
开始,在
004A5937
结束,长度为
000A4938
,与.map文件中的长度完全相同。当然,您会直接读取PE文件,而不是运行dumpbin,但这说明了这一点


我预计这种方法会产生非常少的误报。

我设法用JCL库
JclPeImage.pas
检查了这一点。它工作良好,即使它可能导致一些假阳性。但这是一个非常好的开始!Thx大卫。