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

NASM中调用fopen后rax返回0的问题求助

解决NASM中fopen返回NULL的问题

可能的原因及排查步骤

  • 验证路径与权限
    先在终端执行ls /opt/P01_SH/_Test_Data/Random_int64_t.bin,确认文件真实存在且当前用户拥有读权限。Linux路径区分大小写,需检查路径中字母大小写、下划线、斜杠是否完全匹配。同时确保路径中所有父目录(如/opt/P01_SH/、/opt/P01_SH/_Test_Data/)对当前用户有执行权限(无执行权限则无法进入目录访问文件)。

  • 打印具体错误信息
    fopen返回NULL时会设置errno变量,可通过perror打印错误原因,修改代码如下:

    mov rdi, qsort_filename
    mov rsi, qsort_filemode
    call [rel fopen wrt ..got]
    cmp rax, 0
    jne open_done
    ; 输出文件打开失败的具体原因
    mov rdi, qsort_filename
    call [rel perror wrt ..got]
    open_done:
    

    运行程序后会得到明确错误提示(如Permission denied、No such file or directory),这是定位问题的关键。

  • 检查链接参数
    确保编译链接时正确关联libc库。NASM编译链接示例命令:

    nasm -f elf64 your_program.asm -o your_program.o
    ld your_program.o -o your_program -lc  # -lc 用于链接libc库
    

    若使用gcc链接会更简便:gcc your_program.o -o your_program,它会自动处理libc的链接逻辑。

  • 验证GOT调用正确性
    你使用的call [rel fopen wrt ..got]在ELF64模式下写法正确(结合rdi/rsi寄存器判断为64位环境)。可通过objdump -d your_program.o查看汇编代码,确认fopen的GOT引用是否正确生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:35:05