jak to zrobić, wiem że trzeba użyć funkcji virtualalloc z page_execute_readwrite, chodzi o to że mam jakąś funkcję, dajmy na to
funk1()
{
MessageBox(0,"M","M",0);
}
i teraz potrzebuję ją zapisać tą funkcje w posatci BYTE cod[]={0x??,0x??,0x??.....}
potem ją załadować do pamięci i uruchomić, to jest kompilacja w czasie trwanai programu, najważniejsze to jak zrobić tą funkcje na postać BYTE cod[]={...} ?? żebym potem mógł sobie w programie naprzykład jakiś fragment kodu zaszyfrować, w odpowiednich warunkach odszyfrować załadować do pamięci i uruchomić ? znalazłem w necie naprzykłąd taki przykład :
execute a piece of code in the memory
To get started, look at VirtualAlloc( NULL, size, MEM_COMMIT,
PAGE_EXECUTE_READWRITE ) to get a pointer to a block of memory to which
you can write code, perhaps something like this - tested as OK:
int executeCode( BYTE *code, size_t codeSize, int arg )
{
void *codePage = VirtualAlloc( NULL, codeSize, MEM_COMMIT,
PAGE_EXECUTE_READWRITE );
memcpy( codePage, code, codeSize );
int (*funcPtr)(int) = (int (*)(int)) codePage;
int retVal = funcPtr( arg );
VirtualFree( codePage, 0, MEM_RELEASE );
return retVal;
}
And tested with:
// Assembler code for int foo( int x ) { return x * x; }
BYTE code[] = { 0x8b, 0x44, 0x24, 0x04, 0x0f, 0xaf, 0xc0, 0xc3 };
TRACE("Calculating f(42) = %d\n", executeCode( code, sizeof( code ), 42 ));
TRACE("Calculating f(-2) = %d\n", executeCode( code, sizeof( code ), -2 ));
i rzeczywiście on działa świetnie, ale jak to zrobić do inncyh funkcji ? skąd mam wziąć te opcody ? ten hex ? DIĘKUJE.