Domanda

sto usando NASM Assembler sotto linux quando uso il comando "nasm -f elf -l hello.lst hello.asm" funziona benissimo ma quando il collegamento con gcc "gcc -o ciao hello.o" esso genera un errore:

.

:( hello.asm testo + 0x4): trasferimento troncati per adattarsi: R_386_16 contro `.data' collect2: ld returned 1 exit status

Ho imparato che questo è un problema con gcc e 16-bit

eventuali soluzioni?

È stato utile?

Soluzione

Linux non ha nemmeno un sottosistema a 16 bit - anche se hai gcc collegarlo, ancora non poteva eseguirlo! Perché non basta usare .bits 32?

Altri suggerimenti

I affrontato la stessa situazione di qualche anno fa e di nuovo quest'anno.

Due modi per affrontare con esso sono:

  1. Scrivi la tua 16 bit linker amichevole (è necessario analizzare sezione .rel.text almeno).
  2. Usa un simbolo di base (o simboli) per calcolare gli indirizzi assoluti manualmente (sezioni .rel sono ancora creati, ma può essere rimosso). Tuttavia, questo metodo è molto soggetto ad errori.

Ho sempre finisce per fare 2, ma probabilmente dovrebbe trovare il tempo per scrivere un linker (o patch GNU ld ...).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top