Thank you very much everyone!
Looking at envy has been very helpful.


> On Aug 22, 2015, at 4:08 AM, Jan Wedekind <j...@wedesoft.de> wrote:
> 
> Executing machine code basically just requires a call to mmap to make the 
> data executable. The calling code can be generated on the fly using ffi:
> http://github.com/wedesoft/aiscm
> 
>> On August 22, 2015 12:31:56 AM GMT+01:00, Elzair 
>> <elzairthesorce...@gmail.com> wrote:
>> The other day I came across a page on Rosetta Code showing how to
>> directly execute x86 instructions across several languages:
>> http://rosettacode.org/wiki/Machine_code
>> 
>> For example, here is the code for Racket.
>> #lang racket/base
>> 
>> (require ffi/unsafe)
>> 
>> ; set up access to racket internals
>> (define scheme-malloc-code
>> (get-ffi-obj 'scheme_malloc_code #f (_fun (len : _intptr) ->
>> _pointer)))
>> (define scheme-free-code
>> (get-ffi-obj 'scheme_free_code #f (_fun _pointer -> _void)))
>> 
>> (define opcodes '(139 68 36 4 3 68 36 8 195))
>> 
>> (define code (scheme-malloc-code 64))
>> 
>> (for ([byte opcodes]
>> [i (in-naturals)])
>> (ptr-set! code _ubyte i byte))
>> 
>> (define function (cast code _pointer (_fun _ubyte _ubyte -> _ubyte)))
>> 
>> (function 7 12)
>> 
>> (scheme-free-code code)
>> 
>> Is this possible in Guile (with, say, the FFI)?
> 
> -- 
> Jan Wedekind
> http://www.wedesoft.de/

Reply via email to