1

32ビットx86アセンブラで記述されたライブラリ関数で外部シンボルを簡単に呼び出すにはどうすればよいですか?これはx86-64(NASM)で機能します。

extern ExternSymbol

MyFunc:
    ...
    call ExternSymbol WRT ..plt

32ビットx86用にコンパイルされた同じコードは、アドレス0x0にジャンプします。

4

1 に答える 1

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
于 2012-10-20T22:25:16.950 に答える