Related articles |
---|
[3 earlier articles] |
Re: Jit Implementation jgd@cix.compulink.co.uk (2010-03-20) |
Re: Jit Implementation anton@mips.complang.tuwien.ac.at (2010-03-21) |
Re: Jit Implementation gah@ugcs.caltech.edu (glen herrmannsfeldt) (2010-03-21) |
Re: Jit Implementation herron.philip@googlemail.com (Philip Herron) (2010-03-21) |
Re: Jit Implementation jthorn@astro.indiana-zebra.edu (Jonathan Thornburg \[remove -animal to reply\]) (2010-03-21) |
Re: Jit Implementation cr88192@hotmail.com (BGB / cr88192) (2010-03-21) |
Re: Jit Implementation herron.philip@googlemail.com (Philip Herron) (2010-03-21) |
Re: Jit Implementation barry.j.kelly@gmail.com (Barry Kelly) (2010-03-22) |
Re: Jit Implementation bartc@freeuk.com (bartc) (2010-03-23) |
Re: Jit Implementation bartc@freeuk.com (bartc) (2010-03-23) |
Re: Jit Implementation cr88192@hotmail.com (cr88192) (2010-03-23) |
Re: Jit Implementation cr88192@hotmail.com (BGB / cr88192) (2010-03-23) |
Re: Jit Implementation bartc@freeuk.com (bartc) (2010-03-24) |
[3 later articles] |
From: | Philip Herron <herron.philip@googlemail.com> |
Newsgroups: | comp.compilers |
Date: | Sun, 21 Mar 2010 22:34:21 +0000 |
Organization: | Compilers Central |
References: | 10-03-054 10-03-060 |
Keywords: | code |
Posted-Date: | 22 Mar 2010 21:04:15 EDT |
bartc wrote:
> #include <stdio.h> #include <stdlib.h>
>
> int main(void){
>
> char* program; int (*fnptr)(void); int a;
>
> program = malloc(1000); /* Space for the code */
>
> program[0] = 0xB8; /* mov eax,1234h */ program[1] =
> 0x34; program[2] = 0x12; program[3] = 0; program[4] = 0; program[5]
> = 0xC3; /* ret */
>
> fnptr = (int (*)(void)) program;
>
> a = fnptr(); /* call the code */
>
> printf("Result = %X\n",a); /* show result */ }
>
> (If this shows "1234", then you're past the main hurdle.)
Some many find this useful, to get this working on linux i had to do this:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/mman.h>
int main( int argc, char *argv[] )
{
int (*fnptr)(void); int retval= 0; size_t c_len= 1024;
char *c_buffer = mmap( NULL, c_len, PROT_EXEC | PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE , -1, 0 );
*(c_buffer) = 0xB8; /* mov eax,1234h */
*(c_buffer+1) = 0x34;
*(c_buffer+2) = 0x12;
*(c_buffer+3) = 0;
*(c_buffer+4) = 0;
*(c_buffer+5) = 0xC3; /* ret */
fnptr = (int (*)(void)) c_buffer;
retval = fnptr( ); /* call the code */
printf("Result = %X\n", retval ); /* show result */
munmap( c_buffer, c_len );
return 0;
}
Hope some may find it useful. Have you any good pointers to references
for the operand values for this instruction set? I guess its in the
intel manuals but which ones are most useful or relevant?
- --Phil
Return to the
comp.compilers page.
Search the
comp.compilers archives again.