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   

原创粉丝点击