• 汇编指令


    源码

    编译指令:gcc -code.c -o elf -32 (由源码产生目标文件 -32 为32位程序) 在此即为:gcc -stack.c -o stack elf -32

    反汇编

    反汇编指令:objdump -d stack -M intel

    --disassemble -d 从objfile中反汇编那些特定指令机器码的section

    -M intel 显示intel 语法

    080483db <fun>:
    80483db:	55                   	push   ebp//将ebp压入栈,同时将esp-=4
    push ebp 先ESP-=4,将寄存器中(EBP)中的数据送入SS:SP指向的内存单元,esp指向栈顶
     80483dc:	89 e5                	mov    ebp,esp//把esp的值传递给ebp,设置当前ebp
     80483de:	83 ec 10             	sub    esp,0x10//在栈上分配0x10个字节的空间,给<fun>函数开辟空间,范围是(ebp, ebp-0x10)
    //下图是开辟新的栈空间:
    

    080483db <fun>:
    80483db:	55                   	push   ebp//将ebp压入栈,同时将esp-=4
     80483dc:	89 e5                	mov    ebp,esp//将esp压入栈
     80483de:	83 ec 10             	sub    esp,0x10//在栈上分配0x10个字节的空间
     80483e1:	c7 45 f8 01 00 00 00 	mov    DWORD PTR [ebp-0x8],0x1//将0x1存储在[ebp-0x8],dword是双字即四个字节,ptr是指针,这里指[ebp-0x8]地址是一个双字型地址
     80483e8:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]//将[esp+0x8]的数据复制到eax
     80483eb:	89 45 fc             	mov    DWORD PTR [ebp-0x4],eax//将eax内的数据复制到[ebp-0x4]
     80483ee:	8b 55 08             	mov    edx,DWORD PTR [ebp+0x8]//将[ebp+0x8]内的数据复制到edx
     80483f1:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]//将[ebp+0xc]内的数据复制到eax
     80483f4:	01 d0                	add    eax,edx//将edx内的数据与eax内的数据相加,复制到eax
     80483f6:	c9                   	leave  //等价于mov ebp,esp;pop ebp
     80483f7:	c3                   	ret   //等价于pop ip;用栈中的数据,修改IP的内容,实现近转移
    
    080483f8 <main>:
     80483f8:	55                   	push   ebp
     80483f9:	89 e5                	mov    ebp,esp
     80483fb:	6a 14                	push   0x14//将0x14=20压入栈
     80483fd:	6a 0a                	push   0xa////将0xa=10压入栈
     80483ff:	e8 d7 ff ff ff       	call   80483db <fun>//调用fun函数
     8048404:	83 c4 08             	add    esp,0x8//esp+8,进行栈帧还原
     8048407:	b8 00 00 00 00       	mov    eax,0x0//清空eax内的数据
     804840c:	c9                   	leave  
     804840d:	c3                   	ret    
     804840e:	66 90                	xchg   ax,ax//交换ax;等价于nop       
    

    视频推荐

    https://www.bilibili.com/video/BV1Hi4y1s7fr/

  • 相关阅读:
    elementUI table中的button 操作
    数组
    数组,字符串,数字之间的相互转换
    Element upload
    Vue中涉及到的三目运算与v-if结合
    ElementUI的input用法
    javascript的正则表达式
    Vue表单+Vue全局指令 v-focus 的引用
    ztree 异步加载大数据(一)
    vue mixins 混入项目实例
  • 原文地址:https://www.cnblogs.com/zuoanfengxi/p/12325864.html
Copyright © 2020-2023  润新知