以下の内容はhttps://73spica.hatenablog.com/entry/2025/04/14/093456より取得しました。


Ubuntu22.04環境で32bitのELFを実行したら"No such file or directory"と出る時

TL;DR

amd64Ubuntuにて、マルチアーキテクチャ(i386)の設定がされておらず、i386向けのライブラリが不足していたというオチです...。

参考になりそうでしたら続きをご覧ください!

事象

Ubuntu22.04環境で32bitのELFを実行したら以下のようなエラーが出た。

$ ./orw 
bash: ./orw: No such file or directory

$ file ./orw 
orw: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e60ecccd9d01c8217387e8b77e9261a1f36b5030, not stripped

原因

ELFに動的リンクされている/lib/ld-linux.so.2が存在していなかった。前述のファイルコマンドのdynamically linked, interpreter /lib/ld-linux.so.2の部分。

ld-linux.so.2はi386アーキテクチャに必要なライブラリで,i386に対応した環境であれば以下のようなシンボリックリンクが貼られている。

$ ls -la /lib/ld-linux.so.2
lrwxrwxrwx 1 root root 28 Nov 22  2023 /lib/ld-linux.so.2 -> i386-linux-gnu/ld-linux.so.2

64bit環境でi386アーキテクチャに対応していない(マルチアーキテクチャの設定がされてない)場合,このようにi386向けにコンパイルされたELFに必要なライブラリが存在しない場合がある。

# マルチアーキテクチャ(i386)の設定ができている場合
$ dpkg --print-architecture
amd64
$ dpkg --print-foreign-architectures
i386

# マルチアーキテクチャ(i386)の設定ができていない場合
$ dpkg --print-architecture
amd64
$ dpkg --print-foreign-architectures
(何も表示されない)

対処

マルチアーキテクチャの設定をすればよい。

# アーキテクチャの追加.これによりi386に必要なライブラリをインストールできるようになる。
$ sudo dpkg --add-architecture i386

# 必要なライブラリのインストール
$ sudo apt install libc6:i386

# ld-linux.so.2が入ったことを確認
$ ls /lib/ld*

余談

Pwnの問題を解きたくてpwnable.twをやっていた時に起きた出来事でした.静的リンクされてる問題ファイルは実行できていたので,全く気付かなかったです...(エラーメッセージで「ld-linux.so.2が無い」と言ってくれればすぐ気付いたのに...)

あと,M1 MacのUTMでUbuntu22.04 amd64をエミュレートしていたので,最初はそれが悪いのかなとか色々考えちゃいました.(M1 Macだとアーキテクチャ依存の問題をめちゃくちゃ踏んでしまうしエミュレートはパフォーマンスが著しく下がってしまうので,超不便だなと思っていたのですが,CUIしか使わなければUTMのエミュレートでも結構快適に作業できていいじゃんって、最近思いました.)

参考

Ubuntu/Debian でマルチアーキテクチャを有効/無効にする備忘録 | hyt adversaria




以上の内容はhttps://73spica.hatenablog.com/entry/2025/04/14/093456より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14