如何从丢失的源代码中恢复?

时间:2009-03-09 15:33:26

标签: c++ dll linker

我有一个导出GetHash()的单功能DLL。但是,此DLL的源代码将丢失。我需要将此代码集成到我的MSVC ++项目中。

我知道有一些共享软件可以做到这一点,但我认为我可以手动完成。

我需要做什么才能手动完成此操作?

3 个答案:

答案 0 :(得分:2)

在您构建的项目中,引用dll并调用哈希函数。 在调试器中运行代码并单步执行并反汇编函数并将其转换回高级语言。

如果这还不够好,请将代码反汇编成一系列可以用ASM块实现的函数。

答案 1 :(得分:1)

你有DLL的LIB文件吗?一个H(eader)文件?两者都需要静态链接,这是最简单的方法。

否则,最简单的路线可能只是动态链接它。 (除非这是一个COM DLL - 你需要RegSvr32吗?如果是这样,你可以引用它并将其称为COM风格。)为了做到这一点,你使用LoadLibrary()和{{ 3}}()获取函数指针。事情变得棘手:函数使用什么调用约定,什么参数和返回类型?如果你有这些,你可以定义一个合适的函数指针类型(例如“int fphasher *(char *)”)。否则,准备好许多有趣的实验甚至反汇编列表以使事情正确......

GetProcAddress这样的DLL查看器可以帮助获取正确的函数名称,并获得一些提示,无论是使用C ++还是C样式的调用约定。警告:我没有测试过这个特定的版本。

答案 2 :(得分:1)

我认为另一种途径是反汇编DLL并恢复原始源代码。然后,您就可以将代码集成到代码库中并更好地进行管理。

这可能是解决这个问题的长期解决方案。