So you want to generate the assembly in memory and then execute it? I think you want something like:
import array myCode = array.array('b', "\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x51\x68\x6c\x6c\x20\x20\x68\x33") buffer = myCode.buffer_info()[0] from ctypes import * my_callback = CFUNCTYPE(c_int) my_callback(buffer)() This creates an array from your code, and then gets the address of that array. Then it creates a callback type which just returns an int, and then it creates an instance of that callback type using the address of the code and calls that instance (which then causes an access violation when I run this). If you're on a machine w/ the NX bit you may need to call VirtualAlloc and copy the bytes to the allocated executable memory rather than using a buffer. From: users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Andrew Evans Sent: Wednesday, February 09, 2011 12:23 PM To: Discussion of IronPython Subject: Re: [IronPython] Cast to a method pointer using CTYPES Hey thank you for the fast reply :-) I am working on building a security framework in Python for exploit development as a part time hobby. But I am missing something key to what I am doing. I am having a hard time understanding it as well. from ctypes import * myCode = ("\x31\xc0\x31\xdb\x31\xc9\x31\xd2" "\x51\x68\x6c\x6c\x20\x20\x68\x33") #example hex not full for post don't want to put up red flags my_callback = CFUNCTYPE(c_int, c_void_p, POINTER(myCode), POINTER(c_int32), c_void_p) print type(my_callback) this returns <type '_ctypes.PyCFuncPtrType'> which is what I want I assume. but when I run this code nothing happens. Maybe in how I am running it just by adding my_callback to the source. Any idea what I am doing wrong. *cheers in advance if you can help If not I understand
_______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com