<分区>
背景: 我们已经获得了在 Visual Studio 中构建 32 位 Windows 应用程序的软件产品。我们希望将此应用程序移植到 64 位。
此代码的一个关键任务组件是一个最初由第三方使用 gFortran 构建的黑盒静态库(.a 文件)。最初的开发人员已经去世,我们能够获得的 Fortran 源代码是不完整的,而不是构建该库的版本(并且包含已编译库中不存在的严重错误)。他们没有使用 VCS。
问题: 我想创建一个 64 位静态库,其代码在功能上等同于我们拥有的 32 位静态库。
我尝试过的:
- 使用 Snowman 反编译器获取 C++ 源代码以在 64 位中重新编译。这被证明是不可能的,因为生成的代码使用了似乎是特定于 gcc 的低级内部函数。它可能无论如何都行不通,因为此类内在函数将编译为在 64 位中功能不等效的代码。我可能需要更好的反编译器。
- 显然 x86 程序集是有效的 x86_64 程序集,所以我简要地研究了为什么我不能只通过 64 位汇编器运行程序集。事实证明 ABI 在 64 位中是不同的,所以调用约定不匹配。也许我可以手动将函数调用转换为正确的约定,并保持其余不变,但这可能是一个棘手的问题。意见?