清华操作系统实验--80x86汇编基础
前言
80x86架构里,因为历史原因字是16位的,因此在汇编指令中用后缀-b,-w,-l来表示操作数是字节 字 或是双字
C声明 | Intel数据类型 | 汇编代码后缀 | 大小(字节) |
---|---|---|---|
char | 字节 | b | 1 |
shrot | 字 | w | 2 |
int | 双字 | l | 4 |
long int | 双字 | l | 4 |
long long int | -- | -- | 4 |
char * | 双字 | l | 4 |
float | 单精度 | s | 4 |
double | 双精度 | l | 8 |
long double | 扩展精度 | t | 10/12 |
指令寄存器PC指向下一条指令的地址
EIP(x86-32)或RIP(x86-64)
将C程序编译成汇编
C程序
int sum(int x,int y){
int t=x+y;
return t;
}
编译指令
gcc -O2 -S code.c -m32 -fno-omit-frame-pointer
-O2 表示优化的级别
-S 表示在编译时生成汇编代码后就停止
-m32 表示生成32位汇编代码
-fno-omit-frame-pointer 表示不进行栈指针的优化
生成的汇编代码
ESP一直指向栈顶的指针,而EBP只是存取某时刻的栈顶指针,以方便对栈的操作,如获取函数参数、局部变量等。
_sum:
pushl %ebp ;保存栈基址
movl %esp, %ebp ;将栈顶作为新的栈基址
subl $16, %esp
movl 8(%ebp), %edx ;取参数
movl 12(%ebp), %eax
addl %edx, %eax ;相加
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
leave
ret
第一条汇编指令
int t = x+y;
addl 8(%ebp) %eax
类似于
int eax;
int *ebp;
eax += ebp[2]
%eax是目的寄存器
8086寄存器
CS和IP寄存器指示了CPU当前要读取的指令的地址.
任意时刻,CPU将CS:IP执行的内容当作指令执行
指令地址计算方法:将CS左移4位+IP
1234:45 指向的地址为0x12340+0x45=0x12385
清华操作系统实验--80x86汇编基础的更多相关文章
- [操作系统实验lab3]实验报告
[感受] 这次操作系统实验感觉还是比较难的,除了因为助教老师笔误引发的2个错误外,还有一些关键性的理解的地方感觉还没有很到位,这些天一直在不断地消化.理解Lab3里的内容,到现在感觉比Lab2里面所蕴 ...
- 20155324 实验5 MSF基础应用
20155324 实验5 MSF基础应用 ms08_067 用search命令,搜索与ms08_067相关的模块,如图: 服务器信息块(SMB)是一个网络文件共享协议,它允许应用程序和终端用户从远端的 ...
- 2017-2018-2 20155225《网络对抗技术》实验五 MSF基础应用
2017-2018-2 20155225<网络对抗技术>实验五 MSF基础应用 ms08_067 用search命令,搜索与ms08_067相关的模块,如图: 找到了对应的攻击模块expl ...
- 20155201 网络攻防技术 实验五 MSF基础应用
20155201 网络攻防技术 实验五 MSF基础应用 一.实践内容 一个主动攻击实践,如ms08_067 一个针对浏览器的攻击,如ms11_050 一个针对客户端的攻击,如Adobe 成功应用任何一 ...
- 20155223 实验5 MSF基础应用
20155223 实验5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode? exploit:漏洞攻击.一个exploit程序肯定会触发系统的一个或多个漏 ...
- 北航操作系统实验2019:Lab4-1流程梳理
北航操作系统实验2019:Lab4-1流程梳理 前言 操作系统的实验课实在令人头秃.我们需要在两周时间内学习相关知识.读懂指导书.读懂代码.补全代码.处理玄学bug和祖传bug,以及回答令人窒息的思考 ...
- Lab_0操作系统实验准备(全)
一.实验介绍 实验目的: 知识储备: 二.相关下载 1.下载镜像文件 这个镜像文件是vdi类型的,只能用visualbox下载 链接:https://pan.baidu.com/s/1L7WX6ju4 ...
- win32汇编基础
win32汇编基础知识 Debug 版本|Release 版本 Debug 是"调试"的意思,Debug 版本就是为调试而生的,编译器在生成 Debug 版本的程序时会加入调试辅助 ...
- ASM:《X86汇编语言-从实模式到保护模式》5-7章:汇编基础
第5-7章感觉是这一本书中比较奇怪的章节,可能是作者考虑到读者人群水平的差异,故意由浅入深地讲如何在屏幕上显示字符和使用mov,jmp指令等等,但是这样讲的东西有点重复,而且看了第六,第七章以后,感觉 ...
随机推荐
- Entity Framework 6如何进行导航属性的筛选(context.Msg.First(t=>t.Id==1).Include(t=>t.MsgDetail),筛选MsgDetail带条件)
问题: https://q.cnblogs.com/q/98333/ Msg表(Id,Content,IsDel).内有 virtual ICollection<MsgDetail> Ms ...
- Flink -- Keyed State
/* <pre>{@code * DataStream<MyType> stream = ...; * KeyedStream<MyType> keyedStrea ...
- 通过pytty工具代理连接数据库mysql(绕开数据库白名单限制)
1.下载putty在本机,不用安装. 2.数据库地址及端口,输入服务器账户.密码登录. 输入数据库地址.端口及本机映射端口 输入服务器账户.密码登录 然后本地新建数据库连接就可以了
- javascript高级技巧篇(作用域安全、防篡改、惰性载入、节流、自定义事件,拖放)
安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式字符串.每个类在内部都有一个[[Class]]属性 ...
- xargs与管道的区别
一.直观感受 echo '--help' | cat echo的输出通过管道定向到cat的输入, 然后cat从其标准输入中读取待处理的文本内容, 输出结果: --help echo '--help' ...
- 20190122 loop
declare a number; v_begin date := to_date('201901013','yyyymmdd'); v_end date := to_date('20190119', ...
- sed 操作命令
sed介绍 grep 只能过滤文件内容,sed既能过滤文件内容同时还能对文件内容进行修改. sed 算是一种编程语言,它有自己的固定语法. sed是一种行编辑器,sed会在内存中开辟一块独立的空间( ...
- Z字形扫描
#include<cstdio> #include<iostream> #include<algorithm> #include<vector> #in ...
- SQL——查询一段时间内每天的数据,按天将数据封装进行封存
DROP TABLE IF EXISTS `T_ROTA_RECORD`; CREATE TABLE `T_ROTA_RECORD` ( `id` ) NOT NULL AUTO_INCREMENT, ...
- WCG distribution of byteball
https://steemit.com/byteball/@punqtured/processing-for-good-get-rewarded-for-crunching-numbers-to-cu ...