pykd 中的 searchMemory 函数

searchMemory function in pykd

我想了解如何在 windbg 的 pykd 扩展中使用 searchMemory() 函数。

documentation 表示如下:

Function searchMemory

searchMemory( (long)arg1, (int)arg2, (list)arg3) -> int :
Search in virtual memory

C++ signature :
unsigned __int64 searchMemory(unsigned __int64,unsigned long,class boost::python::list)

searchMemory( (long)arg1, (int)arg2, (str)arg3) -> int :
Search in virtual memory

C++ signature :
unsigned __int64 searchMemory(unsigned __int64,unsigned long,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)

有人知道参数是什么吗?我应该如何使用这个函数?

首先,请注意同一方法有 2 个重载:

searchMemory( (long)arg1, (int)arg2, (list)arg3) -> int

searchMemory( (long)arg1, (int)arg2, (str)arg3) -> int
  • arg1是开始搜索的起始地址或偏移量,
  • arg2 是要搜索的内存长度或数量,
  • arg3为搜索词,可
    • 一个字符串 (std::string) 或
    • 一个列表(共 char 个)
  • return的值又是一个偏移量,肯定是第一次出现的偏移量,所以要找到下一次出现的,就得重新搜索

我已经从 pymemaccess.cpp [Codeplex] 中的来源解释了所有这些,但我自己从未使用过。

我既不熟悉 C++,也不熟悉 Python,更不了解两者之间的映射,但是恕我直言,std::string 是字节串而不是 Unicode 字符,所以你可以在那里放任意字节。它也应该适用于ASCII搜索。但是对于 UTF-16 / UCS 文本,您可能需要 fiddle 一点。这同样适用于 char 的列表,因为它没有声明为 wchar_t.