在内存中,地址是上低下高,利用内存时是从内存高位开始利用。但在已经定义了的内存小块内存中,内存却是从上到下(即从低址向高址)利用。

在完成实验的过程中,要注意地址的情况,内存数据与数值数据是不同的。在数值数据中,我们从左到右读,但在内存数据中,它是从右到左两个一读。比如数值数据0x12345678,转变为内存数据就是0x78563412

这个实验实际上就是巧用字符串截断符null

在实验中要弄清楚地址,地址一搞通,实验就差不多完成了

 wKioL1ZdE92g-3JjAAC_1zEYWcU804.png

                            

栈帧布局:wKioL1ZdE-mTxjjBAAKA92WHoMM835.png

覆盖邻接变量:wKiom1ZdE46z3ymUAAHZGjqEP8g406.png

修改邻接变量成功:

wKioL1ZdE_-jDL8zAAFi_guEtV8740.png

在这个实验中,如果你的输入字符串字符小于1234567,那么strcmp()函数会返回 -1-1会将authenticated的内存改为0xFFFFFFFF,这时字符数组再溢出的话,authenticated的内存会被改为0xFFFFFF00,这样将不能通过验证,显示incorrent password!