64 位机器上 64 位可执行文件的 Exec Format 错误
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
and 运行ning arch
确认我的机器有 x86-64 架构。由于它是 64 位可执行文件,因此当我尝试在我的 64 位计算机上 运行 它时,它没有理由抛出格式错误。出了什么问题?
您根本没有创建可执行文件。 -c
选项告诉 gcc 只编译,并输出一个可重定位的目标文件。您通常会将该文件命名为 easy_md5.o
并在 linking 时使用它,但是 -o
选项强制将其命名为 easy_md5
这看起来像一个可执行文件名称,即使它不是。
要一步编译和 link,只需删除 -c
:gcc easy_md5.c -o easy_md5
。
还有其他一些提示:
I ran chmod +x easy_md5
on the executable
当您实际创建可执行文件时,这不是必需的。 gcc 为您设置了执行权限。
Running file easy_md5 shows the following:
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
我目前正在研究 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
and 运行ning arch
确认我的机器有 x86-64 架构。由于它是 64 位可执行文件,因此当我尝试在我的 64 位计算机上 运行 它时,它没有理由抛出格式错误。出了什么问题?
您根本没有创建可执行文件。 -c
选项告诉 gcc 只编译,并输出一个可重定位的目标文件。您通常会将该文件命名为 easy_md5.o
并在 linking 时使用它,但是 -o
选项强制将其命名为 easy_md5
这看起来像一个可执行文件名称,即使它不是。
要一步编译和 link,只需删除 -c
:gcc easy_md5.c -o easy_md5
。
还有其他一些提示:
I ran
chmod +x easy_md5
on the executable
当您实际创建可执行文件时,这不是必需的。 gcc 为您设置了执行权限。
Running file easy_md5 shows the following:
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