LoginSignup
1
1

【x64】アセンブリ読解の基礎知識①

Posted at

目次

  • 対象読者
  • この記事を読んで得られるもの
  • intel記法とAT&T記法
  • オペコードの接尾辞
  • leaとmovの違い
  • おすすめ文献
  • 参考文献

対象読者

  • アセンブリ初心者
  • とりあえずアセンブリに関する知識が欲しい人
  • x64アーキテクチャに興味がある人
  • mov、add、オペコード、オペランドのような超基礎的なことは知っている人

この記事を読んで得られるもの

  • アセンブリの基礎的な知識

intel記法とAT&T記法

アセンブリには、intel記法AT&T記法の2種類の表記法があります。これら2つの記法は、使う記号とオペコードの表記が異なっていたり、オペランドの順番が逆になっていたりします。

以下のコードは2つの記法で5eaxに代入する処理を書いたものです。

intel記法

mov eax, 5

AT&T記法

movl $5, %eax

英語wikiに違いが載っています。

オペコードの接尾辞

  • b (=byte) : オペランドのメモリサイズは1byte
  • w (=word) : オペランドのメモリサイズは2byte
  • l (=long) : オペランドのメモリサイズは4byte
  • q (=quadword) : オペランドのメモリサイズは8byte
movq %rax, %rbx
movzbl %al, %ebx        ;movzのように2つの接尾辞を持つものもあります。

leaとmovの違い

leaとmovは両方、アセンブリでは頻出で、<何か><場所>に入れるという操作を行います。

mov A, B                  ;アドレスBの値(もしくは定数B)をアドレスAに入れる
lea A, B                  ;アドレスBをアドレスAに入れる

;例
mov [A], B                ;アドレスBの値(もしくは定数B)をアドレスAの値が指すアドレスに入れる。
lea A, [B]                ;アドレスBの値が指すアドレスをアドレスAに入れる。
mov [ebx+04], eax         ;eaxの値をアドレスebx+4hに入れる
lea ecx, [ebp-10]         ;ebp-10hの値が指すアドレスをecxに入れる

おすすめ文献

どのように関数が実行されるかが分かる。

r/mやimmなど、知っていると役に立つ用語の説明。

参考文献

1
1
0

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
1