解题思路: 本题除了PIE 和 RELRO 其他保护都开了 而ELF文件中告诉了你flag的位置,所以要通过某个漏洞去读取这个地址上的flag,在触发 CANARY 这个保护时, 程序会终止并且输出argv[0] 的内容,利用这点加上gets函数的无限读取可以覆盖argv[0] 处的内容,从而输出我们想输出的内容
(本来在pwnable.kr 上做过类似的题目,但是过了太久忘光了,全程在想有没有其他突破口,好记性不如烂笔头,这里再写一遍)
知识 1. 从其他wp学到 ELF文件较小时 某些段会被映射多次,那么flag也就有多个地址了
2. 选取 argv[0] 的地址 其中**/home/cx/smashes 的**地址有两个,但是要算偏移量的地址不取它们两个 再 peda 中输入 stack xx(要查看的栈空间的大小) 要覆盖的是argv[0] 数组元素中的内容,不是*argv[0] 的内容,所以 argv[0] 的地址为 0x7fffffffe0d8,之后再算偏移量就行了