Pythonctypes.create_string_缓冲区问题

2024-05-20 14:17:12 发布

您现在位置:Python中文网/ 问答频道 /正文

kernel32.dll的ReadProcessMemory函数似乎正在返回Unicode。在

kernel32 = ctypes.windll.kernel32
PROCESS_QUERY_INFORMATION = 0x0400
PROCESS_VM_READ = 0x0010

pid = int(raw_input("Enter PID: "))
hproc = kernel32.OpenProcess(PROCESS_QUERY_INFORMATION |PROCESS_VM_READ, False, pid)
lpbaseaddr = 16799644
read_buff = ctypes.create_string_buffer(4)
bytread = ctypes.c_ulong(0)
kernel32.ReadProcessMemory(hproc, lpbaseaddr, read_buff,
                               4, ctypes.byref(bytread))
print read_buff.raw #i also tried read_buff.value

我知道那个地址的值是80,因为我用作弊引擎把它变成了80。print read_buff行返回 ^{Q。我一直在胡闹,unichr(80)返回P和{}返回{}。很明显,create_string_buff有问题。我应该使用字节缓冲区还是整数缓冲区?我应该怎么做?使用unichr()对一些值有效,但是如果地址值是800unichr(800)显然行不通。我正在寻找read_buff来返回50或{}或{}等


Tags: readrawinformationvmctypesqueryprocesspid
1条回答
网友
1楼 · 发布于 2024-05-20 14:17:12

它不返回Unicode,但四个字节作为一个字符串(可能是“\x80\x00\x00\x00”)传递一个指向整数而不是字符串缓冲区的指针:

read_buff = ctypes.c_uint()
kernel32.ReadProcessMemory(hproc, lpbaseaddr, ctypes.byref(read_buff),
                           ctypes.sizeof(read_buff), ctypes.byref(bytread))
print read_buff.value

相关问题 更多 >