Функция searchMemory в pykd

Я пытаюсь понять, как использовать 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> >)

Кто-то знает, каковы аргументы и как я должен использовать эту функцию?

1 ответ

Решение

Во-первых, обратите внимание, что есть 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 это строка байтов, а не символов Юникода, так что вы можете поместить туда произвольные байты. Он также должен быть подходящим для поиска ASCII. Но вам, возможно, придется немного поиграться с текстом UTF-16 / UCS. То же самое относится и к списку charпотому что это не объявлено как wchar_t,

Другие вопросы по тегам