![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
テキスト通りの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も見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
他のLinuxでも動くa.outの作り方
UNIX・Linux
-
このエラー内容について教えてくれませんか? sudo〜/sr0の一行は入力コマンドの写しの写しですね
UNIX・Linux
-
Ubuntuで数字だけのユーザーアカウントログインについて
UNIX・Linux
-
-
4
C言語の関数と配列に関する質問
C言語・C++・C#
-
5
double型が正常に認識されていない恐れ
C言語・C++・C#
-
6
WindowsのCapsLock(キャップスロック)って、何の意味があるんですか?
C言語・C++・C#
-
7
ものづくりに向いているプログラミング言語ってなんですか?家電にもプログラミングが使われてるとか
その他(プログラミング・Web制作)
-
8
win 11でのコマンドプロンプトのwindowについてご教授お願い致します。
Windows 10
-
9
Ubuntu系とCentOS系の違いはなんですか? 勝手にですが、前者はC++、後者はPythonの
UNIX・Linux
-
10
Windows10でネットやソフトが重くなって来たのでメモリ解放をしようとPC Managerていう
Windows 10
-
11
IT業界より楽に稼げる業界ってあるんですか?銀行とか?
その他(プログラミング・Web制作)
-
12
CPUが16bitでも32bitOSでコンパイルしたコード(例えばintが4バイトと定義されている)
C言語・C++・C#
-
13
LinuxでSSH接続について
UNIX・Linux
-
14
lubuntuのインストールが終わりました。USBメモリを抜いてエンターキーを押しました。起動しませ
UNIX・Linux
-
15
C言語について。
C言語・C++・C#
-
16
年末ですが大至急お願い申し上げます!
UNIX・Linux
-
17
gccを行ってもexeファイルが生成されない
C言語・C++・C#
-
18
VisualStudio2022でC言語プログラムで全角文字を使用すると不明なエラーが表示される
C言語・C++・C#
-
19
C言語をコンパイルするとコンピュータ上でどう動くかというコードになるみたいな説明をよく聞くのですがこ
C言語・C++・C#
-
20
これなにがちがうんですか??
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
エクセルの表にヘンな枠が・・・
-
linux初心者です wineをつかっ...
-
python IDLEで訂正、削除のやり...
-
CRONを隔週の日曜日に実行させたい
-
父子家庭、 子供の進学費用を全...
-
SPI非言語の問題 解説お願いします
-
shutdownコマンド実行の残り時...
-
タスクスケジュールについて
-
ログオンスクリプトについて
-
「もっと」と「さらに」は、ど...
-
英語版での表示
-
ubuntuでもwindowsのバッチファ...
-
エクセル時間毎ごとにマクロを...
-
pingは正常なのにtracerouteで...
-
ファイルサイズが小さくなりま...
-
[別のユーザーとして実行]が右...
-
Macでシェルを起動時にバックグ...
-
現在のWindowsで昔のWindows95...
-
ACCESSレポートをPDFに出力したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの表にヘンな枠が・・・
-
SONYの音楽ソフト「x-アプリ」...
-
pingは正常なのにtracerouteで...
-
LD_LIBRARY_PATHって?
-
ROBOCOPY cmdで正常に処理され...
-
バッチファイル内の各コマンド...
-
Openイベントを開始させないで...
-
linuxサーバーのキャッシュをク...
-
最初の一度しか実行されないロ...
-
shutdownコマンド実行の残り時...
-
windows10のごみ箱をrd /s /q C...
-
CRONを隔週の日曜日に実行させたい
-
SPI非言語の問題 解説お願いします
-
python IDLEで訂正、削除のやり...
-
常に全画面表示するには・・・
-
エクセルからアクセスのプロシ...
-
信頼済みサイト登録をbatファイ...
-
デフラグは途中で止めても効果...
-
emacsでCtrl+zを押してサスペン...
-
taskkill をバッチ処理できない。
おすすめ情報