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

如何在GDB中查看或列出被__stdcall修饰的C函数

定位GDB中__stdcall修饰的foo函数

问题原因

__stdcall调用约定下,MinGW GCC会对函数名进行命名修饰:C语言函数会被处理为_函数名@参数总字节数的格式。你在info function中看到的foo@4是简化显示,实际符号表中的完整名称是_foo@4,直接用foo操作会找不到对应符号。

解决方法

1. 使用完整修饰符号名直接操作

在GDB中直接使用带下划线的完整符号名执行命令:

  • 打印函数地址:
    print &_foo@4
    
  • 反汇编函数代码:
    disassemble _foo@4
    
  • 查看函数对应源码:
    list _foo@4
    
  • 设置断点:
    break _foo@4
    

2. 通过调用处跳转定位

如果记不住完整符号名,可以通过main函数中的调用位置进入目标函数:

  1. 在main函数的foo(42)行设置断点并启动程序:
    break main
    run
    
  2. 执行单步进入命令跳转到foo函数:
    stepi  # 或简写si
    
  3. 此时已进入foo函数上下文,直接用list查看源码,或用info frame查看当前函数的符号信息。

3. 确认实际符号名(可选)

如果不确定修饰后的符号名,可在GDB中执行以下命令查看:

info symbols foo

该命令会输出符号表中与foo相关的完整符号名称,示例输出:

_foo@4 in section .text of stdcall

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:12:18