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

在aarch64架构上用gdb-multiarch调试x64程序时无法识别动态函数

ARM64机器调试X64程序时GDB/GEF功能异常的解决方法

1. 重新编译程序并添加调试符号

默认编译未生成调试符号,导致GDB无法解析函数名。重新编译时加入-g参数:

x86_64-linux-gnu-gcc -g -o main main.c

-g会生成完整调试信息,让GDB能将调用地址映射为printf等函数名。同时避免使用-static参数,静态编译不会生成GOT表,直接导致GEF的got命令失效。

2. 修正QEMU运行参数

启动QEMU时必须指定X64系统库路径,确保程序加载正确的x64 libc和动态链接器:

qemu-x86_64 -L /usr/x86_64-linux-gnu/ -g 1234 main

-L参数指定x64架构的系统根目录,让程序的动态链接过程正常完成,GOT表会被正确初始化,GEF才能识别到相关区域。

3. 配置GDB-multiarch的架构与符号路径

启动gdb-multiarch后,除了加载目标文件和连接远程调试,还需明确指定目标架构并设置libc符号搜索路径:

file main
set architecture i386:x86-64
set solib-search-path /usr/x86_64-linux-gnu/lib/
target remote localhost:1234
  • set architecture强制GDB以x64模式解析指令和符号,避免自动识别错误
  • set solib-search-path让GDB找到x64 libc的符号文件,完成printf等库函数的地址解析

4. 更新GEF到最新版本

旧版GEF对跨架构调试的支持可能存在缺陷,重新安装最新版GEF即可修复部分命令失效问题:可以通过官方提供的安装脚本重新安装,确保其适配x64-on-arm64的调试场景。

问题根源说明

  • 未添加调试符号:GDB无法将反汇编中的调用地址映射为具体函数名
  • QEMU未指定库路径:程序加载异常导致GOT表未初始化,GEF的got命令找不到有效数据
  • GDB架构识别错误:自动识别机制可能误判目标架构,影响符号解析和命令执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:33:30