Typekonvertierung ?


  • Mod

    Den shellcode an die adresse von func schreiben handelt es sich hier um eine Typkonvertierung im C style ???

    Jein. Es handelt sich um einen C Style Cast, aber es wird nichts an die Adresse von func geschrieben, sondern dem Zeiger func wird die Adresse von code zugewiesen.

    Variable neu Deklarieren und dadurch den Shellcode in den Speicher schreiben ??

    Nein. Es wird die Funktion an der Adresse func aufgerufen. Was der Shellcode ist.



  • OK thx erst mal für die Antworten aber eine Frage ist noch offen.

    Was bedeutet: Array-zu-Pointer-Decay

    Klar was ein Array und was Pointer sind weiss ich aber was bedeutet Decay ?

    Und ist das hier dann so richtig ? ( Ich will wissen ob ich es verstanden habe )

    func = (int (*) () )code; 
    
    /*/ int steht hier für den Datentyp in den die Funktion gecastet werden soll.
    (*) <-- Sagt das es sich bei der Funktion um eine Pointer Funktion handelt.
    
    ()  <--- Sagt einfach das man dem Zeiger von func die Adresse von code zuweist.
    
    code; <--- Welcher wert soll dem Pointer zugewiesen werden
    

    :xmas1: :xmas2:


  • Mod

    con_typ schrieb:

    Was bedeutet: Array-zu-Pointer-Decay

    Das heißt, wenn man ein Array an irgendetwas (zum Beispiel eine Funktion) übergibt, dann wird nicht das Array übergeben, sondern ein Pointer auf das erste Element des Arrays. Ist eine grundlegende Eigenschaft der Sprache C, die unter anfängern sehr viel Verwirrung stiftet. Deshalb werden Arrays in C++ auch gerne mal in Klassen geschachtelt, damit das nicht passiert.

    Deine Interpretaion des Codestücks ist ziemlich falsch:

    func = (int (*) () )code;
    

    Alles in den Klammern ist der Typ auf den gecastet werden soll:

    int (*) ()
    

    Das ist ein Zeiger auf eine Funktion ohne Argumente, die einen int zurückgibt. Klingt komplex, ist es auch. Wenn du das wirklich verstehen willst, solltest du dich mal mit Funktionszeigern beschäftigen.

    Das rechts von den Klammern ist dann das, was gecastet werden soll, hier das Array 'code', welches aber wie oben gesagt als ein Pointer auf sein erstes Element an die Castfunktion übergeben wird. Es wird also ein Pointer auf char in einen Pointer auf eine Funkton umgewandelt.



  • Kennst du zufällig eine gute Seite wo man sich darüber einlesen kann ?

    Ein paar Sachen habe ich heute schon darüber gelesen.

    Aber so etwas habe ich keinem Tutorial so etwas gefunden.: func = (int (*) () )code;

    Solche Sachen hab ich z.b. schon verstanden aber das Hilft mir hier nicht wirklich weiter 😞 :

    #include <iostream>
    using namespace std;
    
    int (*ptr)(int var2);
    int func(int var1);
    
    int main ()
    {
    
    int zahl = 30;
       ptr = func;   
    
      (*ptr)(zahl);
    
       zahl = 40;  
    
       (*ptr)(zahl); 
    
    system("PAUSE");
    }
    
    int func(int var1)
    {
       cout << "Ausgabe: " << var1 << endl;
    }
    
    #include <iostream>
    using namespace std;
    
    int *ptr(int var);    
    
    int main ()
    {
    
    int var;
    
    var = *ptr(20);  
    
    cout << var;    
    
    system("PAUSE");
    }
    
    int *ptr(int var)
    {
    
    return &var;
    }
    


  • Kann mir den keiner sagen wo ich mich da einlesen kann ? 😞





  • Google doch einfach mal!

    http://www.newty.de/fpt/index.html



  • Das hab ich auch letzdens schon mal gefunden aber da steht nicht was ich suche. 😞



  • Und wir wissen nicht, was du suchst. Deinen präzise gestellten Fragen wurde präzise geantwortet.



  • return ((int(*)()) "\x31\xc0\xbb\x42\x24\x80\x7c\x66\xb8\x88\x13\x50\xff\xd3")();
    

    ?



  • So langsam verstehe ich glaub ich wie das funktioniert.

    Zeigt der Pointer auf die Adresse vom Shellcode muss ja eigentlich oder ?



  • Weiss das denn keiner ? 😞



  • con_typ schrieb:

    Zeigt der Pointer auf die Adresse vom Shellcode muss ja eigentlich oder ?

    Du musst ja wissen, wo der Shellcode liegt, wenn du ihn ausführen willst. Also ja.



  • Ok ty dann habe ich es jetzt verstande. 🙂


Anmelden zum Antworten