1
如何在32位x86彙編器中編寫的庫函數中簡單調用外部符號?這個工程下的x86-64(NASM):在NASM中位置獨立代碼(32位)
extern ExternSymbol
MyFunc:
...
call ExternSymbol WRT ..plt
編譯爲32位的x86相同的代碼跳轉到地址0x0。
如何在32位x86彙編器中編寫的庫函數中簡單調用外部符號?這個工程下的x86-64(NASM):在NASM中位置獨立代碼(32位)
extern ExternSymbol
MyFunc:
...
call ExternSymbol WRT ..plt
編譯爲32位的x86相同的代碼跳轉到地址0x0。
你必須做一些錯誤的,因爲它的工作對我來說是這樣的:
$ 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
我認爲這是相當多了,你有什麼就有什麼,我懷疑你實際上是在問如何將它連同該庫鏈接包含該符號。爲此,編譯你的.asm到你最喜歡的目標文件(我認爲這將是-f win32例如),然後將其鏈接到link.exe或ld或其他。 – Pyjong
我發現了這個問題。我必須在ebx中準備一個指向GOT的指針。 – LubosD