78
74

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Linuxでx86アセンブラ(道具編)

Posted at

:large_blue_diamond:この記事について

linux環境でx86アセンブラを開発するのに必要な道具たちを紹介します.アセンブラはプログラミングをやる人なら誰でも聞いたことあるかと思います.でも、C++やJavaなどの高級言語が主流になっている昨今では必要ないのでは?と思うかもしれません.確かにアセンブラはCPUやOSに著しく依存するため移植性はありません.しかし、アセンブラを使うことでマシンに対する理解が深まります.これにより、組み込みなどx86以外のアーキテクチャ以外での開発にも柔軟に対応できるようになります.また、コンパイラが吐き出すコードの殆どは、実行速度を犠牲にして移植性を向上しています.腕次第でコンパイラよりも速いコードを作れるようになります.

:large_blue_diamond:紹介するツール

  • nasm
    アセンブリコードからオブジェクトを生成するアセンブラです.
    移植性に優れ、Linux、BSD、Windowsのオブジェクトを生成できます.

  • gdb
    C、C++でも使われるデバッガです.アセンブラでも使えます.

:large_blue_diamond:ツールをインストール

Linux上なら簡単インストールできます.
sudo apt-get install nasm build-essential

:large_blue_diamond:nasmの使い方

はじめにアセンブリソースを作りませう.お好きなエディタで下のアセンブリ版ハローワールドを書いてtest.asmとして保存しましょう.

test.asm
section .bss

section .data
    MSG: db "Hello World!!", 10
    MSG_LEN equ $-MSG

section .text

global main

main:
   nop

.spike:
   mov eax, 0
   add eax, 5
   sub eax, 2

.print:
    mov eax, 4
    mov ebx, 1
    mov ecx, MSG
    mov edx, MSG_LEN
    int 80h;

.final:
    mov eax, 0
    ret

これをコンパイル・リンクして実行ファイルを生成します.

nasm -g -f elf64 -o test.o test.asm
gcc -o test test.o ```
nasmのオプション```-f elf64```は64bitの指定です.32bitの場合は、```-f elf```を指定してください.
testを実行すると
``` Hello World!! ```
と、ターミナルに表示されます.

# \:large_blue_diamond:gdbの使い方
gdbを使って実行中に何が起きているか見てましょう.
``` gdb -tui test ```
で、gdbを起動しましょう.
``` break main ```
で、mainのところにブレイクポイントを設置します.
``` r ```
で、ブレイクポイントまで実行します.
``` disassemble```
で、アセンブリのデバッグができるよう処理をアセンブリに変換します.
``` layout asm ```
アセンブリコードを表示します.
これでデバッグする準備が出来ました.
下のコマンドを使ってデバッグしましょう.

| コマンド | 意味 |
|:--------|------|
| stepi        |   次の命令を実行   |
| i r | すべてのレジスタを表示 |
| p $eax | レジスタeaxの内容を10進数で表示 |
| p/x $eax | レジスタeaxの内容を16進数で表示 |
| p/t $eax | レジスタeaxの内容を2進数で表示 |
| display $eax | レジスタeaxの内容を命令を実行するたびに自動表示 |
| info display | 自動表示する変数を表示 |
| undisplay $eax | レジスタeaxの自動表示を解除 |
| x &msg | メモリmsgの中身を表示 |
| quit | gdbを終了 |

# \:large_blue_diamond:おわりに
簡単なアセンブリでのプログラム作成ツールの紹介でした.私の勉強次第では後々追記するかもしれません.*Have A Happy Hacking*

# 参考文献
* NASM development team site:   
http://www.nasm.us/
* GDB: The GNU Project Debugger site:   
https://www.gnu.org/software/gdb/
* Assembly Language Step-by-Step: Programming with Linux:   
http://www.amazon.co.jp/Assembly-Language-Step---Step-Programming/dp/0470497025/ref=sr_1_1?ie=UTF8&qid=1446704607&sr=8-1&keywords=assembly+language+step+by+step


↓↓\:bowtie:コメントをいただけたら励みになります\:bowtie:↓↓









78
74
3

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
78
74

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?