【发布时间】:2019-04-08 00:27:58
【问题描述】:
我实际上正在编写一个带有 cffi 模块的 python 程序来测试我的 C/ASM 库,并且我设法让它工作。但我不知道如何访问字符串中间的字符地址以将其传递给我的 lib 函数。例如:
def my_bzero_test():
str = b"hello world"
print(str)
lib.ft_bzero(str, 5)
print(str)
打印出来的:
b'你好世界'
b'\x00\x00\x00\x00\x00 世界'
但是我怎样才能测试类似的东西:
def my_bzero_test():
str = b"hello world"
print(str)
lib.ft_bzero(str + 5, 5) # C-style accessing &str[5]
print(str)
我尝试了不同的东西,例如:
def my_bzero_test():
str = ctypes.create_string_buffer(b"hello world")
addr = ctypes.addressof(str)
print(hex(addr))
print(str)
lib.ft_bzero(addr + 5, 5)
print(str)
输出:
TypeError: ctype 'void *' 的初始化器必须是 cdata 指针,而不是 int
也尝试了 id(),没有成功...
我对 python 不是很熟悉,但它似乎不是一个微不足道的利用,所以这里的帮助将不胜感激,谢谢!
Python 3.7.0
【问题讨论】:
-
不要编辑问题的答案;将其发布为答案。