由一个简单的程序学习常见汇编指令
时间:2022-07-23
本文章向大家介绍由一个简单的程序学习常见汇编指令,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本篇原创作者: Rj45
前言
一直以来,内心有股焦急焦虑,急冲冲的学习,急冲冲的比赛,没有时间和心思回过头来静心总结。突然之间想安静下来回顾和记录一下pwn的知识点 其实是写web有点累了,想切换一下脑壳,看心情更新吧
程序
编译
gcc stack.c -o stack -m32
反汇编分析
objdump -d stack -M intel
080483db <fun>:
80483db: 55 push ebp//将ebp压入栈
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
常见汇编指令
1、寄存器
2、常见汇编指令
- linux运维中的命令梳理(四)
- linux运维中的命令梳理(三)
- 轻松水印-批量提取exif信息加水印的工具
- Enterprise Library 4.1学习笔记7----缓存应用程序块之SqlDependency
- linux运维中的命令梳理(一)
- 可视化你的BLAST结果
- linux运维中的命令梳理(二)
- VB-取日期属于星期几
- 全球AI新闻创新实践系列③:华邮、雅虎、美联社、Quartz怎么干!
- nginx+php负载均衡集群环境中的session共享方案梳理
- PowerPoint发布及链接图片的处理
- EXCEL单元格的引用方式
- SqlDependency学习笔记
- linux系统下对网站实施负载均衡+高可用集群需要考虑的几点
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 有序链表转换二叉搜索树
- 128. 最长连续序列
- 【DB笔试面试859】在Oracle中,内核参数kernel.shmall、kernel.shmall等分别代表什么含义?
- Nginx配置SSL证书
- java_Object类、日期时间类、System类、包装类
- [周末往期回顾]UNDO_TABLESPACE参数
- WordPress固定链接后404解决方法
- [Oracle故障处理]记一次INST_DRTLD_MISMATCH导致的version count过多的问题
- 查表法实现十进制转化成其他进制
- ArrayList源码分析
- java_String类、StringBuilder类、Arrays类、Math类的使用
- 抽象类与接口
- java_static、final、super、this关键字的使用
- Lambda表达式
- java_字节流、字符流