26 lines
689 B
Raku
26 lines
689 B
Raku
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <sys/mman.h>
|
|
#include <string.h>
|
|
|
|
int test (int a, int b)
|
|
{
|
|
char code[] = {
|
|
0x90, 0x90, 0x6A, 0xC, 0xB8, 0x7, 0x0, 0x0, 0x0, 0x48, 0xC1, 0xE0, 0x20,
|
|
0x50, 0x8B, 0x44, 0x24, 0x4, 0x3, 0x44, 0x24, 0x8, 0x4C, 0x89, 0xE3, 0x89,
|
|
0xC3, 0x48, 0xC1, 0xE3, 0x4, 0x80, 0xCB, 0x2, 0x48, 0x83, 0xC4, 0x10, 0xC3
|
|
};
|
|
|
|
void *buf;
|
|
int c;
|
|
/* copy code to executable buffer */
|
|
buf = mmap (0,sizeof(code),PROT_READ|PROT_WRITE|PROT_EXEC,
|
|
MAP_PRIVATE|MAP_ANON,-1,0);
|
|
memcpy (buf, code, sizeof(code));
|
|
/* run code */
|
|
c = ((int (*) (int, int))buf)(a, b);
|
|
/* free buffer */
|
|
munmap (buf, sizeof(code));
|
|
return c;
|
|
}
|