めっちゃお久しぶりです.
エンジニアとして強くなるために低水準言語をちゃんと理解したくなり, 最近低レベルプログラミングを購入しました.
- 作者: Igor Zhirkov,吉川邦夫
- 出版社/メーカー: 翔泳社
- 発売日: 2018/01/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
初心者には割と敷居が高い印象を受けましたが,知らない単語は調べつつ読み進めています.
そして忘れないためにも,この本から学んだことを記録として残していこうと思います.
シリーズ化しますので続いてなかったら挫折したか死んだかのどっちかだと思ってください.
本記事の内容は全て以下のレポジトリに push していますので,適宜参考にしてみてください.
また,この記事の本文も上のレポジトリに push しています. もし間違いや読みにくい文章等がございましたら issue を立てるなり PR を上げるなりしていただけると泣いて喜びます.
よろしくお願いします.
目次
- docker を用いた実行環境構築
- 簡単なアセンブリを書いてハローワールド
本記事では実行環境構築に焦点をあて, アセンブリの詳細な解説は次の記事で行います.
1. docker を用いた実行環境構築
この本ではDebian GNU\Linux 8.0
の環境を推奨されていますが,
いつも触っている Macbook で実行したいので Docker を使って環境を整えます.
目標とする実行環境は以下です。
まずは Dockerfile を作成します.
書籍の実行環境となるべく揃えたいのでイメージはdebian:8
を使用しましょう.
C 言語のコンパイラである gcc 等も後々必要になるようですが,最初はミニマムで進めていこうと思います.
FROM debian:8 RUN apt-get update \ apt-get install -y binutils nasm gdb \ apt-get install -y vim
それではこの Dockerfile から docker イメージを作成しましょう.
$ docker build -t low-level-programming .
これでイメージが作成されました.
以上で実行環境構築は終了です.
ホントに docker は最高ですねー
2. 簡単なアセンブリを書いてハローワールド
早速ハローワールドを出力するアセンブリを書いてみましょう. と,言っても書籍のコード丸写しです.
元コードは書籍の p28 のリスト 2-4 です.
section .data message: db 'hello, world!', 10 section .text global _start _start: mov rax, 1 mov rdi, 1 mov rsi, message mov rdx, 14 syscall mov rax, 60 xor rdi, rdi syscall
現状,高級言語しか知らない自分には本当に何が書いてあるかわからないです笑
冒頭でも書きましたが,このコードの解説は次の記事で行います.
先ほど作った実行環境にアセンブリを保存しているワーキングディレクトリをマウントします.
$ docker run -it -v $(pwd):/work low-level-programming bash
あとはコンパイルして実行するのみです.
$ cd work $ nasm -felf64 hello.asm -o hello.o $ ld -o hello hello.o $ ./hello
はい,以下のようにちゃんとハローワールドが出力できましたね.
root@97e9cd2fd7da:/work# ./hello hello, world!
まとめ
- 手を動かすために docker で実行環境を整えました.
- アセンブリで
hello, world!
を出力しました.
以上です.
次回は本記事で書いたハローワールドを読み解いていきます.
参考
本記事の内容は以下の記事を大いに参考にしています. 有益な記事ありがとうございました.