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

Ghidra能否重新编译运行其反编译输出的简短自包含函数?

问题解答
  • Ghidra 本身不支持直接对反编译输出的C代码进行重新编译,也没有内置的编译、运行测试的能力。它的定位是逆向工程分析工具,核心能力聚焦在二进制文件的反汇编、反编译、符号分析等方向,没有集成完整的C语言编译链。
  • 你需要自行使用gcc、clang等C语言编译器完成代码的编译、运行测试。

编译前的代码调整说明

你提供的反编译代码包含Ghidra自定义的类型标识,直接编译会报错,需要先做以下修改:

  1. 替换Ghidra自定义类型:undefined8 是Ghidra定义的8字节无类型占位符,该函数实际返回固定值0,可以替换为标准的int或者uint64_t;longlong替换为C标准的long long,uint替换为uint32_t保证跨平台兼容性。
  2. 补充必要的头文件,如需写测试入口还可以自行添加输入输出相关头文件。

调整后可直接编译的参考代码如下:

#include <stdint.h>
#include <stdio.h>
#include <string.h>

int FUN_140041010(char *param_1, long long param_2, uint32_t param_3)
{
  char *pcVar1;
  uint32_t uVar2;
  uint64_t uVar3;
  
  uVar3 = 0;
  if (param_3 != 0) {
    pcVar1 = param_1;
    do {
      if (pcVar1[param_2 - (long long)param_1] == '\0') {
        if ((uint32_t)uVar3 < param_3) {
          param_1[uVar3] = '\0';
          return 0;
        }
        break;
      }
      *pcVar1 = pcVar1[param_2 - (long long)param_1];
      uVar2 = (uint32_t)uVar3 + 1;
      uVar3 = (uint64_t)uVar2;
      pcVar1 = pcVar1 + 1;
    } while (uVar2 < param_3);
  }
  param_1[param_3 - 1] = '\0';
  return 0;
}

// 测试用入口示例,可自行修改参数验证运行逻辑
int main() {
    char test_buf[32] = "test sample string";
    FUN_140041010(test_buf, (long long)(test_buf + 5), 12);
    printf("运行结果:%s\n", test_buf);
    return 0;
}

将代码保存为.c文件后,使用gcc即可直接编译运行:
gcc test.c -o test && ./test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:15:07