プログラムを実行した結果: bash: . /xxx : そのようなファイルまたはディレクトリはありません
debianシステム(32ビット)でプログラムをコンパイルしました(クロスコンパイルツールチェーンは使用していません)。
uname -a
Linux Debian 3.10.90-2-686 #7 SMP Fri Oct 9 20:26:23 CST 2015 i686 GNU/Linux
root@# ldd --バージョン
ldd (Debian EGLIBC 2.11.2-10) 2.11.2
ルート# gcc --バージョン
gcc (Debian 4.3.2-1.1) 4.3.2
そして、仮想マシンubuntuに載せて実行したい(現在は間違いなく実行されていないが、どんなエラーが発生するか)。
uname -a
Linux ls-virtual-machine 4.2.0-42-generic #49~14.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC 2016 x86_64 x86_64 GNU/Linux
ldd --バージョン
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.14) 2.19
gcc --バージョン
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4
ここで質問です。
実行すると、次のようなエラーが発生します: bash: . /xxx : そのようなファイルまたはディレクトリはありません (xxx は私のプログラムの名前です)
不思議なことに、プログラムファイルが見つからないとプロンプトが出るので、学習の機会を与えてくれます。
そのためには、プログラムの実行過程を理解する必要があります。プログラムが実行される前に、まず必要なダイナミックライブラリをロードする必要があるのです。 動的リンクが必要なアプリケーションがオペレーティングシステムによってロードされるとき、システムは必要なすべての動的ライブラリファイルを探してロードする必要があります。Linuxでは、これはld-linux.so.2によって行われ、アプリケーションが依存する必要がある動的ライブラリを確認するためにlddコマンドを使用することができます。
linux-gate.so.1 => (0xb776b000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb774c000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7606000)です。
/lib/ld-linux.so.2 (0xb776c000)
readelf -l xxx.
Elfファイルの種類はEXEC(実行ファイル)です。
エントリーポイント 0x8049580
オフセット52から始まる7つのプログラムヘッダーがあります。
プログラムヘッダー
タイプ オフセット VirtAddr PhysAddr FileSiz MemSiz Flg Align
PHDR 0x000034 0x08048034 0x08048034 0x000e0 0x000e0 R E 0x4
INTERP 0x000114 0x08048114 0x00013 0x00013 R 0x1
[プログラムインタプリタを要求している:/lib/ld-linux.so.2]。
LOAD 0x000000 0x08048000 0x08048000 0x0b684 0x0b684 R E 0x1000
LOAD 0x00b684 0x08054684 0x006ac 0x02288 RW 0x1000
DYNAMIC 0x00b698 0x08054698 0x08054698 0x000d8 0x000d8 RW 0x4
NOTE 0x000128 0x08048128 0x08048128 0x00020 0x00020 R 0x4
GNU_STACK 0x000000 0x0000000000 0x00000 0x00000 RW 0x4
プログラム起動時に ld-linux.so.2 ローダーは、プログラムのエントリに制御を渡す前に、すべてのダイナミックライブラリをロードするために使用されます。
ダイナミックライブラリの仕組みについては、https://blog.csdn.net/hudaliquan/article/details/50055493 を参照してください。
Ubuntuでは見当たりません /lib/ld-linux.so.2 を取得しました。 ld-linux.so.2がdebianのlibsからubuntuに(以降 ld-linux.so.2 はソフトリンクであり、実際の
<スパン <スパン (コピーされたファイルはld-2.11.2.soで、その後ubuntuでld-2.11.2.soのソフト接続が手動で作成されます)
<スパン その後、再度プログラムを実行すると、まあ、もうbash: . /xxx : No such file or directory errorとなり、多少は効果があるようですが、ほんの少ししか効果がないようです。
<スパン プログラムはまだ実行できません。
<スパン bash: .xxx Permission deny というエラーでプログラムが実行されます。 時間の都合上、詳細は後日とさせていただきます。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例