comp.lang.ada
 help / color / mirror / Atom feed
From: Ikram <ikram@cs.und.ac.za>
Subject: Executing machine code?
Date: 1999/05/27
Date: 1999-05-27T00:00:00+00:00	[thread overview]
Message-ID: <86u2sya7od.fsf@finch.cs.und.ac.za> (raw)

I occasionally need to write programs that generate and execute
machine code (as in e.g. genetic programming systems).  in C, the
method I've been using is to store the machine instructions in an
array of bytes, and then cast the array into a function, e.g.:

  char code[MAX]; /* storage area for function's code. */
  code[0] = 0x55; /* code making up the function's preamble. */
  code[1] = ...
  ...
  code[x] = ... /* code making up the function's body. */
  code[x+1] = ...
  ...
  code[MAX-1] = 0xC3; /* return instruction. */
  
  /* now cast array pointer into a function pointer.  assume this 
     function takes one int argument and returns an int result, 
     using C parameter passing conventions. */
  f = (int (*)(int))code; 
  result = f(4); /* call the function. */

I'm trying to find out whether it is similarly possible to switch
between array and function representations in Ada (not necessarily in
a platform- or compiler-independent way).  or perhaps someone would
like to suggest an alternative means of executing machine code
generated on-the-fly from within Ada programs?  suggestions or
pointers to information would be welcome.

thanks,
Ikram
-- 
I. M. Ikram   <URL:http://www.cs.und.ac.za/~ikram/>   ikram@cs.und.ac.za




             reply	other threads:[~1999-05-27  0:00 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-05-27  0:00 Ikram [this message]
1999-05-27  0:00 ` Executing machine code? Samuel Mize
1999-05-28  0:00   ` Robert Dewar
1999-05-27  0:00 ` David Brown
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox