【pwn】诡异的movsx和cdqe

背景

这是在做hack.lu 2014 的pwn的一题时发现的,也算补一波自己的汇编姿势了。
1.png

科普

一般而言,我们定义一个字符型数据,正常认识中,我们默认它是无符号的。
char a; 错误认知:这是无符号的。
但是实际上编译器默认将其认为是有符号的。
当我们输入'\x7f'时,32位下转换成整形后其数据为0x0000007f
当我们输入'\x80'时,32位下转换成整形后其数据为0xffffff80

正文

在这边movsx为带符号位扩展,cdqe为转换DWORD(eax)成QWORD(RAX),所以经过这两步操作,我们的1个字节的字符型数据成功转换成了8字节整型数据,而且是带符号的。那么该整形数据的取证范围为-7f~+7f
所以我们可以利用该属性进行整型溢出(想想都兴奋),比如这个数据正好我们能控制,正好该数据是数组的索引。。那么我们就能够取到这个数组地址之前0x7f范围内的数据

×

你要赏我吃糖果吗?

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 背景
  2. 2. 科普
  3. 3. 正文
,
隐藏