zoukankan      html  css  js  c++  java
  • 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

    20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

    分析的c语言源码

    生成汇编代码——命令:gcc -g example.c -o example -m32

    进入gdb调试,先在main函数处设置一个断点,再run一下,使用disassemble指令获取汇编代码:

    通过info registers查看使用的寄存器:

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

    Step6:使用display /i $pc可查看当前执行的汇编代码,通过e(x)amine /nfu可查看寄存器的地址以及栈中的值

    过程:

    ·第一步:

    ·push 0x2:

    ·call将下一条指令的所在地址(即当时程序计数器PC的内容)入栈:

    ·push %ebp:

    ·mov %esp,%ebp:

    ·pushl 0x8(%ebp):

    ·call指令将下一条指令的地址入栈:

    ·push %ebp:

    ·mov %esp,%ebp:

    ·mov 0x8(%ebp),%eax:

    ·add $0x1,%eax:(计算)

    ·pop %ebp——将栈顶弹到%ebp中:

    ·ret_返回g中call的调用位置:

    ·add $0x4,%esp:

    ·leave返回准备栈:

    ·ret:

    ·add $0x4,%esp:

    ·add $0x3,%eax:

    %eip,%ebp,%esp,%eax的值和堆栈的变化情况

    序号 汇编代码 %eip %ebp %esp %eax 堆帧
    1 0x80483f9 0xffffd038 0xffffd038 0xf7fb7dbs 0x0
    2 push $0x2 0x80483fb 0xffffd038 0xffffd034 0xf7fb7dbc 0x2
    3 call 0x80483e6 0xffffd038 0xffffd030 0xf7fbdbc 0xffffd034 0x2
    4 push %ebp 0x80483e7 0xffffd038 0xffffd02c 0xf7fb7dbc 0xffffd038 0x8048400 0x2
    5 mov %esp,%ebp 0x80483e9 0xffffd02c 0xffffd02c 0xf7fb7dbc 0xffffd038 0x8048400 0x2
    6 pushl 0x8(%ebp) 0x80483ec 0xffffd02c 0xffffd028 0xf7fb7dbc 0x2 0xffffd038 0x8048400 0xffffd034 0x2
    6 call 0x80483db 0xffffd02c 0xffffd024 0xf7fb7dbc 0x80483f1 0x2 0xffffd038 0x8048400 0xffffd034 0x2
    7 push %ebp 0x80483dc 0xffffd02c 0xffffd020 0xf7fb7dbc 0xffffd02c 0x80483f1 0x2 0xffffd038 0xffffd030 0x8048400 0x2
    8 mov %esp,%ebp 0x80483de 0xffffd020 0xffffd020 0xf7fb7dbc 0xffffd020 0xffffd02c 0x80483f1 0x2 0xffffd038 0xffffd030 0x8048400 0x2
    9 mov 0x8(%ebp),%eax 0x80483e1 0xffffd020 0xffffd020 0x2 0xffffd020 0xffffd02c 0x80483f1 0x2 0xffffd038 0xffffd030 0x8048400 0x2
    10 add $0x1,%eax 0x80483e4 0xffffd020 0xffffd020 0x3 0xffffd020 0xffffd02c 0x80483f1 0x2 0xffffd038 0xffffd030 0x8048400 0x2
    11 pop %ebp 0x80483e5 0xffffd02c 0xffffd024 0x3 0xffffd024 0x80483f1 0x2 0xffffd038 0x8048400 0xffffd034 0x2
    12 ret 0x80483f1 0xffffd02c 0xffffd028 0x3 0xffffd028 0x2 0xffffd038 0x80448400 0x2
    13 add $0x4,%esp 0x80483f4 0xffffd02c 0xffffd02c 0x3 0xffffd02c 0xfffd038 0x8048400 0x2
    14 leave 0x80483f5 0xffffd038 0xffffd038 0x3 0xffffd030 0x8048400 0x2
    15 ret 0x8048400 0xffffd038 0xffffd034 0x3 0x2
    16 add $0x4,%esp 0x8048403 0xffffd038 0xffffd038 0x3 0x0
    15 add $0x3,5eax 0x8048406 0xffffd038 0xffffd038 0x6 0x0
  • 相关阅读:
    如何去掉修改Joomla、joomlart及其模版版权、标志、图标的方法
    如何joomla修改版权信息
    嫌我的键盘的backspace太小,就尝试了一下改键工具--keyTweak
    css3 -- 过渡与动画
    css3 -- 2D变换
    css3 -- 渐变
    css3 -- 颜色与不透明度
    css3 -- 背景图处理
    css3 -- 多列
    css3 -- 文本
  • 原文地址:https://www.cnblogs.com/20145223ymy/p/6129743.html
Copyright © 2011-2022 走看看