Assembler in C++



  • Hallo,
    habe folgendes Problem.Habe einen einfachen Testcode Pointer gebastelt um ein paar sachen auszuprobieren.Der Code sieht wie folgt aus:

    #include <Windows.h>
    
    int main (int argc, char **argv)
    {
    
        BYTE code[2] = {0xCD, 0x0D};
    
        BYTE *i = code;
    
        _asm
        {
            mov eax,0x00401028
            call EAX
        }
    
    return 0;
    }
    

    Im BYTE Array ist im Prinzip nichts anderes als der Mnenomic für Int13 angegeben. Wenn ich nun mein Programm starte dann springt der Call EAX auch in meinen Array jedoch macht der nicchts anderes als das hier:

    mov         byte ptr [ebp-4],0CDh
    mov         byte ptr [ebp-3],0Dh
    

    Das ist ja natürlich nicht das was ich will!Hab es auch schon mit char versucht was allerdings auch nichts brachte.Wie kann ich mein Problem lösen?(Ich habe ja zuerst mal ganz trivial an das NoExcuteBit gedacht. Also das diie Ausführung von
    Speicherbereichen die Stings ect enthalten verboten ist.Kann das sein)



  • secondsun@gmx.de schrieb:

    Wie kann ich mein Problem lösen?

    Du musst EAX mit der Adresse von "code[2]" initialisieren. Probier mal :

    _asm {
       LEA  EAX,code
       CALL EAX
     }
    

    Viel Spass im Stack ! 🙂



  • nein,das bringt auch niichts:-( im array steht ja dann immer noch das selbe wie vorher auch...daran hatte ich nämlich auch schon gedacht.habe aber direkt den zeiger initialisiert und hab dann versucht über den zeiger drauf zuzgreifen..aber ist ja alles hubug denn dadurch ändert sich ja nicht die "struktur" im array:-(



  • Ach so, ich dachte Du wolltest nur den Code in "code[]" ausführen. Was soll sich denn an den Werten oder an der Initialisierung des Arrays ändern ?



  • secondsun@gmx.de schrieb:

    Im BYTE Array ist im Prinzip nichts anderes als der Mnenomic für Int13 angegeben.

    Dir ist bewusst, dass Du unter *Windows* arbeitest und nicht mehr unter DOS?



  • ja,dessen bin ich mir bewusst!!!ich hätte auch mov karlotto, hanswurst nehmen können...aber int war das was mit gerade einfiel:-)außerdem ist es schön kurz...ja,natürlich möchte ich den code in code[] ausführen...wenn ich das programm jjedoch im debug modus laufen lasse und jeden einzelen schritt verfolge dann sehe ich ja(in assedmbler) das in code[] NICHT int13 drin steht sondern das über den moc befehlt daten einfach nur abgespeichert werden


Anmelden zum Antworten