Groeße einer Funktion/Endadresse
-
Hallo,
kennt wer eine Moeglichkeit, die Endadresse einer beliebigen Funktion zu ermitteln?
bsp:
void funktion(void) { ... } int main(void) { PROC anfang, ende; anfang=(PROC)funktion; ende=??? return(0); }
Ach ja Debugger sind ausgeschlossen
-
Da gibt's keine portable Lösung, bestenfalls irgendwelche Spielereien auf Byte-Ebene.
-
Also ein Loesungsansatz war:
[...] char *anfang; int i; anfang=(unsigned char *)funktion while(funnktion[i]!=0xffffffc3) //==asm retn { i++; } [...]
Aber da brauch mal nur mal Pech haben, dass dieser Wert zufaellig auftaucht.
-
dmesg schrieb:
Also ein Loesungsansatz war:
[...]Ja, sowas meinte ich mit Byte-Spielereien
Ich hätte vermutlich den Anfang der nachfolgenden Funktion als Orientierung genommen, aber dazu müsste man erstmal wissen, welche Funktion der Compiler/Linker direkt hinter der anvisierten Funktion unterbringt.
Aber da brauch mal nur mal Pech haben, dass dieser Wert zufaellig auftaucht.
Oder daß die Funktion mehrere return-Anweisungen hat.
Gegenfrage: Wozu brauchst du das?
-
Hab mal n Crackme geschrieben, dieses hat eine Funktion beim Start mehr oder weniger entschluesselt. Eigentlich wollte ich, dass das Programm sich die Adresen automatisch raussucht. Als mir keine Loesung einfiel hab ich dann die Adressen nachgeguckt und fest eingegeben. Allerdings blieb die frage trotzdem, ob und wie es geht, vllt brauch ich es eines Tages wieder und dann waere es gut zu wissen wie es geht ;).
-
CStoll schrieb:
... aber dazu müsste man erstmal wissen, welche Funktion der Compiler/Linker direkt hinter der anvisierten Funktion unterbringt.
Das wäre doch die Funktion mit der nächsthöheren Adresse ?