X86汇编基础

1. mov指令及几种内存寻址方式:


寄存器模式(register mode),以%开头的寄存器标示符

立即数(immediate):是以$开头的数值

直接寻址(direct):直接访问一个指定的内存地址的数据

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

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


AT&T汇编格式与Intel汇编格式略有不同

Linux内存使用的是AT&T汇编格式

2. 几个重要的汇编指令:push、pop、call、ret


eip(*)-后面的*表示不能被直接修改,只能通过特殊指令间接修改

IP是指令寄存器,存放当前指令的下一条指令的地址。CPU该执行哪条指令就是通过IP来指示的。
EIP是32位机的指令寄存器。

ESP (extended stack pointer)寄存器用于记录当前堆栈的顶部位置

EBP (extended base pointer) 寄存器用于记录当前堆栈的基准位置


案例一:


案例二:


案例三:



//在64位环境下编译成32位的汇编
gcc -S -o ccode32.s ccode.c -m32
//链接时会缺少构建32 位可执行程序缺少的包,使用以下指令安装:
sudo apt-get install libc6-dev-i386
//编译链接成32位的可执行文件
gcc -o ccode32 ccode.c -m32




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值