Main-Und Funktion Adressen ausgeben



  • Hey folgendes Problem habe ich:
    ich möchte in meinem program ausgeben welche Adresse meine Main() sowie die Adressen die 2 Unterfunktionen bekommen haben ausgeben.

    Bsp ausgabe:

    main() ==> 0x.....
    findstring()==> 0x067262....
    memdump()==> 0x9dh33....

    ich habe bereits versucht das über printf auszugeben aber es kommen jedesmal Fehler und es erscheint mir sinnlos das so zu machen printf("%p", main(arg, argv); da man ja einen neuen Aufruf machen würde und es dan natürlich ne andere Adresse vergeben würde.

    also wie kann ich die Adressen der main und ihrer Unterfunktionen auslesen?



  • Informatiker im All schrieb:

    ich habe bereits versucht das über printf auszugeben aber es kommen jedesmal Fehler

    WAs hast du versucht, und welche Fehler kommen?

    Informatiker im All schrieb:

    und es erscheint mir sinnlos das so zu machen printf("%p", main(arg, argv); da man ja einen neuen Aufruf machen würde und es dan natürlich ne andere Adresse vergeben würde.

    So ist es.

    Informatiker im All schrieb:

    also wie kann ich die Adressen der main und ihrer Unterfunktionen auslesen?

    Hast du es schon mal mit Funktionszeiger probiert? Einfach nur über den Namen der Funktion.



  • DirkB schrieb:

    Informatiker im All schrieb:

    ich habe bereits versucht das über printf auszugeben aber es kommen jedesmal Fehler

    WAs hast du versucht, und welche Fehler kommen?

    Informatiker im All schrieb:

    und es erscheint mir sinnlos das so zu machen printf("%p", main(arg, argv); da man ja einen neuen Aufruf machen würde und es dan natürlich ne andere Adresse vergeben würde.

    So ist es.

    Informatiker im All schrieb:

    also wie kann ich die Adressen der main und ihrer Unterfunktionen auslesen?

    Hast du es schon mal mit Funktionszeiger probiert? Einfach nur über den Namen der Funktion.

    meinst du so ?

    printf("%p", *find());
    printf("%p", *main());
    printf("%p",*memdump());

    das funktioniert nicht da ich Argumente übergeben muss

    main.c:53:23: error: called object type 'int' is not a function or function pointer
    printf("%p", *find());

    main.c:54:24: error: too few arguments to function call, expected 2, have 0  
    printf("%p", *main());  
    ~~~~ ^  
    main.c:8:1: note: 'main' declared here  
    int main(int argc, char **argv){  
    ^  
    main.c:55:26: error: too few arguments to function call, expected 2, have 0  
    printf("%p",*memdump());

  • Mod

    Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.

    Was bedeutet ein * in C? Was bedeuten () in C?

    Und umgekehrt musst du auch genau lesen: Was bedeutet es wohl, wenn DirkB schreibt "Einfach nur über den Namen der Funktion"?



  • SeppJ schrieb:

    Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.

    Was bedeutet ein * in C? Was bedeuten () in C?

    Und umgekehrt musst du auch genau lesen: Was bedeutet es wohl, wenn DirkB schreibt "Einfach nur über den Namen der Funktion"?

    Danke hab die Lösung jetzt printf("%p", main); also einfach nur () zuviel


  • Mod

    Informatiker im All schrieb:

    Danke hab die Lösung jetzt printf("%p", main); also einfach nur () zuviel

    Das hast du nun durch Wissen oder durch Ausprobieren gefunden?

    Und den * erwähnst du gar nicht? Andauernd drückst du dich so ungenau aus, andauernd liest du Antworten nicht genau. Menschen vergeben solche Fehler, Computer nicht. Wenn du so schluderig programmierst, wie du dich hier präsentierst, dann ist klar, wieso so viele deiner Programme nicht funktionieren. Da mangelt es an der nötigen Einstellung. Siehe Zitat von oben: "Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt". Das war keine Übertreibung, sondern so ist es einfach. Herumprobieren, bis etwas funktioniert, ist keine Taktik die mittelfristig funktioniert.



  • Das ist UB weil die Konvertierung (implizit oder explizit) eines Funktionszeigers in einen Datenzeiger (wozu auch void* gehört) UB ist, falls main nicht gleich NULL ist (was auszuschließen ist).


Log in to reply