Frage

Ich bin mit NASM Assembler unter Linux wenn ich den Befehl "nasm -f elf -l hello.lst hello.asm" es funktioniert gut aber bei der Verknüpfung mit gcc „gcc -o hallo hello.o“ es erzeugt einen Fehler:

.

hello.asm :( text + 0x4): Verlagerung abgeschnitten zu passen: R_386_16 gegen `.data‘ collect2: ld returned 1 exit status

Ich habe gelernt, dass dies ein Problem mit gcc und 16-Bit

irgendwelche Lösungen?

War es hilfreich?

Lösung

Linux hat noch nicht einmal eine 16-Bit-Subsystem - auch wenn Sie gcc bekam es zu verknüpfen, können Sie immer noch nicht ausführen kann! Warum gehst du nicht einfach .bits 32 verwenden?

Andere Tipps

stand ich die gleiche Situation vor ein paar Jahren und auch in diesem Jahr.

Zwei Möglichkeiten, damit umzugehen, sind:

  1. Schreiben Sie Ihre eigenen 16-Bit-freundlichen Linker (Sie .rel.text Abschnitt zumindest analysieren müssen).
  2. Verwenden einer Basissymbol (oder Symbole) die absoluten Adressen manuell zu berechnen (die .rel Abschnitte noch geschaffen, sondern können entfernt werden). Allerdings ist diese Methode sehr fehleranfällig.

ich immer 2 am Ende tut, aber ich sollte wohl Zeit machen einen Linker zu schreiben (oder das Patchen GNU ld ...).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top