Ghidra能否重新编译运行其反编译输出的简短自包含函数?
问题解答
- Ghidra 本身不支持直接对反编译输出的C代码进行重新编译,也没有内置的编译、运行测试的能力。它的定位是逆向工程分析工具,核心能力聚焦在二进制文件的反汇编、反编译、符号分析等方向,没有集成完整的C语言编译链。
- 你需要自行使用gcc、clang等C语言编译器完成代码的编译、运行测试。
编译前的代码调整说明
你提供的反编译代码包含Ghidra自定义的类型标识,直接编译会报错,需要先做以下修改:
- 替换Ghidra自定义类型:
undefined8是Ghidra定义的8字节无类型占位符,该函数实际返回固定值0,可以替换为标准的int或者uint64_t;longlong替换为C标准的long long,uint替换为uint32_t保证跨平台兼容性。 - 补充必要的头文件,如需写测试入口还可以自行添加输入输出相关头文件。
调整后可直接编译的参考代码如下:
#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
相关产品推荐
相关产品推荐

