首页 文章

汇编编码strdup . Malloc在共享库中调用

提问于
浏览
2

我有一个问题,我在调用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重新编译:最终链接失败:错误值collect2:错误:ld返回1退出状态

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

谢谢 !

1 回答

  • 1

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

    也就是说,这是nasm manual对此有何评论:

    使用wrt ..plt引用过程名称会导致链接器为符号构建过程链接表条目,并且引用给出PLT条目的地址 . 您只能在通常会生成PC相对重定位的上下文中使用它(即作为CALL或JMP的目标),因为ELF不包含重定位类型以绝对引用PLT条目 .

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

相关问题