遗憾的是,我用下面的命令编译了一个。c文件:
$ gcc a.c -o a.c
所以a.c成为覆盖我旧的c文件的可执行文件…我想问我能有真正的a.c文件回来和如何?
不幸的是,这几乎是不可能的,除非您精通二进制代码的逆向工程。
您可以从备份中恢复它,也可以从源代码控制系统中恢复它。
如果你没有这两个,你应该开始使用这两个(现在你知道为什么了!)。
您也可以使用您正在使用的操作系统的文件恢复工具来恢复文件,或者如果失败,您可以反编译目标文件。这是一个反编译器:
http://boomerang.sourceforge.net/cando.php?hidemenu这是在谷歌搜索"c反编译器"后出现在列表中的第一个。
这是一个关于反编译器的stackoverflow问题。
什么是好的C反编译器?
当您覆盖一个文件时,操作系统不会在物理上将数据完全放在同一个位置,它只是将旧数据标记为可用,并将新数据写入磁盘。它可能会覆盖您的文件,也可能不会。午夜指挥官有一个工具,可以尝试恢复你的文件。
目前午夜指挥官是打包与一些虚拟文件系统(VFS):…undelfs,用于恢复ext2文件系统(Linux系统的默认文件系统)上已删除的文件
午夜指挥官指南
同时,你可能不应该在计算机上保存任何其他文件,特别是在你删除的文件所在的目录下。
编辑:顺便说一下,这是一篇老文章,linux已经有一段时间没有使用ext2了。但是我觉得还是可以的grep
是一个很好的工具来恢复丢失的C文件。
grep -a -B 25 -a 100 'some string in file'/dev/sda1> recovery .txt
上面的命令恢复C文件中'some string in The file'行之前25行和之后100行丢失的文本,并在recover.txt
文件中输出恢复的文本。因此,您可以根据需要更改25和100的值。上述命令还假设分区名称为/dev/sda1
。您可以使用mount
命令来查找您的分区名称。