KDOC 45: プログラミング言語の内部的な違いをアセンブリから調べる

今まで、プログラミング言語の内部的な違いを調べるのに、ソースコードを読むしかないと考えていた。しかし別の方法もある。生成されたassembly languageから調べる方法だ。

たとえばC言語で、グローバル変数、ローカル変数は全く別の扱いなことを確かめる方法を書く。

int x;
int y[20];

int main() {
    return x + y[5];
}
x:
  .zero 4
y:
  .zero 80
main:
  movl y+20(%rip), %edx
  movl x(%rip), %eax
  addl %edx, %eax
  ret
int main() {
    int a = 1;
    return a;
}
main:
  pushq %rbp
  movq %rsp, %rbp
  movl $1, -4(%rbp)
  movl -4(%rbp), %eax
  popq %rbp
  ret

ということで、プログラムの疑問について究極的に答えを得る方法は、CPUが実行する処理の違いを見ることだ。

関連。