2016-08-10 1 views
2

Ich habe versucht, Variablen in .text Segment mit z. file_handle: dd 0.Ist es möglich, schreibbare Variablen in. Text-Segment mit DB-Anweisung in NASM zu machen?

Wenn Sie jedoch versuchen, etwas in dieser Variablen wie mov [file_handle], eax zu speichern, wird ein Schreibfehler ausgegeben.

Ich weiß, ich könnte beschreibbare Variablen im Segment .data deklarieren, aber um den Code kompakter zu machen, möchte ich es wie oben versuchen.

Ist die einzige Möglichkeit, den Stapel zu verwenden, um diese Werte (z. B. das Dateihandle) zu speichern, oder könnte ich irgendwie in meine Variable oben schreiben?

Antwort

2

Sie können tatsächlich veranlassen, dass das Textsegment Ihres Windows-Prozesses zugeordnet wird, lesen + schreiben + ausführen, siehe @Kuba's answer. Dies ist möglicherweise auch unter Linux mit ELF-Binärdateien möglich. Ich denke, ELF hat ähnliche Flags für Segmente.

Ich denke, Sie könnten auch eine Windows-Funktion (VirtualProtect) aufrufen, um die Zuordnung Ihres Textsegments zu lesen + schreiben + ausführen innerhalb Ihres Prozesses zu ändern.


Insgesamt ist dieses klingt wie eine schreckliche Idee, und Sie sollten auf jeden Fall Provisorien halten auf dem Stapel wie ein C-Compiler würde, wenn Sie eine Datenseite vermeiden möchten mit.

Statischer Speicher für Dinge, die Sie nur in einem Teil des Programms verwenden, ist verschwenderisch.

1

Nein, es ist nicht möglich, beschreibbare "Variable" in .text Abschnitt eines Assembly-Programms zu haben.

Wenn Sie file_handle: dd 0 im Abschnitt .text schreiben und dann assemblieren, bezieht sich Ihr Etikett file_handle auf eine Adresse, die sich im Textteil Ihres Binärcodes befindet. Der Textabschnitt ist jedoch schreibgeschützt.

Wenn der Textabschnitt nicht nur schreibgeschützt ist, kann sich ein Programm während der Ausführung ändern.

4

Ausführbare Codesegmente sind standardmäßig nicht beschreibbar. Dies ist eine grundlegende Sicherheitsvorkehrung. Nein, das ist keine gute Idee. Aber wenn Sie darauf bestehen, da dies sowieso ein Spielzeugprojekt ist, gehen Sie voran.

Sie können Ihre schreibbar machen, indem Sie den Linker wissen lassen, dass er es so markiert, z. Geben Sie dem MS-Linker folgendes Argument:

link /SECTION:.text,EWR .... 
Verwandte Themen