
テキスト通りの608バイト程度の実行ファイルを作成する手順、教えてください
「Linux で64bitアセンブリプログラミング (01)」
https://www.mztn.org/lxasm64/amd01.html
の例題のアセンブラ(nasm) を使ったプログラム
hello.s
の実行形式が、テキストでは
-rwxr-xr-x 1 jun jun 608 2009-04-03 01:21 hello
となっていますが、
私の環境 Ubuntu20.04 で実行すると
-rwxrwxr-x 1 usa usa 8488 3月 1 18:00 hello01
となって、10倍以上のファイルサイズになってしまいます。
多少のサイズ違いなら、OSのバージョンの違いかなと思いますが、
今回はあまりにも違いすぎます。何が原因でしょうか?
やったことは、テキスト通りに
hello.s
を作成して
$ nasm -f elf64 hello.s
$ ld -s -o hello hello.o
を実行しただけです。
よろしくお願いします
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
今のx86-64 ELF実行形式は8kBより小さくならないかもしれませんね。
/bin/下のコマンドをfileコマンドでみてみると、14kBより小さいファイルはELFじゃなくてスクリプトでしたし。
ELFを実行するならファイルをそのままメモリ空間にマッピングして、ダイナミックリンク部分だけ書き換えた上でコード空間にアサインすると考えられます。コードとヘッダや初期化データは仮想ページを分けたいと考えると少なくとも2つ以上のページが必要になるので、これを手軽にと考えるとヘッダやコードとデータの間に適当なパディングをしてファイルが大きくなることが考えられます。objdumpやhexdumpでELFバイナリの構造を確認すると良いかと思います。
ldにパディングせずにサイズを小さくするオプションがある可能性もありますが、ローダーの手間が増えるのでなくなっていても不思議はありません。
リンク先URLの時期から10年以上経ってますし。
解説ありがとうございます。
どうやら仰るとおりのようです。新しいバージョンのLINUXではテキスト通りの1KB程度の実行ファイルは無理なようですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
pingは正常なのにtracerouteで...
-
PowerShellのスクリプト実行に...
-
エクセルの表にヘンな枠が・・・
-
デフラグは途中で止めても効果...
-
windows10のごみ箱をrd /s /q C...
-
コマンドプロンプトでアクセス...
-
Linux のシェルスクリプトの強...
-
ubuntuでもwindowsのバッチファ...
-
管理者権限でも hostsファイル...
-
emacsでCtrl+zを押してサスペン...
-
ACCESSレポートをPDFに出力したい
-
vistaのコマンドプロンプトにつ...
-
最初の一度しか実行されないロ...
-
linuxサーバーのキャッシュをク...
-
信頼済みサイト登録をbatファイ...
-
pstファイル破損?
-
iPhoneの純正のリマインダーア...
-
不必要なサービス?svchost.exe
-
コマンドプロンプトについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
pingは正常なのにtracerouteで...
-
エクセルの表にヘンな枠が・・・
-
Linux のシェルスクリプトの強...
-
PowerShellのスクリプト実行に...
-
最初の一度しか実行されないロ...
-
sudoで実行したコマンドの実行...
-
大手町駅。それはホームから非...
-
SPI非言語の問題 解説お願いします
-
windows10のごみ箱をrd /s /q C...
-
バッチファイル内の各コマンド...
-
Openイベントを開始させないで...
-
シャットダウンバッチがうまく...
-
サーバでログオフするとアプリ...
-
エクセルからアクセスのプロシ...
-
taskkill をバッチ処理できない。
-
emacsでCtrl+zを押してサスペン...
-
shutdownコマンド実行の残り時...
-
python IDLEで訂正、削除のやり...
-
ACCESSレポートをPDFに出力したい
おすすめ情報