gpt4 book ai didi

delphi - 详细 MAP 文件中的每个源行地址都是插入 Int3h 的有效地址吗?

转载 作者:行者123 更新时间:2023-12-03 15:58:56 25 4
gpt4 key购买 nike

我正在尝试使用 Delphi 2007 创建一个代码覆盖率工具。

我的一般方法是使用 Win32 调试 API 为每个源代码行插入断点,然后在传递断点时删除它们 - 这样我就能够跟踪每个执行的源代码行。

我的方法概述:

  • 解析详细的 MAP 文件(由 Delphi 2007 生成)以查找每个源代码行的所有地址(仅适用于 .text 段)
  • 使用 OpenProcess API 调用以 Debug模式打开应用程序
  • 迭代每个源代码行并插入 Int3每行地址处的指令(使用 WriteProcessMemory + FlushInstructionCache 的一个 $cc 字节)
  • 继续执行,当每个断点被触发时,删除相应的断点并将该行标记为被覆盖
  • 在通过每个断点或程序存在后,我会生成一份报告,说明每个源模块覆盖了哪些行以及未覆盖哪些行

现在回答我的问题:

详细 MAP 文件中的每个源代码行地址都是插入 Int3 断点的有效地址吗?

虽然该方法对于一些简单的单元来说是成功的,但我遇到了一些较大应用程序的访问违规问题,其中违规地址包含 $cc - 这会让我认为我的方法需要进行一些修改才能工作。

也非常欢迎有关更好方法的提示!

最佳答案

嗯,理论上:是的。而且实用,我也认为是的。如果 Delphi 可以在每一行上放置断点,那么您也可以:-)。

对于某些情况,您可能需要一些特定的处理(例如:过程的第一行是本地变量的初始化、设置 EBP 等)。那么你能找出什么情况下会失败吗?

顺便说一句:不错的项目!它是开源的吗?

附注如果您需要一些汇编代码处理:请查看 koldetours.pas(使用 google 搜索)。

关于delphi - 详细 MAP 文件中的每个源行地址都是插入 Int3h 的有效地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1005042/

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