| 
                  C Formatted Output Functions
                   Vulnerabilities, Attacks, and Mitigation  | 
            
| 
                   
                      
                     Prof. David Bernstein
                       | 
            
| Computer Science Department | 
| bernstdh@jmu.edu | 
               
            
         
            
         
         
            
         printf():
      printf() uses the number of conversion specifications
              in the format string to determine the number of actual parameters
              printf(user_data, total)
                     
         
            
         printf("%p"); (where "%p" is the pointer specifier)
              va_start() uses the last fixed parameter
              (i.e., the format string) for initializationva_arg() increments the pointer and returns
              an address on the stack
         
            
         printf("%s", p);
                  p and continuing until a '\0'
              is encounteredprintf("%s");
                  va_arg() returns the value on the stack
              below the address of the fixed parameter'\0') will be printed
                     
                  
         
            
         printf("\xdc\xf5\x42\x01%x%x%x%s", 1, 2, 3);
                     
                     \xdc
                     \xf5
                     \x42 (B)\x01
                     00000001
                     00000002
                     00000003
                     0x0142f5dc up until the first
              '\0'
                     
         
            
         printf("%s%s%s%s%s%s%s%s%s%s%s%s");
                     SIGSEGV signal or abnormal termination)
              after the last '\0' character%n Vulnerability
         
            
         %n conversion specifier writes the number of
              characters the address provided as an argumentprintf("JMU%n", (int *)& i);
                     i will contain the value 3
         
            
         tainted) if you can't 
              completely exclude it%n
                  
         
            
         -Wformat checks the number of parameters-Wformat-nonliteral checks the format strings that
              are not literals