You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GCC编译时如何链接汇编目标文件中的malloc函数

问题原因

当前绝大多数Linux发行版的GCC默认开启PIE(位置无关可执行文件)编译,你手写的汇编代码中call malloc使用的32位相对偏移重定位类型,不兼容PIE的链接要求,因此触发重定位报错。


可行解决方案

方案1(推荐):修改汇编适配默认PIE编译

x86_64架构下调用动态库函数需要通过PLT(过程链接表)调用,只需要把汇编里的call malloc改为call malloc@plt即可,修改后的汇编代码如下:

global test
extern malloc
section .text

test:
    mov rdi, 40
    call malloc@plt
    ret

修改后用原有命令即可正常编译:

nasm -f elf64 test.asm
g++ test.o test.cpp

该方案保留了系统默认开启的PIE安全特性,程序安全等级更高。


方案2:不修改汇编,编译时关闭PIE

如果不想改动汇编代码,可以在g++链接阶段添加-no-pie参数关闭位置无关可执行文件生成,编译命令改为:

nasm -f elf64 test.asm
g++ -no-pie test.o test.cpp

内容的提问来源于stack exchange,提问作者Ari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:57:03