首页 > 解决方案 > 如何检测 valgrind 中寄存器 sp 的修改

问题描述

我想通过编写一个简单的 valgrind 工具来跟踪 x86_64 堆栈寄存器 (sp) 的修改。是否有其他工具可以跟踪 sp 的修改(或其他寄存器修改),我可以从中窥视和复制?我想我需要解析IRStmt标记Ist_Put并查找Put.offset == offset_SP. 有没有已经做到这一点的工具?我想打印出写入 SP 的值。

标签: valgrind

解决方案


请参阅 pub_tool_tooliface.h。这定义了一堆 'void VG_(track_new_mem_stack*) 函数和 VG_(track_die_mem_stack*) 函数来跟踪对 SP 的更改。

除非您需要非常高性能的跟踪(例如 memcheck 需要),否则使用它应该足够好:

  • VG_(track_new_mem_stack)
  • VG_(track_new_mem_stack_signal)
  • VG_(track_die_mem_stack)
  • VG_(track_die_mem_stack_signal)

推荐阅读