簡體   English   中英

64 位機器上 64 位可執行文件的 Exec 格式錯誤

[英]Exec Format error of a 64-bit executable on a 64-bit machine

我目前正在研究 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 位機器上運行它時,它沒有理由應該拋出格式錯誤。 出了什么問題?

您根本沒有創建可執行文件。 -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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM