常用的输入输出函数getchargetsscanfputcharputsprintfgetcharintgetchar(void);返回值为int,所以需要用一个int变量来接收,不管输入几个字符,每次都只接收第一个字符,常与while和putchar配合使用。从下面这张图可以看出,输入一个空格也会打印当然,获取一个字符用得不多,每次都需要获取一串,所以我们可以配合while来使用。用while来循环获取,不满足某一条件就退出。下面是三个例子:一直获取,一直输出,直到用户手动结束当输入的包含.就结束输入换行结束getschar*gets(char*buffer);从标准输入流中读取一行,并存储
攻防世界pwn1题解下载附件,file命令识别文件为64位,checksec命令查看程序保护情况,如图,有Canary和NX保护。在ida64中打开程序,程序的主要功能有两个:存储用户输入的字符串内容打印用户输入的字符串内容特别的注意到,字符串数组大小为136(0x88),而read运行的最大输入大小为0x100,如图中红色框标注,因此可能存在栈溢出。同时puts可以将输入打出,因此可以想到借此泄露出canary值。在汇编程序40091C地址处,可以看到canary值保存在rbp上8字节处(即紧邻rbp)。GCC的canary,x86_64下从fs:0x28偏移处获取,32位下从gs:0x14
攻防世界pwn1题解下载附件,file命令识别文件为64位,checksec命令查看程序保护情况,如图,有Canary和NX保护。在ida64中打开程序,程序的主要功能有两个:存储用户输入的字符串内容打印用户输入的字符串内容特别的注意到,字符串数组大小为136(0x88),而read运行的最大输入大小为0x100,如图中红色框标注,因此可能存在栈溢出。同时puts可以将输入打出,因此可以想到借此泄露出canary值。在汇编程序40091C地址处,可以看到canary值保存在rbp上8字节处(即紧邻rbp)。GCC的canary,x86_64下从fs:0x28偏移处获取,32位下从gs:0x14