Wert an Addresse im Datensegment setzen



  • moin, wie kann ich in MASM eine 32 bit Variable an eine bestimmte Addresse im Daten Segment setzen? Mov DWORD PTR [0x00193833], wert geht nicht. Wie macht man das?



  • "Umweg" über ein Register, z.B.:

    mov eax, wert
     mov dword ptr [0x00193833], eax
    


  • [quote="ganzschnell

    mov eax, wert
     mov dword ptr [0x00193833], eax
    

    [/quote]

    direkte Adressierung ist in masm nicht erlaubt!
    -->

    mov edx, wert
     mov eax,0193833h
     mov dword ptr [eax],edx
    

    [/



  • (m)asm schrieb:

    direkte Adressierung ist in masm nicht erlaubt!

    Ist das echt so? Ein Hammer, oder...



  • Dann eben so:

    xor eax, eax
     mov edx, wert
     mov dword ptr [eax+0193833h], edx
    


  • ganzmüde schrieb:

    Dann eben so:

    xor eax, eax
     mov edx, wert
     mov dword ptr [eax+0193833h], edx
    

    Oder eben so:

    movl %eax, 0x00193833
    

    In GNU Assembler :p



  • *intastaturbeiss* 🙄
    Ohje. Wie gut, dass die meisten Beteiligten hier bis auf ihre nur fuer den Betreiber und uns "Hausmeister" sichtbaren IPs komplett anonym sind.

    Ich war zwar schon immer der Ansicht, dass MASM Muell ist, aber so weit ab vom Schuss, dass er grundlegende x86-Funktionen nicht unterstuetzt, ist er dann AFAIK nun auch wieder nicht.
    Ich kann zwar auch nicht sagen, warum der Code des OP nicht funktioniert, aber an den hier genannten Gruenden kann es im Prinzip nicht liegen und die gebrachten Vorschlaege sind daher auch wenig hilfreich. Und du, abc.w: FAIL! Lies nochmal die Problemstellung. :p



  • Ich Versteh die Reaktionen hier nicht - hab ich was Falsches gesagt? Masm erlaubt es nicht die Speicheradressen "von Hand" zu spezifizieren. Wenn man es unbedingt braucht, kann man den Befehl von Hand codieren, oder sich eine macro schreiben (bei mov m32,r32 wirklich kein Aufwand). Unabhängig davon fällt mir kein Sinnvoller (legaler) Einsatz für so etwas ein.

    grüße (m)asm



  • Nobuo T schrieb:

    Und du, abc.w: FAIL! Lies nochmal die Problemstellung. :p

    Ach, was soll's, bin ein bisschen, aber nur ein bisschen, aus der Spur geraten 😉

    (m)asm schrieb:

    ...Unabhängig davon fällt mir kein Sinnvoller (legaler) Einsatz für so etwas ein.

    Das ist wohl wahr... Wer würde schon in seinem Programm mit direkten Adressen freiwillig arbeiten (wollen). In GNU Assembler Programmen kann man auf diese Weise schöne Bugs (meistens immer reproduzierbar, weil "segmentation falt") einbauen und sich wundern, warum das Programm abstürzt, z.B. möchte man ein Register mit einer Konstante 0x10 laden und vertippt sich dabei:

    movl 0x10, %eax    # Falsch, verursacht "segmentation falt", weil Zugriff auf die Adresse 0x10
    

    statt:

    movl $0x10, %eax    # Richtig, lädt Konstante 0x10 ins CPU Register EAX
    

    Daher hat es schon seine Richtigkeit, warum MASM es nicht unterstützt...


Anmelden zum Antworten