Assembler per Hand



  • Hy
    ich hatte die Idee ein Assemblerprogramm mal per Hand zu übersetzen, was auch nicht das große Problem ist. Meine Frage ist wie schaffe ich es das dieses Programm virtuell wird?
    Danke für Antworten



  • k1994 schrieb:

    ... Meine Frage ist wie schaffe ich es das dieses Programm virtuell wird?

    Du verwechselst was gewaltig...



  • wie ich verwechsel was gewaltig? meine frage ist wie mein handgeschriebenes und von hand übersetztes programm als x belibige datei auf meinen Computer gelangt und das so das der computer dieses programm ausführen kann.



  • Nen Hex Editor würde sich da anbieten. Damit kannst du gezielt binär eine Datei beschreiben. Das wird aber sehr mühselig, da du neben dem Maschienencode auch das ganze Drumherum für das Executable Format (z.B. Portable Executable unter Windows) schreiben musst.



  • das mit dem hex-editor ist gut thx
    ich wollt aber mein programm direkt in den speicher schreiben
    und dann sozusagen zur startadresse springen.
    ist das unter windows überhaupt möglich.
    wenn ich ein programm was das übernimmt schreiben muss hab ich ja sozusagen
    mir einen interpreter gebaut 😕 👍



  • Eigentlich sollte es nicht klappen nach dem Programmstart noch Code nachzuladen. Zum einen ist der Speicherbereich in dem der Code liegt read only, und das NX-Bit (falls vom Prozessor unterstützt) verhindert das Code an anderen Speicherbereichen ausgeführt werden kann. Allerdings gibt es Gegenbeispiele wie das Ausführen von Schadcode durch Bufferoverflow und Executable Packer. Könnte also gut sein das es da eine Möglichkeit gibt um z.B. das NX-Bit irgendwo zu entfernen.

    Ein Programm das Maschienencode in den Speicher läd und dann dort hin springt ist etwas anderes als ein Interpreter. Beim Interpreter übernimmt die Sofware das Einlesen und Auswerten (zusammen das Interpretieren) der Befehle.



  • @Tobiking2: natürlich kann man Programmcode nachladen bzw. auch zur Laufzeit neuen erzeugen oder alten abändern.
    Man muss nur die Speicherseiten entsprechend "umwidmen".

    AFAIK ist da VirtualProtect gefragt.
    http://msdn.microsoft.com/en-us/library/aa366898(VS.85).aspx



  • hustbaer schrieb:

    AFAIK ist da VirtualProtect gefragt

    ... oder den Speicher gleich entsprechend mit VirtualAlloc allozieren.
    Des weiteren bietet es sich an, die benötigten section-Attribute beim Linken anzugeben.



  • Solange du unter Win32 schreibst, kannst du den Code in einen Hexeditor tippen und die Datei mit dem .com Ende bestücken, also

    b409ba0901cd21cd20444f532d696d205669727475616c2d4d6f64653a2924 in den Hexeditor eingeben und nenne sie z.B. vtest.com. Du must nur drauf achten, dass die Adressen passen, also der Zeiger im Dx-Register auf wirklich auf den Textanfang zeigt.


Anmelden zum Antworten