2016-04-29 15 views
0

どこ尋ねると、私はそれを得たが、なぜ私が.cのファイルにこれらのようなラインの多くを持っていない:私はそれで何ができる奇妙.Cファイル

0005080: 3465 3434 2035 6635 6620 2064 6c65 2e5f 4e44 5f5f dle._ 
0005090: 5f44 544f 525f 454e 445f 5f0a 3030 3031 _DTOR_END__.0001 
00050a0: 3334 303a 2030 3035 6620 3566 3663 2036 340: 005f 5f6c 6 
00050b0: 3936 3220 3633 3566 2036 3337 3320 3735 962 635f 6373 75 
00050c0: 3566 2036 3936 6520 3639 3734 2020 2e5f 5f 696e 6974 ._ 
00050d0: 5f6c 6962 635f 6373 755f 696e 6974 0a30 _libc_csu_init.0 

?これはプログラムですか?

+1

これらはコンパイルされたマシンコードですが、ソースコード –

+1

ではなく、objdump -d file.cを使って逆アセンブルされたバージョンを取得し、それがあなたのファイルであるかどうかを調べることができます。 – Aif

+2

なぜ、あなたはそれを手に入れましたか? – Leandros

答えて

7

これはCファイルではありません。これはCファイルではありません!

ここで起こったのは、ファイルをコンパイルしようとするいくつかのパラメータを反転したことです。 gcc -o my_file.c my_file.cのようなもの、またはそのようなもの。

Linuxの場合は、fileユーティリティを実行して、それが何であるか把握することができます。

注:あなたのファイルを送っ進取の実行と何かをすることを引き起こして、ファイルマネージャでそれをダブルクリックしてしまうあなたを期待して、攻撃者は、次のようになります。これは良くもマルウェアの一部であるかもしれない

不快な。

編集:

はまた、xxdを通して見たファイルのリテラルな内容、またはファイルというのですか?それが前者の場合、ある種の間違いの可能性が高くなります。後者の場合:注意してください。

1

これはhexdumpコマンドの出力のようです。

次のコードでファイルtemp.cお持ちの場合:コンパイルされた出力ファイルの

00000000 23 69 6e 63 6c 75 64 65 3c 73 74 64 69 6f 2e 68 |#include<stdio.h| 
00000010 3e 0a 69 6e 74 20 6d 61 69 6e 28 29 0a 7b 0a 09 |>.int main().{..| 
00000020 70 72 69 6e 74 66 28 22 48 65 6c 6c 6f 20 57 6f |printf("Hello Wo| 
00000030 72 6c 64 21 5c 6e 22 29 3b 0a 09 72 65 74 75 72 |rld!\n");..retur| 
00000040 6e 20 30 3b 0a 7d 0a        |n 0;.}.| 
00000047 

最後の数行(:

#include<stdio.h> 
int main() 
{ 
     printf("Hello World!\n"); 
     return 0; 
} 

その後に、hexdump -C temp.cはとして出力を生成しますa.out一般的に)上記のプログラムの読み取り:

\ 00__data_start \ 00__gmon_start __ \ 00__dso_handle \ 00_IO_stdin_used \ 00 __libc _csu_init \ 00_end \ 00_start \ 00__bss_start \ 00main \ 00_Jv_RegisterClasses \ 00__TMC_END __ \ 00_ITM_registerTMCloneTable \ 00_init \あなたの場合は00

が、それはhexdumpのように見える(または類似の)コマンドがa.outで使用された(すなわち、オブジェクトコードファイル)ファイルであり、出力の最後の数行です。

幸運を祈る!