テキスト通りの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.1
- 回答日時:
>テキスト通りの608バイト程度の実行ファイルを作成する手順、教えてください
古〜い ディストリでやればいいんじゃないですか…
回答ありがとうございます
>古〜い ディストリでやればいいんじゃないですか…
なるほど。
ということでやってみました
Ubuntu8.04
古すぎるのか、nasmがインストールできず断念。
Ubuntu16.04
928 バイト
でかなり小さくなりました!
Ubuntu20.04 で小さくする方法、ありませんか?
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も見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
他のLinuxでも動くa.outの作り方
UNIX・Linux
-
Linux のシェルスクリプトの強制終了の仕方について
UNIX・Linux
-
Ubuntuで数字だけのユーザーアカウントログインについて
UNIX・Linux
-
-
4
C言語の関数と配列に関する質問
C言語・C++・C#
-
5
double型が正常に認識されていない恐れ
C言語・C++・C#
-
6
WindowsのCapsLock(キャップスロック)って、何の意味があるんですか?
C言語・C++・C#
-
7
win 11でのコマンドプロンプトのwindowについてご教授お願い致します。
Windows 10
-
8
10BASE-Tなどは何でしょうか
Windows 10
-
9
C言語 バッファについて。
C言語・C++・C#
-
10
C言語について。
C言語・C++・C#
-
11
lubuntuのインストールが終わりました。USBメモリを抜いてエンターキーを押しました。起動しませ
UNIX・Linux
-
12
これの対応OSを教えて下さい。php-8.3.0-src.zip
PHP
-
13
VisualStudio2022でC言語プログラムで全角文字を使用すると不明なエラーが表示される
C言語・C++・C#
-
14
年末ですが大至急お願い申し上げます!
UNIX・Linux
-
15
disktopのアイコン
UNIX・Linux
-
16
windows10の再インストールについて
Windows 10
-
17
Linuxでの開発環境構築や設定のコツ
C言語・C++・C#
-
18
ものづくりに向いているプログラミング言語ってなんですか?家電にもプログラミングが使われてるとか
その他(プログラミング・Web制作)
-
19
gccを行ってもexeファイルが生成されない
C言語・C++・C#
-
20
[Linux初心者]Ubuntu22.04.3LTSでApacheをビルドして入れたが、起動しない。
UNIX・Linux
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの表にヘンな枠が・・・
-
SONYの音楽ソフト「x-アプリ」...
-
pingは正常なのにtracerouteで...
-
コマンドプロンプト Windows
-
shutdownコマンド実行の残り時...
-
LD_LIBRARY_PATHって?
-
バッチファイル内の各コマンド...
-
taskkill をバッチ処理できない。
-
コマンドプロンプト「システム...
-
CRONを隔週の日曜日に実行させたい
-
シェルスクリプト内の「exit」
-
linuxサーバーのキャッシュをク...
-
ワードパッドもコマンドプロン...
-
emacsでCtrl+zを押してサスペン...
-
サーバでログオフするとアプリ...
-
スクリプト....
-
常に全画面表示するには・・・
-
別のユーザーでバッチを実行す...
-
システム終了時にバッチファイ...
-
タスクスケジューラに登録した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
エクセルの表にヘンな枠が・・・
-
pingは正常なのにtracerouteで...
-
LD_LIBRARY_PATHって?
-
windows10のごみ箱をrd /s /q C...
-
python IDLEで訂正、削除のやり...
-
バッチファイル内の各コマンド...
-
shutdownコマンド実行の残り時...
-
taskkill をバッチ処理できない。
-
Openイベントを開始させないで...
-
Check Diskは定期的に実行した...
-
ROBOCOPY cmdで正常に処理され...
-
Linux のシェルスクリプトの強...
-
最初の一度しか実行されないロ...
-
エクセルからアクセスのプロシ...
-
linuxサーバーのキャッシュをク...
-
SPI非言語の問題 解説お願いします
-
Macでlsした際の、ファイル名の...
-
windowsからtelnetでログインし...
-
CRONを隔週の日曜日に実行させたい
おすすめ情報