Som Robert forklarede var mit lille program ment som en joke, der viser hvordan man laver koden direkte i binær kode.
Måske er der nogen der er lidt i tvivl om hvad følgende linie gør:
int a = ((int (*)(int, int))f)(31, 11);
Det der sker er at man caster f til en funktions pointer af typen "int func(int, int)", og kalder denne funktion. Funktionen kaldes med 31 og 11 som argumenter og a sættes til at være retur værdien.
Dem der kende assembler på PC godt kan umiddelbart se at f (som jo var et array af int's) i virkeligheden var en funktion der returnerer summen af de to argumenter.
Og skulle nogen være i tvivl:
1: Ja, det virker med nogen C kompilere, jeg har testet med Borland og Cygwin-gcc
2: Nej, det er ikke et gyldigt ANSI-C program.
3: Nej, det er ikke noget jeg bruger ret tit.
Det gode ved den slags er at man kan lave ting som:
#include <stdio.h>
int main(void)
{
unsigned int f[] = {0x8BEC8B55, 0x45030845, 0x00C35D0C};
int a, b;
a = ((int (*)(int, int))f)(31, 11);
f[1] += 0x280000;
b = ((int (*)(int, int))f)(31, 11);
printf("%d %d\\n", a, b);
getchar();
return 0;;
}
Så mangler vi blot at finde ud af om man kan lave den slags i delphi ;-)