博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
x86汇编
阅读量:6905 次
发布时间:2019-06-27

本文共 1082 字,大约阅读时间需要 3 分钟。

memory holds instructions and data

CPU interpreter of instructions

 

EIP is incremented after each instruction

instruction are different length

EIP modified by CALL, RET, JMP, and conditional JMP

 

Registers for work space

eax 累加器(Accumulator)

ebs 基地址寄存器 Base Registers

ecx 计数寄存器 count Registers

edx 数据寄存器 data registers

ebp 堆栈基指针 base pointer

esi  edi 变址寄存器 index register

esp 堆栈顶指针 stack pointer

 

movl %eax, %edx         edx=eax;     register mode

movl $0x123, %edx       edx=0x123;  immediate

注:立即数是以$开头的数值

movl 0x123, %edx        edx=*(int32_t*)0x123; direct

注:直接寻址:直接访问一个指定的内存地址的数据;

movl (%ebx), %edx      edx=*(int32_t*)ebx; indirect

注:间接寻址:将寄存器的的值作为一个内存地址来访问内存。

movl 4(%ebx), %edx    edx=*(int32_t*)(ebx+4); displace

注:变址寻址:在间接寻址之时改变寄存器的数值

 

stack memory + operations

push %eax    等价于  subl $4, %esp    movl %eax, (%esp)

esp向下移一个位; eax的值存放到esp所指向的地址空间

pop %eax      等价于 movl (%esp), %eax  add $4, %esp

将esp所指向地址的数值传递给eax,同时esp向上移一位

call 0x12345   等价于 pushl %eip(*)   movl $0x12345, %eip(*)

将eip入栈,同时 将立即数赋给eip。

ret   等价于 popl %eip(*)  将之前的eip的数值还给eip。

eip寄存器不能被直接修改,只能通过特殊指令间接修改。

 

转载于:https://www.cnblogs.com/passion-hzhang/p/6275694.html

你可能感兴趣的文章
private static
查看>>
Java面试不得不知的程序(二)
查看>>
检测数据类型的几种方式
查看>>
Core Dump解析(1)
查看>>
PAT顶级 1002. Business (35)
查看>>
【jenkins】jenkins 持续集成本地项目(win)
查看>>
springmvc处理json
查看>>
【递推】【DFS】【枚举】Gym - 101246C - Explode 'Em All
查看>>
C++ 设置自动启动
查看>>
bat 卸载程序的脚本
查看>>
泛型(二)
查看>>
【BZOJ】1700: [Usaco2007 Jan]Problem Solving 解题
查看>>
面向对象课程第一次总结性博客作业
查看>>
Spring AOP
查看>>
嵌套的定义
查看>>
零基础嵌入式Linux开发工程师培训视频
查看>>
C语言:联合变量
查看>>
Javascript 封装方法
查看>>
poj 1187 陨石的秘密
查看>>
数组常用的几种方法
查看>>