首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用ctype在python中创建int缓冲区

如何使用ctype在python中创建int缓冲区
EN

Stack Overflow用户
提问于 2019-06-10 04:49:11
回答 1查看 1.6K关注 0票数 1

我正在尝试用python写内存。我需要写一个整数,但是对于WriteProcessMemory函数,我需要一个缓冲区。

代码语言:javascript
复制
writeProcessMemory = kernel.WriteProcessMemory
writeProcessMemory.argtypes = [ctypes.wintypes.HANDLE, 
ctypes.wintypes.LPVOID, ctypes.wintypes.LPCVOID, ctypes.c_size_t, 
                         ctypes.POINTER(ctypes.c_size_t)]
writeProcessMemory.restype = ctypes.wintypes.BOOL


openProcess = kernel.OpenProcess
openProcess.argtypes = [ctypes.wintypes.DWORD, ctypes.wintypes.BOOL, 
ctypes.wintypes.DWORD]
openProcess.restype = ctypes.wintypes.HANDLE

handle = openProcess(PROCESS_ALL_ACCESS, False, pid)
addr = 0x024EA498
data = ctypes.c_int(1000)
buffer = #i need to create a buffer here
EN

回答 1

Stack Overflow用户

发布于 2019-06-10 05:12:26

您可以使用create_string_buffer

代码语言:javascript
复制
buffer = ctypes.create_string_buffer(b"",1000 * 4)

创建一个包含1000个4大小整数的0填充缓冲区。此缓冲区的类型为ctypes.c_char_Array_4000,可以将其作为指针传递给导入的函数。

此函数创建一个可变字符缓冲区。返回的对象是c_char的ctypes数组。

init_or_size必须是指定数组大小的整数,或将用于初始化数组项的字节对象。

如果字节对象被指定为第一个参数,则使缓冲区比其长度大一项,以便数组中的最后一个元素是NUL终止字符。整数可以作为第二个参数传递,如果不应该使用字节的长度,则允许指定数组的大小。

现在调用您导入的函数,并使用以下命令获取刚刚编写的python bytes对象:

代码语言:javascript
复制
python_bytes_array = ctypes.string_at(buffer)

注意:ctypes.string_at(address, size=-1)如果指定了size,则将其用作size,否则字符串将被假定为零终止。ctypes docs

并使用struct获取整数值。不需要指定字节顺序。I是4个字节。如果被调用的函数使用4字节整数,那么它将会起作用:

代码语言:javascript
复制
import struct
integer_tuple = struct.unpack("1000I",python_bytes_array)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56518278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档