Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用对象文件还原意外覆盖的源文件_Linux_Undelete - Fatal编程技术网

Linux 如何使用对象文件还原意外覆盖的源文件

Linux 如何使用对象文件还原意外覆盖的源文件,linux,undelete,Linux,Undelete,我错误地用一个包含“>”的命令擦除了Fortran源文件的内容: some命令>file.f 我不使用版本控制或任何东西。但是,存在一个对象文件file.o(如果有帮助的话)。 是否有机会还原文件.f的内容?可能有反编译器工具可以从编译的目标代码生成Fortran源代码,但它不是原始源代码:注释和局部变量名等内容在编译过程中被丢弃,并且不存在于目标文件中,所以他们无法恢复。反编译代码的结构可能也会有所不同,尤其是当目标文件是经过优化编译时 不幸的是,您无法从对象文件中获取原始代码。反编译可以很好

我错误地用一个包含“>”的命令擦除了Fortran源文件的内容:

some命令>file.f

我不使用版本控制或任何东西。但是,存在一个对象文件file.o(如果有帮助的话)。
是否有机会还原文件.f的内容?

可能有反编译器工具可以从编译的目标代码生成Fortran源代码,但它不是原始源代码:注释和局部变量名等内容在编译过程中被丢弃,并且不存在于目标文件中,所以他们无法恢复。反编译代码的结构可能也会有所不同,尤其是当目标文件是经过优化编译时


不幸的是,您无法从对象文件中获取原始代码。

反编译可以很好地使用字节码语言,如Java,它们或多或少都是“为此目的而设计的”。
使用优化编译器,如Fortran(或C,或C++),您的运气几乎不好

现有的工具可以恢复某种源文件(如“回力棒”),但它与原始文件相差甚远,而且通常即使尝试也会浪费时间

考虑到编译过程的性质,通常甚至不可能反转操作。不仅变量名或非导出函数(当然还有注释)的名称等信息被丢弃,常量被替换为幻数,而且编译后的程序可能与您编写的代码具有完全不同的结构。
编译器定期执行优化,如将不变量移出循环、重新排列语句或删除公共子表达式(即使没有显式启用优化,大多数编译器也会执行琐碎的优化)

编译器需要生成一些从外部观察到的行为“好像”的东西,但不一定等同于您编写的源代码。
在调试器中单步执行程序时也存在类似的现象。有时,变量无法被观察,或者您无法在特定行中断,整个语句显然会“消失”,这让不知情的开发人员非常惊讶,因为编译器优化了它们


总之,我能给出的最好的建议是承认你做了一些愚蠢的事情,从头重写源文件,现在就开始使用版本控制系统,尽管这可能毫无帮助。我想从现在起,我将不得不把它用于所有类型的项目,没有例外。谢谢你的回答。真可惜结果是这样。在我的情况下,重写代码比使用反编译器更容易。