scanf/fscanf/vscanf 在调shellcode的时候的问题

今天在调shellcode的时候遇到了一个小问题,shellcode的逻辑功能没有任何问题,但是用的时候无法执行。在OD里面调的时候发现,shellcode的后半段变成了cccc… 于是分析了下代码,发现是shellcode中有个bit是0b,然后在读取完之后变成了00cccc char password[1024]; FILE * fp; if(!(fp=fopen(“password.txt”,”rw+”))) { printf(“test\n”); exit(0); } fscanf(fp,”%s”,password); 后面password会导致溢出 shellcode从password.txt中传入,最后发现是fscanf的问题导致的 上网看了下fscanf的源码发现和scanf一样都是调用vscanf,然后当以“%s”读取字符串的时候会把某些字符解析成了有含义的符号: Hex Dec Ctrl Name 0x09 9 ^I Tab 0x0A 10 ^J Line Feed 0x0B 11 ^K Verticle Feed 0x0C 12 ^L Form Feed 0x0D 13 ^M Carriage Return 0x1A 26 ^Z End of File 0x20 32 Space 神奇的发现读取“00”的时候并没有问题,然后出了%s,其他几个格式化字符: %d — […]