テキスト通りの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で質問しましょう!
似たような質問が見つかりました
- Ruby プログラミング 3 2023/06/09 14:30
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- JavaScript ifreamをリロードしたい 1 2022/05/03 16:15
- Java マイクラでPythonのプログラミングができません 3 2023/05/28 07:15
- 英語 "Hello" の語源は何でしょうか?中国語の「好」Hǎo ではないでしょうか? 2 2022/04/01 10:23
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- Gmail 現在、お名前ドットコムで取得したドメインから「hello@〜」というメールアドレスを作成し、Gmai 1 2022/07/03 23:13
- CM ANAのCMのナレーションがどなたなのか知りたいです。 1 2023/01/18 16:54
- その他(プログラミング・Web制作) Pythonのre.split()の正規表現の使い方 5 2023/10/23 11:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
他のLinuxでも動くa.outの作り方
UNIX・Linux
-
WindowsのCapsLock(キャップスロック)って、何の意味があるんですか?
C言語・C++・C#
-
Linux のシェルスクリプトの強制終了の仕方について
UNIX・Linux
-
-
4
Ubuntuで数字だけのユーザーアカウントログインについて
UNIX・Linux
-
5
C言語の関数と配列に関する質問
C言語・C++・C#
-
6
double型が正常に認識されていない恐れ
C言語・C++・C#
-
7
ものづくりに向いているプログラミング言語ってなんですか?家電にもプログラミングが使われてるとか
その他(プログラミング・Web制作)
-
8
Linuxでの開発環境構築や設定のコツ
C言語・C++・C#
-
9
gccを行ってもexeファイルが生成されない
C言語・C++・C#
-
10
ubuntu(linux)のシャットダウンが進まず、途中で止まってしまう(シャットダウンできない)
UNIX・Linux
-
11
Javaって使いますか、もう古いですか?C++とどっちがいいですか?分析でC++使う授業ありましたけ
C言語・C++・C#
-
12
10BASE-Tなどは何でしょうか
Windows 10
-
13
C言語 バッファについて。
C言語・C++・C#
-
14
写真のプログラムは、1からnまでの、全整数の積すなわち階乗値を求めて返却する関数を作成したいのですが
C言語・C++・C#
-
15
C言語について。
C言語・C++・C#
-
16
バッファリングについて。
C言語・C++・C#
-
17
lubuntuのインストールが終わりました。USBメモリを抜いてエンターキーを押しました。起動しませ
UNIX・Linux
-
18
win 11でのコマンドプロンプトのwindowについてご教授お願い致します。
Windows 10
-
19
これの対応OSを教えて下さい。php-8.3.0-src.zip
PHP
-
20
VisualStudio2022でC言語プログラムで全角文字を使用すると不明なエラーが表示される
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
エクセルの表にヘンな枠が・・・
-
Linux のシェルスクリプトの強...
-
linux初心者です wineをつかっ...
-
スリープモードへの移行を一時...
-
SPI非言語の問題 解説お願いします
-
pingは正常なのにtracerouteで...
-
「もっと」と「さらに」は、ど...
-
windows10のごみ箱をrd /s /q C...
-
ubuntuでもwindowsのバッチファ...
-
最初の一度しか実行されないロ...
-
taskkill をバッチ処理できない。
-
shutdownコマンド実行の残り時...
-
デフラグは途中で止めても効果...
-
linux でバッチファイを作成し...
-
コマンドプロンプトからC:のデ...
-
LD_LIBRARY_PATHって?
-
スタートアップのプログラム実...
-
死にたいと考えてしまうことっ...
-
「一定の時間間隔で5秒毎にMacr...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
エクセルの表にヘンな枠が・・・
-
pingは正常なのにtracerouteで...
-
ファイルサイズが小さくなりま...
-
windows10のごみ箱をrd /s /q C...
-
LD_LIBRARY_PATHって?
-
バッチファイル内の各コマンド...
-
linuxサーバーのキャッシュをク...
-
最初の一度しか実行されないロ...
-
Linux のシェルスクリプトの強...
-
エクセルからアクセスのプロシ...
-
python IDLEで訂正、削除のやり...
-
SPI非言語の問題 解説お願いします
-
shutdownコマンド実行の残り時...
-
ROBOCOPY cmdで正常に処理され...
-
taskkill をバッチ処理できない。
-
Openイベントを開始させないで...
-
ACCESSレポートをPDFに出力したい
-
sudoで実行したコマンドの実行...
-
信頼済みサイト登録をbatファイ...
おすすめ情報