/ / Posizione codice indipendente in NASM (32 bit) - assembly, x86, nasm

Posiziona codice indipendente in NASM (32 bit) - assembly, x86, nasm

Come posso semplicemente chiamare un simbolo esterno in una funzione di libreria scritta nell'assembler 32 bit x86? Funziona sotto x86-64 (NASM):

extern ExternSymbol

MyFunc:
...
call ExternSymbol WRT ..plt

Lo stesso codice compilato per 32 bit x86 salta all'indirizzo 0x0.

risposte:

2 per risposta № 1

Devi fare qualcosa di sbagliato, perché funziona per me in questo modo:

$ cat >libfoo.c
int foo() { return 42; }
$ gcc -m32 -shared -o libfoo.so libfoo.c
$ cat >main.asm
[bits 32]
extern foo
global _start
_start:
call foo wrt ..plt
mov ebx, eax
mov eax, 1
int 80h
$ nasm -f elf32 main.asm
$ gcc -nostdlib -m32 -L. -lfoo main.o
$ LD_LIBRARY_PATH=. ./a.out
$ echo $?
42