已编译COBOL程序--缺少源代码

已编译COBOL程序--缺少源代码,cobol,Cobol,我们有一个非常重要的应用程序,但到目前为止还没有源代码。应用程序是用COBOL编写的,我们的生产系统中有一个编译版本,并且正在运行 但是,我们需要迁移到新的服务器和新的cobol编译器。我们的印象是,我们需要重新编译代码以使其在新服务器上工作。运行现有编译程序时出现运行时内存错误 我们有一些源代码的程序,但它是旧的。不确定它与已编译程序之间的差异是什么 好吧,问题是,我们该怎么办 时间不在我们这边,因为我们必须把我们的旧服务器送回去以获得它的信誉。想法,建议,疯狂还是其他?(源代码管理是显而易见

我们有一个非常重要的应用程序,但到目前为止还没有源代码。应用程序是用COBOL编写的,我们的生产系统中有一个编译版本,并且正在运行

但是,我们需要迁移到新的服务器和新的cobol编译器。我们的印象是,我们需要重新编译代码以使其在新服务器上工作。运行现有编译程序时出现运行时内存错误

我们有一些源代码的程序,但它是旧的。不确定它与已编译程序之间的差异是什么

好吧,问题是,我们该怎么办


时间不在我们这边,因为我们必须把我们的旧服务器送回去以获得它的信誉。想法,建议,疯狂还是其他?(源代码管理是显而易见的,这不是由我来做的,所以保存讲座)

在短期内,安排保留旧服务器可能会更便宜。在半长期内,您需要花费时间和预算来重新设计程序,或者重新编写程序,或者看看按照程序当前的功能将旧代码修改成正确的形状需要付出多大的努力。

创建旧服务器的映像。然后将旧服务器作为虚拟机在新服务器上运行


但是,我同意一个更好的选择可能是保留生产服务器。

疯狂建议:COBOL反编译器-->源-->新COBOL编译器

(编辑:-付费cobol反编译程序)

(我不是cobol程序员,但..) 如果您知道编译原始程序的编译器的版本,您至少可以编译旧的cobol源代码;如果编译后的版本相同,则知道源代码实际上是当前版本


如果它们不同,你可以尝试(以某种方式),或者至少尝试,工作编译版本和新编译版本,并使用a来了解它们之间的差异有多大。

很遗憾。如果你有可以在新服务器上运行的.int(中间)二进制文件,你应该查阅这些文件。如果没有,你必须重新编译它们。

该程序可能是由外部资源生成的,并且该人员或软件公司或组织的存储库中可能有最新的源。如果您最近合并,则可能由您的母公司持有,或者可能在您的公司中安装了不同的计算机或备份计算机。开发人员的用户帐户上可能有一份副本,可能尚未发送到生产或现场,或者总部的人员有一份副本需要评估并尝试解决问题。如果给这些人打电话,您可能会成功,或者您可以随时与安装计算机操作员或支持人员联系,看看他们是否在mag tape、CDROM或其他备份存储上有一个。如果您的源代码与编译版本相对接近,请尝试以下方法:

  • 将新版本反编译到汇编程序中
  • 将旧的源代码编译成汇编程序
  • 比较
  • 尽可能将新版本与旧版本的差异协调到旧源代码中
  • 重复
为了增强这一点,可能是第二步,因为它将使源代码远离新编译版本,请使用输入数据进行测试,然后尝试基于输出进行反向工程,创建该输出需要什么。测试输入数据越多,效果越好


祝你好运

这是一个权宜之计,但也是为自己争取时间的好办法。好主意——boss不会同意,也不确定cobol license manager是否仍将在虚拟机上运行,但这是个好主意。在这种情况下,你的老板可能不得不接受一个不太完美的解决方案是唯一的解决方案。你是对的——坚持使用旧服务器是最好的选择。我让他们退回到它,而不是用旧的代码拷贝向前推进。但是,早期估计需要2个多月的时间才能将代码副本返工到我们可以在生产中运行的地方。不能在旧服务器上停留那么长时间(不取决于我)不疯狂-只是找不到一个。即使是不可读的源代码,因为我们可以将文本与源代码的副本进行比较,所以我们必须尝试了解主要差异。谷歌只是找不到一个。我们知道源代码不一样,因为二进制差异显示了生产中编译的程序和源代码副本中编译的程序之间的差异。因此,我们知道源代码没有生成在生产环境中运行的编译程序。但是,如果您反汇编,您将获得(一点)更可读的差异。。。几个次要的语句可能会产生巨大的二进制差异。这是一个非常有趣的链接。