具体实现过程如下:
1.在getbuf中创建断点,得到%gs:0x14的值,读出ebp中存放的值
2.输入任意十二个字符填满char[12],继续输入%gs:0x14的值,迫使程序检查不出缓存区溢出,填满栈贞剩下的8个字节,输入ebp中存放的值,test()中call printf的地址,0x1,0x8048771,0xdeadbeef
即:aa aa aa aa aa aa aa aa aa aa aa aa 00 99 dd 78 11 11 11 11 11 11 11 11 d8 ef ff bf 32 86 04 08 01 00 00 00 71 87 04 08 ef bf ad de
总结;虽然实现了return 0xdeadbeef的目的,但是实际应用价值不大,尤其是%gs:0x14每次的值都会变化,所以只能在gdb模式下得到%gs:0x14的值然后在溢出时刻意将其添回,才不会被程序发现缓存区溢出,随着gcc的越变越聪明,给人的可趁之机也越来越少阿 ~~~