Thanks a bunch will continue looking :-)
On Thu, Feb 10, 2011 at 8:24 AM, Curt Hagenlocher <c...@hagenlocher.org>wrote: > Strange that a search would find nothing. Try searching for VirtualProtect > instead -- that's what you'd need to mark a block of memory as executable, > and you'd use it in conjunction with VirtualAlloc. > On Thu, Feb 10, 2011 at 8:17 AM, Andrew Evans <evans.d.and...@gmail.com>wrote: > >> Mind showing showing me an example of using VirtualAlloc? >> >> Thanks for your help >> >> Quick Google Search reveals nothing Nothing to me on VirtualAlloc >> >> *cheers >> >> >> >> On Wed, Feb 9, 2011 at 12:37 PM, Dino Viehland <di...@microsoft.com>wrote: >> >>> 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 >>> >>> >> >> _______________________________________________ >> Users mailing list >> Users@lists.ironpython.com >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com >> >> > > _______________________________________________ > Users mailing list > Users@lists.ironpython.com > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > >
_______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com