“gcc a.c -o a.c”以什么方式可以恢复真正的.c文件

时间:2013-03-31 15:29:58

标签: c gcc

Sadlly,我使​​用以下命令编译了一个.c文件:

$ gcc a.c -o a.c

所以a.c成了覆盖我原来的c文件的可执行文件...我想问一下我可以回复真正的a.c文件吗?

4 个答案:

答案 0 :(得分:0)

不幸的是,这几乎是不可能的,除非你擅长逆向工程二进制代码,AFAIK。

答案 1 :(得分:0)

您可以从备份中恢复它,也可以从源代码控制系统恢复它。

如果你没有这些,你应该开始使用它们(现在你知道为什么!)。

您也可以使用正在使用的操作系统的文件恢复工具恢复文件,如果失败,您可以反编译目标文件。这是一个反编译器:

http://boomerang.sourceforge.net/cando.php?hidemenu

在使用“c反编译器”搜索Google后,这是列表中的第一个。

这是关于反编译器的stackoverflow问题。

What's a good C decompiler?

答案 2 :(得分:0)

当您覆盖文件时,操作系统不会将数据物理地放在同一位置,它只是将旧数据标记为可用,并将新数据写入磁盘。它可能会覆盖您的文件,但可能不会。 Midnight commander有一个可以尝试恢复文件的工具。

  

目前Midnight Commander与一些虚拟文件系统(VFS)打包在一起:... undelfs,用于恢复ext2文件系统上的已删除文件(Linux系统的默认文件系统)

Midnight commander guide

同时,您可能不应该在计算机上保存任何其他文件,尤其是在已删除文件所在的目录中。

编辑:顺便说一句,这是一篇旧文章,linux有一段时间没有使用过ext2。但我认为它应该仍然有效。

答案 3 :(得分:0)

grep是恢复丢失的C文件的好工具。

  

grep -a -B 25 -A 100'文件中的某些字符串'/ dev / sda1> restore.txt

上面的命令恢复C文件中“文件中的某些字符串”行之前25行和之后100行的丢失的文本,并将恢复的文本输出到recover.txt文件中。 因此,您可以根据需要更改25和100的值。 上面的命令还假定分区名称为/dev/sda1。您可以使用mount命令查找分区名称。