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

如何用nm工具从编译后的EXE中提取函数名(含NtRaiseHardError)

能否用nm工具从EXE中提取NtRaiseHardError函数名?

结论是取决于EXE的编译链接配置和符号表保留情况:

  • 如果编译时未剥离符号(比如Debug编译,或Release编译未启用符号剔除选项),且nm支持PE格式(Windows EXE的格式),就能提取到该函数名;
  • 如果是Release编译且已剥离符号,或者函数是动态链接的外部符号且符号表被优化掉,就无法通过nm获取。

具体操作方法

  1. 准备支持PE格式的nm工具:Windows原生没有nm,需要使用GNU binutils套件中的nm(比如MinGW、WSL中的binutils,或Git Bash自带的版本)。

  2. 基础提取命令:

    • 针对32位EXE:nm --target=pe-i386 your_program.exe
    • 针对64位EXE:nm --target=pe-x86-64 your_program.exe
      若nm能自动识别PE格式,可简化为:nm your_program.exe
  3. 精准过滤目标函数:
    直接过滤NtRaiseHardError,避免输出大量无关符号:

    nm your_program.exe | grep NtRaiseHardError
    

不同场景的输出说明

  • 若函数为静态链接且符号保留,输出会类似:00000000 T NtRaiseHardError(T表示该函数位于代码段,是已定义的符号)。
  • 若函数为动态链接(从ntdll.dll导入),输出会类似:U NtRaiseHardError(U表示该符号未在当前EXE中定义,是外部引用的导入函数)。
  • 若符号已被剥离,上述grep命令将无输出,此时nm整体输出也会几乎没有可识别的函数符号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:45:34