x86_64システムでx86-64実行可能ファイルを実行するとバイナリファイルを実行できません:Exec形式エラー

x86_64システムでx86-64実行可能ファイルを実行するとバイナリファイルを実行できません:Exec形式エラー

x64 システムでは、WSL および G++ を使用してコンパイルされた C++ アプリケーションを Visual Studio で開発しています。

これが当たり前ならすみません。しかし、私はLinuxでアプリケーションを開発するのが初めてです。

/proc/cpuinfo フラグ:

fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat pku ospke md_clea

「./program.out」を使って実行ファイルを実行すると、次のような結果になります。

bash: ./program.out: cannot execute binary file: Exec format error

「sudo ./program.out」を使用してください。

./program.out: 1: ./program.out: 1: not found
./program.out: 1: ./program.out: ELF: not found
./program.out: 1: ./program.out: A��878G8G����DD: not found
./program.out: 1: ./program.out: A: not found
./program.out: 1: ./program.out: 1: not found
: No such filents.out: 1: ./BeXCoolAccounts.out: cannot open
./program.out: 2: ./program.out: @!l: not found
: No such filents.out: 1: ./BeXCoolAccounts.out: cannot open �GJ�V�JA
./program.out: 1: ./program.out: %@@@����nnppp-[-[����X�XA1A: not found
./program.out: 2: ./program.out: Syntax error: end of file unexpected

と "file./program.out":

./program.out: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), no program header, missing section headers

解決策を見つけるときに「ldd ./program.out」を試しました。

not a dynamic executable

そして "strace ./program.out":

execve("./program.out", ["./program.out"], 0x7ffcc5b8b100 /* 27 vars */) = -1 ENOEXEC (Exec format error)
strace: exec: Exec format error
+++ exited with 1 +++

また、実行可能ファイルにchmod a + xを使用しましたが、まだ結果がありません。

ベストアンサー1

プログラムヘッダーなし、セクションヘッダーがありません

動的実行ファイルではありません。

どのようにコンパイルしたかはわかりませんが、結果ファイルは次のようになります。いいえ有効な Linux 実行可能ファイルです。たとえば、テキストモードを使用してFTP経由でコピーすると、これが発生する可能性があります。または、生成されたファイルをテキストエディタで編集しました。

fileFedora 33の有効な実行ファイルの戻り結果は次のとおりです。

file `which file`
/bin/file: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b8d5ba190593ec9e03e602d75dc0ea24a27a5cdb, for GNU/Linux 3.2.0, stripped

またはUbuntu 18.04の場合:

$ file `which file`
/usr/bin/file: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=2b26928f841d92afa31613c2c916a3abc96bbed8, stripped

おすすめ記事