Interconvert a ctypes.Structure to/from a binary string?
Andrew P. Lentvorski, Jr.
bsdder at gmail.com
Sat Aug 2 19:20:02 EDT 2008
On Aug 1, 11:35 pm, Andrew Lentvorski <bs... at allcaps.org> wrote:
> Basically, I'd like to use the ctypes module as a much more descriptive
> "struct" module.
>
> Is there a way to take a ctypes.Structure-based class and convert it
> to/from a binary string?
>
> Thanks,
> -a
After chugging through the ctypes source code, I found that I can
abuse ctypes into doing what I want.
Here is how I did it. I can abuse
string_at(addressof(SomeCtypesClass), length) to get a binary string
out of ctypes while I use:
def analyze_elf_header(binaryData):
headerSize = ctypes.sizeof(Elf32_Ehdr)
header = Elf32_Ehdr()
# Abuse ctypes to initialize from a string
bb = ctypes.create_string_buffer(binaryData[0:headerSize])
ctypes.memmove(ctypes.addressof(header), ctypes.addressof(bb),
headerSize)
To jam stuff into a ctypes class. This seems like an oversight in the
module though. It would really be better if the class itself had
methods to init from/produce to a binary string.
However, I would prefer that somebody who actually knows ctypes to
weigh in here with comments about what I did.
Thanks,
-a
More information about the Python-list
mailing list