【问题标题】:Position independent code in NASM (32bit)NASM 中的位置无关代码(32 位)
【发布时间】:2012-10-10 02:11:53
【问题描述】:

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

extern ExternSymbol

MyFunc:
    ...
    call ExternSymbol WRT ..plt

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

【问题讨论】:

  • 我认为这就是你所拥有的,我怀疑你实际上是在问如何将它与包含该符号的库链接在一起。为此,将您的 .asm 编译为您最喜欢的目标文件(例如,我认为这将是 -f win32),然后将其与 link.exe 或 ld 或其他链接。
  • 我找到了问题所在。我必须在 ebx 中准备一个指向 GOT 的指针。

标签: assembly x86 nasm


【解决方案1】:

你一定是做错了什么,因为它对我有用:

$ 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多