通过off_by_one使得指向book1结构体的指针的最后一个字节被覆盖成00
然后我们再设置一下book1,使得它的指针去覆盖这个输入author_name多出来00
再调用打印的时候会把book1结构体的指针内容打印出来,我们就可以知道这个book1的结构体在哪了
然后我们再利用off_by_one去覆盖book1结构体指针的最后一个字节
book1_desc的指针的地址是7690,为了在经过修改后book1结构体指针指向的地方去伪造fack_book,我们要先填充0x10个字节到7700,然后再写fack_book的内容(其中有指向book2_name的指针的地址)。这样就可以打印出book2_name的地址了。
由于book2_name在mmap拓展的空间里,并且libc和mmap分配的堆之间的偏移是固定的,所以我们可以通过这个固定的偏移来计算libc地址
输入地址:0x55...56040
指向结构体指针的指针地址:0x55..56010
结构体指针存放地址:0x55...56060
book1结构体指针内容:0x555...57760
book1_desc指针地址:0x555...57770
book1_desc指针内容:0x555...7690
book2结构体指针内容:0x555...57790
book2_name指针地址:0x555...7798
book2_desc指针地址:0x555...77a0