2012-10-19 56 views
1

如何在32位x86彙編器中編寫的庫函數中簡單調用外部符號?這個工程下的x86-64(NASM):在NASM中位置獨立代碼(32位)

extern ExternSymbol 

MyFunc: 
    ... 
    call ExternSymbol WRT ..plt 

編譯爲32位的x86相同的代碼跳轉到地址0x0。

+0

我認爲這是相當多了,你有什麼就有什麼,我懷疑你實際上是在問如何將它連同該庫鏈接包含該符號。爲此,編譯你的.asm到你最喜歡的目標文件(我認爲這將是-f win32例如),然後將其鏈接到link.exe或ld或其他。 – Pyjong

+0

我發現了這個問題。我必須在ebx中準備一個指向GOT的指針。 – LubosD

回答

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