Autor Thema: FASM-Portierung  (Gelesen 7355 mal)

micha

  • Beiträge: 141
    • Profil anzeigen
Gespeichert
« am: 27. August 2013, 17:19 »
Moin.
ich bin grad dabei, fasm zu portieren. An sich läuft das ganze schon, aber ich hab da ein paar kleine probleme, die vielleicht durch den screenshot ganz deutlich werden.
Nach dem er den Versionsstring ausgegeben hat, assembliert er und gibt dann die etwas komische ausgabe. Zwischen jedem Buchstaben stehen noch andere Zeichen (unter anderem der dateiname). Wo die herkommen würde ich gern wissen. Wenn ich aber die eigentlichen Buchstaben entziffere, dann steht da folgendes:
3 passes, 157 bytes.Also das gleiche ergebnis wie unter Linux.

Zweites Problem: die neue-programm datei wird korrekt angelegt und beschrieben. (siehe den cat aufruf). Aber wenn ich versuche, hello auszuführen, hat es angeblich nicht die richtige magic.

 :?

Der code ist auf https://github.com/michamimosa/FruityOrange zu finden.
Ich hoffe, dass mir jemand da auf die sprünge helfen kann.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 27. August 2013, 21:28 »
Zwischen jedem Buchstaben stehen noch andere Zeichen (unter anderem der dateiname).

Wenn ich raten soll, dann liegt es daran, dass du in syscall_wrappers.c, Zeile 134 für die Deskriptoren 0-2 printf verwendest und die Länge ignorierst: Möglicherweise nutzt FASM den Syscall für jeden Buchstaben einzeln und hinter dem Puffer, in dem die Buchstaben stehen, steht hello.

Zweites Problem: die neue-programm datei wird korrekt angelegt und beschrieben. (siehe den cat aufruf). Aber wenn ich versuche, hello auszuführen, hat es angeblich nicht die richtige magic.

Ich hab keine Idee, was die Ursache sein könnte, aber deine Ausgabe in elf32.c, Zeile 65 liest den Header um 1 Byte verschoben aus. Es ist erstmal sehr unelegant einfach die Variable header zu dereferenzieren, weil das eine Kopie davon auf dem Stack anlegt. Vielleicht kann dein printf damit nicht umgehen. Du solltest die ersten vier Bytes im ident-Feld einmal einzeln ausgeben, um das zu prüfen. Wenn auch diese Ausgabe den Header um 1 verschoben ausgibt, dann solltest du bei deinen Ladefunktionen weiterforschen, wo da eine 1 addiert werden könnte. Ich habe auf die Schnelle nichts gefunden, aber mit gezielten Debugausgaben könntest du da vielleicht vorankommen.
Dieser Text wird unter jedem Beitrag angezeigt.

micha

  • Beiträge: 141
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 28. August 2013, 16:25 »
ok danke, die probleme sind erstmal gelöst.
aber noch eine frage: wie kann ich im fasm code den entrypoint verstellen?

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 28. August 2013, 18:05 »
Ich bin mir nicht sicher was ein Entrypoint ist, aber
im normalen Assembler könnte man am Anfang einfach einen
jump zu einer anderen Stelle machen, würde ich aber nicht Empfehlen, da es
bei mir in einen Spaghetti Code geendet ist.
Aber das wäre dann eine Vermutung.

micha

  • Beiträge: 141
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 28. August 2013, 19:07 »
Nein mit dem entrypoint meine ich die adresse, an die das programm gelinkt wird.
http://de.wikipedia.org/wiki/Einsprungspunkt

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 28. August 2013, 22:28 »
FASM beherrscht die org-Direktive.
Oder meinst du etwas anderes?

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 29. August 2013, 12:23 »
Vermutlich meint er die entry-Direktive.
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

micha

  • Beiträge: 141
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 29. August 2013, 14:53 »
hat sich alles geklärt. danke

 

Einloggen