对于我的程序delphi-code-coverage-wizard,我需要验证(详细)映射文件.map
匹配 Delphi应用程序.exe
当然,这个验证应该用Delphi来实现 有办法检查吗?也许通过验证EXE中的一些信息?
答案 0 :(得分:9)
我认为一个非常简单的启发式方法是检查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,但这说明了这一点。
我希望通过这种方法可以获得极少数的误报。