linux汇编之——(5)反汇编运算样例
来源:互联网 发布:coding webhook php 编辑:程序博客网 时间:2024/05/29 17:01
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
- linux汇编之——(5)反汇编运算样例
- linux汇编之——(6)反汇编条件控制
- linux汇编之——(7)反汇编存储及其他
- linux 反汇编objdump
- 反汇编linux程序
- linux 反汇编
- linux反汇编理解
- linux反汇编
- Linux反汇编命令
- linux反汇编调试
- 反汇编之路
- 反汇编之爆破
- linux汇编之——(3) 汇编基础知识
- linux内核分析——简单代码反汇编为汇编代码分析
- 汇编与反汇编之小技巧
- 通过VC学习反汇编——汇编初步
- linux x86 ELF 反汇编
- linux下反汇编实例
- RTMP Server不只是FMS,还有很多其他选择
- 正则获取<a></a>标签内容
- 指针与const限定符 const int * p 与 int * const p 的 区别
- HDMI的高级理解
- XAML中ListView选中态样式改变
- linux汇编之——(5)反汇编运算样例
- HDOJ---2036 过山车[匈牙利算法]
- oracle ORA-12899错误的解决方法
- 使用GDB调试Nginx
- 前世纪审判——辛普森杀妻案
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) .
- 虚拟化之QEMU与KVM
- 黑马程序员 Java基础 ---> 集合(上)
- php反射类 ReflectionClass