我正在尝试建立一个迷你探测器。 它记录了一组给定测试的函数调用,并且应该稍后告诉它运行给定模块中的哪些函数。
我记录了一堆虚拟地址,我可以便宜地转换成[模块名称,地址偏移]对。
在每个进程中加载PDB并查询它的符号名称是一项非常昂贵的操作。
我正在考虑保存[模块名称,地址偏移]列表,然后在后处理程序中加载PDB并将它们映射到符号一次。
现在我不确定模块/ dll是否总是以相同的方式加载,即符号与模块库的虚拟地址偏移量总是相同?
如果在不同的Windows版本(例如Win7 vs WinServer2008)上加载模块(相同的二进制dll),它也是一样的吗?