#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
int (*dyncode) (int);
unsigned char code [] = { 0x8b, 0x44, 0x24, 0x04, /* mov eax, [esp+4] */
0x40, /* inc eax */
0xc3 }; /* ret */
int main()
{
dyncode = (int (*)(int)) malloc(sizeof(code));
memcpy(dyncode, code, sizeof(code));
printf("retval = %d\n", (*dyncode)(41));
return 0;
}
Ovaj kod, preveden na windowsu 7, majkrosoftovim kompajlerom izvrši se bez problema i ispiše rezultat 42, dok isti ovaj kod peveden na ubuntu 10.10, gcc kompajlerom generiše segmentation fault prilikom izvršavanja. Dakle u windowsu je moguće poturiti dinamički kroz podatke neki kod koji može da se izvrši bez problema, dok je to u linuxu zabranjeno. Da li mislite da ovako nešto može da se zloupotrebi na neki način na windowsu, ovde je primer banalan, samo inkrementira tu vrednost koja se prosledi preko steka, ali da li bi ovako mogao da se poturi i neki maliciozan kod koji bi se bez problema izvršio?