我目前正在研究 MD5 的實作,只是因為我很好奇并想更好地了解散列的作業原理。我有 1 個包含所有代碼的檔案,被呼叫easy_md5.c,我正在使用以下 Makefile 編譯它:
easy_md5: easy_md5.c
gcc -c easy_md5.c -o easy_md5
clean:
-rm -f easy_md5.o
-rm -f easy_md5
我chmod x easy_md5在可執行檔案上運行以授予它權限,但是當我嘗試運行它時出現以下錯誤:
[gabe@void easy_md5]$ ./easy_md5 hello
bash: ./easy_md5: cannot execute binary file: Exec format error
運行file easy_md5顯示如下:
easy_md5: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
并運行arch確認我的機器具有 x86-64 架構。由于它是一個 64 位可執行檔案,因此當我嘗試在我的 64 位機器上運行它時,它沒有理由應該拋出格式錯誤。出了什么問題?
uj5u.com熱心網友回復:
您根本沒有創建可執行檔案。該-c選項告訴 gcc 只編譯,并輸出一個可重定位的目標檔案。您通常會命名該檔案easy_md5.o并在鏈接時使用它,但該-o選項強制將其命名為easy_md5看起來像可執行檔案的名稱,即使它不是。
要一步編譯和鏈接,只需洗掉-c: gcc easy_md5.c -o easy_md5。
還有一些其他提示:
我
chmod x easy_md5在可執行檔案上運行
當您實際創建可執行檔案時,這不是必需的。gcc 為您設定執行權限。
運行檔案 easy_md5 顯示以下內容:
easy_md5: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
這表示目標檔案。實際的可執行檔案被報告為類似
a.out: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=7108d6b0e7767b20e8db974561938d3bfcbbe12a, for GNU/Linux 3.2.0, not stripped
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357971.html
