From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,1140c4e8eb3fd28f,start X-Google-Attributes: gid103376,public From: Ikram Subject: Executing machine code? Date: 1999/05/27 Message-ID: <86u2sya7od.fsf@finch.cs.und.ac.za>#1/1 X-Deja-AN: 482737265 Cache-Post-Path: Raven!unknown@finch.cs.und.ac.za Organization: University of Natal. http://www.und.ac.za X-Cache: nntpcache 2.3.2.1 (see http://www.nntpcache.org/) Newsgroups: comp.lang.ada Date: 1999-05-27T00:00:00+00:00 List-Id: 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 ikram@cs.und.ac.za