Assembly 汇编编码标准。Malloc在共享库中调用

Assembly 汇编编码标准。Malloc在共享库中调用,assembly,shared-libraries,nasm,x86-64,Assembly,Shared Libraries,Nasm,X86 64,我有一个问题,调用malloc时无法编译我的strdup。 当我不调用malloc时,它完美地编译了我的共享库,所以如果有人能帮助我,那就太好了 这是我的密码: 我用这个来编译: $>nasm-f elf64我的标准.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:remoca

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

这是我的密码:



我用这个来编译:

$>nasm-f elf64我的标准.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:remocation 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:最终链接失败:错误值 collect2:错误:ld返回了1个退出状态

我有这个错误。我不明白!我有一台64位的电脑。 这是我第一次尝试组装


谢谢

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

这就是说,以下是政府对此的看法:

使用wrt..plt引用过程名称会导致链接器 为符号构建过程链接表条目,并 参考给出了PLT条目的地址。您只能在以下情况下使用此选项: 通常会生成PC相对重定位的上下文(即。 作为CALL或JMP的目的地),因为ELF不包含重定位 键入以绝对参考PLT条目


所以,您需要的是
致电malloc wrt..plt

非常感谢!!很好用!
BITS 64
DEFAULT REL
        global my_strdup:function
        extern malloc
my_strdup:

[...]

    call malloc