2

我正在尝试了解如何searchMemory()在 pykd 扩展中为 windbg 使用该功能。

文档说明了以下内容:

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> >)

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

4

1 回答 1

2

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

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

searchMemory( (long)arg1, (int)arg2, (str)arg3) -> int
  • arg1是开始搜索的起始地址或偏移量,
  • arg2是要搜索的内存的长度或数量,并且
  • arg3是搜索词,可以是
    • 字符串 ( std::string) 或
    • (的char)列表
  • 返回值又是一个偏移量,肯定是第一次出现的偏移量,所以要找到下一次出现,你必须再次搜索

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

我对 C++ 和 Python 都不是很熟悉,对于两者之间的映射来说更糟,但恕我直言,这std::string是一个字节字符串,而不是 Unicode 字符,所以你可以在其中放置任意字节。它也应该适用于 ASCII 搜索。但是对于 UTF-16 / UCS 文本,您可能需要稍微摆弄一下。这可能适用于 的列表char,因为它没有声明为wchar_t

于 2016-08-09T23:16:00.773 回答