1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apple SiliconのMacでIntel x64アーキテクチャのアセンブラを動かす

Last updated at Posted at 2024-09-16

低レベルプログラミングという本の勉強のため、M1 Mac上でIntel x64アーキテクチャのアセンブラを動かす環境構築をした時のメモ。

前提

  • M1 Mac

Docker Desktopをインストールし、起動してから手順を行う。Dockerfileを使ったほうがいいかもしれないが、今回は手動で環境構築した後にイメージを作る手順とした。

イメージの作成手順

1. x86_64ベースのDockerコンテナを用意(ホスト)

一応ホストと共有ディレクトリを作るようにしている。これを共有したいディレクトリ上で実行する想定。

docker run --rm -it --platform linux/amd64 -v $(pwd):/workspace ubuntu bash

2. コンテナ内で必要なツールをインストール(ゲスト)

apt update
apt install -y nasm gcc locales

3. 動作確認用のコードを生成(ゲスト)

echo 'section .data
    msg db "Hello, World!"
section .text
    global _start
_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 60
    xor rdi, rdi
    syscall' > hello.asm

4. アセンブル(ゲスト)

nasm -f elf64 hello.asm -o hello.o

5. 実行ファイルを生成(ゲスト)

ld -o hello hello.o

6. 実行(ゲスト)

./hello

7. 日本語を扱えるようにロケールを設定(ゲスト)

sed -i 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8

echo 'export LANG=ja_JP.UTF-8' >> ~/.bashrc
echo 'export LANGUAGE=ja_JP:ja' >> ~/.bashrc
echo 'export LC_ALL=ja_JP.UTF-8' >> ~/.bashrc

8. Python2のインストール(ゲスト)

普通なら不要だが、前述の「低レベルプログラミング」の本でテストを実行するにはなんとPython2が必要なので、その場合はインストールが必要。

apt install でインストールできないのでソースからビルドする。以下を参考にしたらうまくいった。

9. イメージを作るためのコンテナIDを調べる(ホスト)

docker ps

ここで出力されたCONTAINER IDをひかえる。

10. イメージを生成(ホスト)

<container_id> は上でひかえたコンテナIDに置き換える。

docker commit <container_id> my_assembly_image

以降

前述の手順でイメージが作成できる。以降はイメージを使って実行する。(ホスト)

docker run --rm -it -v $(pwd):/workspace my_assembly_image bash

以下の警告が出るが無視しても問題ない。

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

警告が出てほしくなければ --platform linux/amd64 を指定すればいいはず。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?