gpt4 book ai didi

delphi - 从 DLL 的映射文件中获取源行号

转载 作者:行者123 更新时间:2023-12-03 18:33:52 25 4
gpt4 key购买 nike

当一个 EXE 引发了“访问冲突在地址 XXXXXXXX...”之类的异常消息时,地址 XXXXXXXX 是一个十六进制值,我们可以通过查看映射文件来获取导致异常的源代码行号。详情如下( by madshi at EE ):

you need to substract the image base, which is most probably $400000. Furthermore you need to substract the "base of code" address, which is stored in the image nt headers of each module (exe/dll). It's usually $1000. You can check which value it has by using the freeware tool "PEProwse Pro". It's the field "Base Of Code" in the "Details" of the "Optional Header". You'll also find the image base address there.



我的问题是 : 如何获取 的源代码行号DLL ?是否适用相同的计算?谢谢!

注 1: map 文件由 Delphi 生成,我不确定这是否重要。

注 2:我一直在使用 JCL DEBUG,但它无法捕获似乎在 DLL 启动时发生的异常(实际上是 Office 加载项)。

最佳答案

应用相同的计算,但有以下注意事项:您需要获取加载 DLL 的实际地址,而不是 EXE 的图像基址。 DLL 的基本代码应采用与 EXE 相同的方式(存储在 PE 的 IMAGE_OPTIONAL_HEADER 中)。

顺便说一句,从PE格式的角度来看,EXE和DLL实际上是一回事。

关于delphi - 从 DLL 的映射文件中获取源行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5032968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com