如何在 WinDbg 上检查可执行文件(反汇编)中的哪部分代码访问某个内存地址? 例如,(伪)“get_addresses_use 140000” -> 14853, 12435(访问地址 140000 的文本部分中的地址)。
最佳答案
内存地址在运行时分配给程序。对于不运行的反汇编程序,没有分配地址。地址 140000 可能永远不会被使用。
即使您运行一个很难找到的可执行文件。我们举个例子:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> data(1'000'000,00); // improper spacing can be fun
int index;
std::cin >> index;
std::cout << data[index];
}
鉴于您知道哪个地址已分配给向量,您无法判断将访问哪个地址,因为这取决于用户输入。如果用户输入负数或太大的数字,这甚至是未定义的行为。
但是,您可以使用内存断点 ba
在一个地址上。这样您就可以在访问特定地址时查看该地址是否被访问。无论我到目前为止做了什么,这都足够了。
关于debugging - 谁访问了windbg中的某个内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73747306/