[祭祖作业一]二进制炸弹破解笔记3

XCHG指令不允许的情况有以下四种:

  1. 不能同时都为内存操作数
  2. 任何一个操作数都不能为段寄存器
  3. 任何一个操作数不能为立即数
  4. 两个操作数的长度不能不相等

PHASE_3

PHASE_4

一个和我的炸弹很像的代码:参考

XCHG

交换指令XCHG是两个寄存器,寄存器和内存变量之间内容的交换指令,两个操作数的数据类型要相同,可以是一个字节,也可以是一个字,也可以是双字。

MOVZBL

汇编语言之 movsbl和 movzbl
在这里插入图片描述

ESP和EBP

esp和ebp详解

关于MOV指令

MOVSX说明:带符号扩展传送指令
符号扩展的意思是,当计算机存储某一个有符号数时,符号位位于该数的第一位,所以,当扩展一个负数的时候需要将扩展的高位全赋为1.对于正数而言,符号扩展和零扩展MOVZX是一样的,将扩展的高位全赋为0.

首先理解下plt是procedure linkage table,got是global offset table。got表中存放的是外部符号的地址。plt表中存放的是函数地址。下面看下实验具体情况。

参考:介绍
在这里插入图片描述
(ch&0xf0)里ch是你输入的字符,&按位与运算符,0xf0是8位掩码,这里将ch低4位掩出,>>是算术右移运算符,将已掩出低4位的值的低4位移出,只剩下高4位.
(ch&0x0f)原理同上,不过是将高4位掩出

参考:
1.CSAPP: bomb lab
2.二进制炸弹
3.超强大神指导
4.bomblab实验-bomb1~6and隐藏关
5.实验参考

关于ret指令
https://blog.csdn.net/u013018721/article/details/51264199
在这里RET指令的内部操作是:栈顶字单元出栈,其值赋给IP寄存器。即实现了一个程序的转移,将栈顶字单元保存的偏移地址作为下一条指令的偏移地址。

不带任何参数时,用于在子程序的结束位置,被调用的子程序必须有ret指令,否则调用没有ret指令的子程序会导致自陷,子程序执行完之后处于失控状态。带参数ret n 表示子程序返回主程序的同时,堆栈弹出n个字节(栈顶指针减n)

关于cmp
https://blog.csdn.net/wfq_1985/article/details/6166002

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值