这篇我们用汇编看看变量咋存储的,不需要知道太多汇编语句,懂了下面几条我们就可以出发了!
leal S,D //D = &S 这个指令大部分出现在要存储指针的情况
movb $0x05, %al //R[al] = 0x05
movl %eax, -4(%ebp) //mem[R[ebp] -4] = R[eax]
movl -4(%ebp), %eax //R[eax] = mem[R[ebp] -4]
movl $LC0, (%esp) //mem[R[esp]] = $LC0 (a label)
Makefile
你需要加上 -g加入调试信息
print:aa
./aa
aa: aa.o
gcc -g -o aa aa.o
aa.o: aa.c
gcc -g -c aa.c
例子一:最简单的开始
#include <stdio.h>
int main()
{
int c=55;
int a=16;
}
GDB 中输入 "layout asm" 能够实时的打开汇编窗口
│0x8048387 <frame_dummy+23> je 0x8048392 <frame_dummy+34> │
│0x8048389 <frame_dummy+25> movl $0x8049524,(%esp) │
│0x8048390 <frame_dummy+32> call *%eax │
│0x8048392 <frame_dummy+34> leave │
│0x8048393 <frame_dummy+35> ret │
│0x8048394 <main> push %ebp │
│0x8048395 <main+1> mov %esp,%ebp │
│0x8048397 <main+3> sub $0x10,%esp │
│0x804839a <main+6> movl $0x37,-0x8(%ebp)//把55放到ebp值-8的地址内
│0x80483a1 <main+13> movl $0x10,-0x4(%ebp) │
B+>│0x80483a8 <main+20> mov $0x0,%eax