计算机是如何工作的?
2015-03-09 09:17
141 查看
作者:申小宁 原创作品转载请注明出处
《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000
实验截图:
c代码:
编译命令:
汇编代码:
基础知识
寄存器寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令,数据和地址。eip:存储当前指令寄存器,每执行完一条指令,eip将指向下一条指令。ebp:是"基址指针"(BASE POINTER), 它最经常被用作高级语言函数调用的"框架指针"(frame pointer). 在破解的时候,经常可以看见一个标准的函数起始代码:esp:专门用作堆栈指针,被形象地称为栈顶指针,堆栈的顶部是地址小的区域,压入堆栈的数据越多,ESP也就越来越小。在32位平台上,ESP每次减少4字节。eax:是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。
寻址方式寄存器寻址 movl %eax,%ebx 把eax的值,赋给ebx立即寻址 movl $0x1234,%eax 把0x1234这个立即数,赋值给eax。直接寻址 movl 0x12345,%eax 把0x12345这个内存地址存放的数据赋值给eax。间接寻址 movl (%eax),%ebx eax上存放的一个内存地址,这个内存地址存放的值,赋值给ebx。变址寻址 movl 8(%eax),%ebx eax上存放的值,加上偏移量8 后,所指向的位置存放的内存地址,这个内存地址存放的值,赋值给ebx
从main函数入手:第一句:pushl %ebp
Pushl %ebp(表示把eax寄存器的内容压倒栈顶):等价于:subl $4,%esp (堆栈的栈顶) movl %ebp,(%esp) 第二句:movl %esp, %ebp使得ebp指向esp指向的位置。第三句:subl $4, %esp栈顶向下偏移4个字节。第四句:movl $99, (%esp)将一个立即99存入栈顶。第五句:call f 即调用函数f()call 指令可分解成 pushl eipmovl f eip
f函数pushl %ebp (存储EBP位置,压栈,esp加一)movl %esp %ebp (esp 指向EBP)...movl %eax (%esp)
把esp存储内存地址 指向 eax寄存器call g执行函数g
g函数
ret 函数返回作用 返回执行gax内的指令。
总结:汇编语言是计算机语言的基础,想要深入理解linux内核或者学习一些其他语言,汇编都是基础,小伙伴们加油了!!!
《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000
实验截图:
c代码:
编译命令:
汇编代码:
基础知识
寄存器寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令,数据和地址。eip:存储当前指令寄存器,每执行完一条指令,eip将指向下一条指令。ebp:是"基址指针"(BASE POINTER), 它最经常被用作高级语言函数调用的"框架指针"(frame pointer). 在破解的时候,经常可以看见一个标准的函数起始代码:esp:专门用作堆栈指针,被形象地称为栈顶指针,堆栈的顶部是地址小的区域,压入堆栈的数据越多,ESP也就越来越小。在32位平台上,ESP每次减少4字节。eax:是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。
寻址方式寄存器寻址 movl %eax,%ebx 把eax的值,赋给ebx立即寻址 movl $0x1234,%eax 把0x1234这个立即数,赋值给eax。直接寻址 movl 0x12345,%eax 把0x12345这个内存地址存放的数据赋值给eax。间接寻址 movl (%eax),%ebx eax上存放的一个内存地址,这个内存地址存放的值,赋值给ebx。变址寻址 movl 8(%eax),%ebx eax上存放的值,加上偏移量8 后,所指向的位置存放的内存地址,这个内存地址存放的值,赋值给ebx
从main函数入手:第一句:pushl %ebp
Pushl %ebp(表示把eax寄存器的内容压倒栈顶):等价于:subl $4,%esp (堆栈的栈顶) movl %ebp,(%esp) 第二句:movl %esp, %ebp使得ebp指向esp指向的位置。第三句:subl $4, %esp栈顶向下偏移4个字节。第四句:movl $99, (%esp)将一个立即99存入栈顶。第五句:call f 即调用函数f()call 指令可分解成 pushl eipmovl f eip
f函数pushl %ebp (存储EBP位置,压栈,esp加一)movl %esp %ebp (esp 指向EBP)...movl %eax (%esp)
把esp存储内存地址 指向 eax寄存器call g执行函数g
g函数
ret 函数返回作用 返回执行gax内的指令。
总结:汇编语言是计算机语言的基础,想要深入理解linux内核或者学习一些其他语言,汇编都是基础,小伙伴们加油了!!!
相关文章推荐
- 企业如何进行计算机取证工作
- 如何让计算机电源独自工作,风扇转起来
- Linux内核分析课程1_计算机是如何工作的
- 图解分析汇编代码以理解计算机是如何工作的
- 反汇编程序分析计算机是如何工作的
- 计算机开机自检是如何工作的
- 从汇编语言角度看C语言代码,理解计算机如何工作
- 浅谈计算机是如何工作的及Linux下的简单反汇编操作
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 通过分析汇编代码理解计算机如何工作
- 企业如何进行计算机取证工作
- ArcGIS 10.1 for Server修改计算机名称后,如何使Server工作起来
- ArcGIS 10.1 for Server修改计算机名称后,如何使Server工作起来
- Linux学习之路一计算机是如何工作的
- 计算机实际上是如何工作的
- 企业如何进行计算机取证工作 推荐
- 计算机是如何工作的_2
- 计算机是如何工作的(最简单透彻的解释)
- 计算机是如何工作的?
- 《Linux内核分析》MOOC课程之从汇编语言角度看计算机是如何工作的