zoukankan      html  css  js  c++  java
  • 反汇编测试

    反汇编测试

    参考博文GDB调试汇编堆栈过程分析

    测试代码

    #include<stdio.h>
    
    int g(int x){
        return x+3;
    }
    int f(int x){
    
         int i = 02;
        return g(x)+i;
    }
    int main(void){
        return f(8)+1;
    }
    

    使用命令gcc - g week1307.c -o week1307 -m32编译遇到问题

    经过查询后得知需要安装multilib库:

    sudo apt-get install gcc-multilib
    sudo apt-get install g++-multilib
    

    使用gcc - g week1307.c -o week1302 -m32进行编译,使用gdb week1307进入gdb

    进入之后先在main函数处设置一个断点,再run一下,使用disassemble指令获取汇编代码,用i(info) r(registers)指令查看各寄存器的值:

    可见此时主函数的栈基址为0xffffd1f8,用x(examine)指令查看内存地址中的值,但目前%esp所指堆栈内容为0,%ebp所指内容也为0

    结合display命令和寄存器或pc内部变量,做如下设置:display /i $pc,这样在每次执行下一条汇编语句时,都会显示出当前执行的语句。下面展示每一步时%esp、%ebp和堆栈内容的变化:



    可见8被压入了栈中,同时esp减少了4

    使用si命令,进入f函数,此时%esp,%ebp和堆栈的值为:

    单步运行汇编代码

    call指令将下一条指令的地址入栈,进入g函数


    g函数运算完成后,ret返回f函数

    f函数运算完成后,ret返回main函数

    最终结果被写入eax寄存器中

    f函数的汇编代码

    f() eip ebp esp eax
    endbr32 0x565561c6 0xffffd1f8 0xffffd1f0 0x56558fdc
    push %ebp 0x565561ca 0xffffd1f8 0xffffd1f0 0x56558fdc
    mov %esp %ebp 0x565561cb 0xffffd1f8 0xffffd1ec 0x56558fdc
    sub $0x10 %esp 0x565561cd 0xffffd1fc 0xffffd1ec 0x56558fdc
    call 0x56556213 %esp 0x565561d0 0xffffd1fc 0xffffd1dc 0x56558fdc
    add $0x2e07 %eax 0x565561d5 0xffffd1fc 0xffffd1dc 0x565561d5
    movl $0x2 0x4(%ebp) 0x565561da 0xffffd1fc 0xffffd1dc 0x56558fdc
    push 0x8(%ebp) 0x565561e1 0xffffd1fc 0xffffd1dc 0x56558fdc
    call 0x565561ad 0x565561e4 0xffffd1fc 0xffffd1d8 0x56558fdc
    add $0x4 %esp 0x565561e9 0xffffd1fc 0xffffd1d8 0xb
    mov -0x4(%ebp) %edx 0x565561ec 0xffffd1fc 0xffffd1dc 0xb
    add %edx %eax 0x565561ef 0xffffd1fc 0xffffd1dc 0xb
    leave 0x565561f1 0xffffd1fc 0xffffd1dc 0xd
    ret 0x565561f2 0xffffd1f8 0xffffd1f0 0xd
  • 相关阅读:
    mysql创建账号
    CentOS 6.4下Squid代理服务器的安装与配置
    匿名函数 闭包
    array_values打破原有的数组key值,重新从0往上排序
    鹏哥yh搜索
    mosh的安装和使用
    提高php效率的技巧
    svn服务器配置
    限制input输入两位小数
    小程序弹出层覆盖不了canvas
  • 原文地址:https://www.cnblogs.com/ruier/p/15517685.html
Copyright © 2011-2022 走看看