汇编编码 strdup。共享库中的malloc调用

Assembly coding strdup. Malloc calling in shared library

我有一个问题,我无法在调用 malloc 时编译我的 strdup。 当我不调用 malloc 时,它会完美地编译我的共享库,所以如果有人能帮助我,那就太好了!

这是我的代码:


BITS 64
DEFAULT REL
        global my_strdup:function
        extern malloc
my_strdup:

[...]

    call malloc

我用这个编译:

$> nasm -f elf64 my_strdup.S

$> gcc -shared -o libmy.so my_strdup.o

/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: my_strdup.o: 重定位 R_X86_64_PC32 针对未定义的符号 `malloc@@GLIBC_2.2.5' 做共享对象时不能用;使用 -fPIC 重新编译 /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld:最终 link 失败:错误值 collect2:错误:ld 返回了 1 个退出状态

我有这个错误。我不明白!我有一台 64 位计算机。 第一次尝试组装。

谢谢!

创建一个从另一个共享库调用函数的共享库对于第一个汇编程序来说可能不是最好的事情 ;)

话虽如此,nasm manual 对此有何评论:

Referring to a procedure name using wrt ..plt causes the linker to build a procedure linkage table entry for the symbol, and the reference gives the address of the PLT entry. You can only use this in contexts which would generate a PC-relative relocation normally (i.e. as the destination for CALL or JMP), since ELF contains no relocation type to refer to PLT entries absolutely.

所以,你需要的是call malloc wrt ..plt