NASM中的位置无关代码(32位)

时间:2012-10-19 12:49:27

标签: assembly x86 nasm

如何在用32位x86汇编程序编写的库函数中调用外部符号?这适用于x86-64(NASM):

extern ExternSymbol

MyFunc:
    ...
    call ExternSymbol WRT ..plt

为32位x86编译的相同代码跳转到地址0x0。

1 个答案:

答案 0 :(得分:2)

你必须做错事,因为它对我有用:

$ 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