1 添加赋值语句赋值
int main(void)
{
int a=1;
//a =1;
return0;
}
反汇编如下:
(gdb) disas main
Dump of assembler code for function main:
0x080483b4 <+0>: push %ebp
0x080483b5 <+1>: mov %esp,%ebp
0x080483b7 <+3>: sub $0x10,%esp
0x080483ba <+6>: movl $0x1,-0x4(%ebp)
0x080483c1 <+13>: mov $0x0,%eax
0x080483c6 <+18>: leave
0x080483c7 <+19>: ret
End of assembler dump.
其中赋值语句是:movl$0x1, -0x4(%ebp)。即把值1赋值给地址 %ebp-0x4。
使用register修饰变量
int main(void)
{
register int a = 1;
returna;
}
反编译objdump后
080483b4 <main>:
80483b4: 55 push %ebp
80483b5: 89 e5 mov %esp,%ebp
80483b7: 53 push %ebx
80483b8: bb 01 00 00 00 mov $0x1,%ebx
80483bd: 89 d8 mov %ebx,%eax
80483bf: 5b pop %ebx
80483c0: 5d pop %ebp
80483c1: c3 ret
可以看到变量a保存在寄存器ebx中
使用static修饰变量
int main(void)
{
static int a = 1;
returna;
}
反编译:
080483b4 <main>:
80483b4: 55 push %ebp
80483b5: 89 e5 mov %esp,%ebp
80483b7: a1 10 a0 04 08 mov 0x804a010,%eax
80483bc: 5d pop %ebp
80483bd: c3 ret
可见static修饰的静态全局变量,在编译时已经存储在堆空间地址0x804a010处。
2自加运算
int main(void)
{
inta=1;
a++;
return0;
}
反汇编代码如下
(gdb) disas main
Dump of assembler code for function main:
0x080483b4 <+0>: push %ebp
0x080483b5 <+1>: mov %esp,%ebp
0x080483b7 <+3>: sub $0x10,%esp
0x080483ba <+6>: movl $0x1,-0x4(%ebp)
0x080483c1 <+13>: addl $0x1,-0x4(%ebp)
0x080483c5 <+17>: mov $0x0,%eax
0x080483ca <+22>: leave
0x080483cb <+23>: ret
End of assembler dump.
3 减法
int main(void)
{
unsigned short a=1;
a =a-1;
return0;
}
反汇编如下
080483b4 <main>:
80483b4: 55 push %ebp
80483b5: 89 e5 mov %esp,%ebp
80483b7: 83 ec 10 sub $0x10,%esp
80483ba: 66 c7 45 fe 01 00 movw $0x1,-0x2(%ebp)
80483c0: 66 83 6d fe 01 subw $0x1,-0x2(%ebp)
80483c5: b8 00 00 00 00 mov $0x0,%eax
80483ca: c9 leave
4 乘法
int main(void)
{
inta=1;
a =a*3;
return0;
}
反汇编如下
080483b4 <main>:
80483b4: 55 push %ebp
80483b5: 89 e5 mov %esp,%ebp
80483b7: 83 ec 10 sub $0x10,%esp
80483ba: c7 45 fc 01 00 00 00 movl $0x1,-0x4(%ebp)
80483c1: 8b 55 fc mov -0x4(%ebp),%edx
80483c4: 89 d0 mov %edx,%eax
80483c6: 01 c0 add %eax,%eax
80483c8: 01 d0 add %edx,%eax
80483ca: 89 45 fc mov %eax,-0x4(%ebp)
80483cd: b8 00 00 00 00 mov $0x0,%eax
80483d2: c9 leave
80483d3: c3 ret