C++ 与 Python |读取内存

问题描述 投票:0回答:1

C++
中有工作代码,并希望获得与
Python
相同的结果。 这个想法是使用特定的进程和指针从内存中检索数据。结果应如下所示,因为它在 C++ 中工作: C++ results 这是 C++ 代码:

hProcess = SOME_HANDLER
addr = SOME_POINTER
SIZE_T bytesRead = 0;
SIZE_T sizeBuff = 0x4000;
BYTE buff[sizeBuff];

ReadProcessMemory(hProcess, addr, buff, sizeBuff, &bytesRead);

在 Python 中我试过这个:

read_buffer = (ctypes.c_char * 0x4000)()
lp_buffer = ctypes.byref(read_buffer)
n_size = ctypes.sizeof(read_buffer)
lp_number_of_bytes_read = ctypes.c_ulong(0)
ctypes.windll.kernel32.ReadProcessMemory(self.handle, ctypes.c_void_p(lp_base_address), lp_buffer, n_size, lp_number_of_bytes_read)
result = read_buffer.value

这给了我这个结果:

`b'hA\xdf\x01<B\xdf\x01\xb9\t\xba\t'` 

我不知道这是什么意思,也不知道它是否包含任何有用的东西。

python c++ pointers memory buffer
1个回答
1
投票

result
bytes
类型的值,表示 0 到 255 之间的一系列整数值,包括 0 和 255。

当您显示时,每个字节以两种形式之一显示:

  1. 如果字节对应于可打印的 ASCII 字符,则显示为该字符。
  2. 否则显示为以
    \x
    为前缀的十六进制整数。

迭代

bytes
值会产生一系列
int
对象:

>>> list(result)
[104, 65, 223, 1, 60, 66, 223, 1, 185, 9, 186, 9]

(注意是

ord('h') == 104
ord('A') == 65
\xdf == 223
等)

如评论中所述,

struct
包可用于从原始
bytes
值中提取“可用”对象。例如,可以将这 12 个字节视为大端字节顺序中的 3 个无符号 4 字节字:

>>> import struct
>>> struct.unpack(">III", result)
(1749147393, 1011015425, 3104422409)

或 6 个无符号的 2 字节小字节序字:

>>> struct.unpack("<HHHHHH", result)
(16744, 479, 16956, 479, 2489, 2490)
© www.soinside.com 2019 - 2024. All rights reserved.