AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ASM zu binärcode bzw funktionierender exe?

Ein Thema von Memnarch · begonnen am 28. Jul 2011 · letzter Beitrag vom 29. Jul 2011
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#1

AW: ASM zu binärcode bzw funktionierender exe?

  Alt 28. Jul 2011, 18:52
Besonders blöde ist es ja, daß die Delphi-IDE quasi einen Binär-zu-ASM-Decoder integriert hat. (siehe CPU-Ansicht)

Würde BorCodeGero solche internen Sachen uch mal "öffentlich" zur Verfügung stellen, dann hätten sie gleich mal ganz "schöne" Komponenten/Codes im Delphi integriert, wofür man jetzt noch externe Bibliotheken nutzen muß. (obwohl eigentlich etwas vorhanden ist)

Und wenn diese ASM-Deklarationen in einer ordentlichen Weise veröffentlich wären, dann könnte man sie bestimmt auch ganz gut für den umgekehrten Weg (ASM-zu-Binär) nutzen.

Genauso schön wäre es schön, wenn der Codeparser (der vorm Compiler) öffentlich wäre, dann hätte man einen aktuellen Parser, welcher wirklich mal die aktuellen Delphicodes parsen könnte.
(gut für sehr kleine Script-Engines)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (28. Jul 2011 um 18:54 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: ASM zu binärcode bzw funktionierender exe?

  Alt 28. Jul 2011, 18:55
So gesehen könnte Embarcadero auch gleich noch den Source-Code des Compilers und der IDE dazupacken

Genauso schön wäre es schön, wenn der Codeparser (der vorm Compiler) öffentlich wäre, dann hätte man einen aktuellen Parser, welcher wirklich mal die aktuellen Delphicodes parsen könnte.
(gut für sehr kleine Script-Engines)
Anscheinend schaffen die das ja selbst nicht (siehe Error Insight).
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#3

AW: ASM zu binärcode bzw funktionierender exe?

  Alt 28. Jul 2011, 23:45
Es gibt auf der Seite verschiedene Referenzen, ich habe für meinen Brainfuck-JIT-Compiler diese verwendet: http://ref.x86asm.net/coder32.html
Herje ist das ein wust^^.

Schätze mal das aber zuersteinmal die implementierung der 1Byte opcodes reichen würde oder?

Mal abgesehen davon rätsel ich gerade an einigen stellen der tabelle rum.

Spalte "PO" ist klar, das ist der primary opcode, mnemonic der befehl als geschriebener Text, so und jetzt hänge ich bei den spalten op1, op2, op3, op4.
op = operand? Da bräuchte ich mal kurz nen anstubs. ich kenne nur

befehl a, b

wieso den jetzt bis op4?

und wenn ich das richtig sehe dient 0F dazu einen 2bytebefehl(0F als erstes byte) zu markieren?

MFG
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: ASM zu binärcode bzw funktionierender exe?

  Alt 29. Jul 2011, 00:46
Ja, opN steht für den N-ten Operanden. Ein Operand ist meistens entweder
  • ein Register (z.B. eAX, AL usw.)
  • eine direkt (=immediate) auf den OP-Code folgende Konstante im Code (imm8, imm16, imm32)
  • ein mod-R/M-Byte – eine auf konfuse Weise kodierte Kombination aus einem Register (r) und einer Adresse (m wie Memory) (in der Tabelle gekennzeichnet durch r/m8 , r16/32 , r/m16/32 etc.)
Die Sache mit dem mod-R/M-Byte zu verstehen, hat mich damals am meisten Zeit gekostet. Eine wirkliche Erklärung habe ich dazu nicht gefunden, aber immerhin diese Übersicht¹, und daraus habe ich es mir dann zusammengereimt. Oben steht das Ziel der Operation (immer Register), links die Quelle (Register, oder Adresse).

Wenn z.B. im Register EBX eine Speicher-Adresse steht, und du den an dieser Adresse stehenden Wert in das Register EAX kopieren willst (als Mnemonic: MOV EAX, [EBX] ²), so lautet der OP-Code dafür: 89 03 . Das erste Byte ist die Instruction MOV , das zweite Byte ist das mod-R/M-Byte für „EAX ← [EBX]“ (siehe Tabelle). MOV EAX, EBX (ohne eckige Klammern (!), also direkte Kopie des Register-Inhaltes) wäre hingegen 89 C3 .

¹ gerade jetzt sehe ich, dass das gleiche auch unten auf der anderen Seite steht...
² die eckigen Klammern sind bekanntlich der Dereferenzierungs-Operator, das Assembler-Äquivalent zu Wert^ in Delphi

Geändert von Namenloser (29. Jul 2011 um 17:23 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz