Advertisement
kotoroshinoto

DERPtastic

Mar 4th, 2014
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.39 KB | None | 0 0
  1. #include <stdio.h>
  2. void printItem(char* name, int* item, int gaps);
  3. void printItemStr(char* name, char* item, int gaps);
  4. void printArgList(int argc, char ** argv);
  5. void printArgListSTR(int argc, char ** argv);
  6. void PrintMap(int argc,char ** argv, int mode);
  7. int *argcP=0;
  8. char*** argvP=0;
  9. void separatorLine(int mode);
  10. int main(int argc, char ** argv) {
  11.     PrintMap(argc,argv,0);
  12.     PrintMap(argc,argv,1);
  13.     return 0;
  14. }
  15.  
  16. void PrintMap(int argc,char ** argv,int mode){
  17.     int i=0;
  18.     argcP=&argc;
  19.     argvP=&argv;
  20.     char namebuf[12];
  21.     if(mode){
  22.         printf("Memory map filled with the command and parameters in ASCII text and others in hexadecimals.\n\n");
  23.     } else {
  24.         printf("Memory map filled with hexa decimals only:\n\n");
  25.     }
  26.     separatorLine(2);
  27.     separatorLine(0);
  28.     separatorLine(0);
  29.  
  30.     //TODO print args in reverse order
  31.     separatorLine(0);
  32. //  if(mode){
  33. //      printArgListSTR(argc,argv);
  34. //  } else {
  35. //      printArgList(argc,argv);
  36. //  }
  37.  
  38.     separatorLine(0);
  39.     separatorLine(0);
  40.     //TODO print arg pointers in reverse order
  41.     separatorLine(0);
  42.     i=argc-1;
  43.     while(i>=0){
  44.         sprintf(namebuf,"argv+%i",i);
  45.         printItem(namebuf,(int*)(argv+i),0);
  46.         i--;
  47.     }
  48.     separatorLine(0);
  49.     separatorLine(0);
  50.     //TODO print argv and argc
  51.     separatorLine(0);
  52.     printItem("argv",argvP,0);
  53.  
  54.     printItem("argc",argcP,0);
  55.  
  56.     separatorLine(0);
  57.     separatorLine(0);
  58.     separatorLine(1);
  59.     printf("\n\n\n\n\n");
  60. }
  61. void separatorLine(int mode){
  62.     printf("%-7s","");
  63.     printf("+------+------+------+------+");
  64.     if(mode == 1){
  65.         printf(" 00000000");
  66.     } else if(mode == 2){
  67.         printf(" FFFFFFFF");
  68.     }
  69.     printf("\n");
  70. }
  71. void printItem(char* name, int* item, int gaps){
  72.  
  73.     if(name){
  74.         printf("%-7s",name);
  75.     } else{
  76.         printf("%-7s","");
  77.     }
  78.  
  79.     switch(gaps){
  80.     case 0:
  81.         printf("|  %02X  |  %02X  |  %02X  |  %02X  | %08X\n",(*item >> (8*3)) & 0xFF, (*item >> (8*2)) & 0xFF,(*item >> 8) & 0xFF, *item & 0xFF,(unsigned int)item);
  82.         break;
  83.     case 1:
  84.         printf("|  --  |  %02X  |  %02X  |  %02X  | %08X\n", (*item >> (8*2)) & 0xFF,(*item >> 8) & 0xFF, *item & 0xFF,(unsigned int)item);
  85.         break;
  86.     case 2:
  87.         printf("|  --  |  --  |  %02X  |  %02X  | %08X\n",(*item >> 8) & 0xFF, *item & 0xFF,(unsigned int)item);
  88.         break;
  89.     case 3:
  90.         printf("|  --  |  --  |  --  |  %02X  | %08X\n", *item & 0xFF,(unsigned int)item);
  91.         break;
  92.     default:
  93.         break;
  94.     }
  95.     separatorLine(0);
  96. }
  97. void printItemStr(char* name, char* item, int gaps){
  98.  
  99.     if(name){
  100.         printf("%-7s",name);
  101.     } else{
  102.         printf("%-7s","");
  103.     }
  104.     char ch1[3]={0,0,0};
  105.     char ch2[3]={0,0,0};
  106.     char ch3[3]={0,0,0};
  107.     char ch4[3]={0,0,0};
  108.     if(gaps < 1){
  109.         if(item[3] == '\0'){
  110.             ch4[0]='\\';
  111.             ch4[1]='0';
  112.         } else {
  113.             ch4[0] = item[3];
  114.         }
  115.     }
  116.     if(gaps < 2){
  117.         if(item[2] == '\0'){
  118.             ch3[0]='\\';
  119.             ch3[1]='0';
  120.         } else {
  121.             ch3[0] = item[2];
  122.         }
  123.     }
  124.     if(gaps < 3){
  125.         if(item[1] == '\0'){
  126.             ch2[0]='\\';
  127.             ch2[1]='0';
  128.         } else {
  129.             ch2[0] = item[1];
  130.         }
  131.     }
  132.  
  133.     if(item[0] == '\0'){
  134.         ch1[0]='\\';
  135.         ch1[1]='0';
  136.     } else {
  137.         ch1[0] = item[0];
  138.     }
  139.  
  140.     printf("|  %-2s  |  %-2s  |  %-2s  |  %-2s  | %08X\n",ch4, ch3, ch2, ch1,(unsigned int)item);
  141.     separatorLine(0);
  142. }
  143.  
  144. void printArgList(int argc, char ** argv){
  145.     size_t sz=0;
  146.     void* stopPos=0;
  147.     int pos=0;
  148.     char* ptr=0;
  149.     unsigned int gaps=0;
  150.     while(argv[argc-1][pos]){
  151.         pos++;
  152.     }
  153.     stopPos=&(argv[argc-1][pos]);
  154.     sz=((unsigned int)stopPos-(unsigned int)(*argv))+1;
  155.     gaps=4-sz % 4;
  156.     if(gaps == 4){gaps=0;}
  157.  
  158.     //  printf("\n%X\n",(unsigned int)stopPos);
  159.     //  printf("%i\n",((unsigned int) stopPos)-((unsigned int)(*argv)));
  160. //  fprintf(stderr,"size: %u, gaps: %u, *argv: %08X, stopPos: %08X\n",sz,gaps,(unsigned)*argv,(unsigned)stopPos);
  161.     ptr=*argv+sz-(sz%4);
  162.     printItem(0,(int*)ptr,gaps);
  163.     ptr-=4;
  164.     while((char*)ptr >= *argv){
  165.         printItem(0,(int*)ptr,0);
  166.         ptr-=4;
  167.     }
  168. }
  169. void printArgListSTR(int argc, char ** argv){
  170.     size_t sz=0;
  171.     void* stopPos=0;
  172.     int pos=0;
  173.     char* ptr=0;
  174.     unsigned int gaps=0;
  175.     while(argv[argc-1][pos]){
  176.         pos++;
  177.     }
  178.     stopPos=&(argv[argc-1][pos]);
  179.     sz=((unsigned int)stopPos-(unsigned int)(*argv))+1;
  180.     gaps=4-sz % 4;
  181.     if(gaps == 4){gaps=0;}
  182.  
  183.     //  printf("\n%X\n",(unsigned int)stopPos);
  184.     //  printf("%i\n",((unsigned int) stopPos)-((unsigned int)(*argv)));
  185. //  fprintf(stderr,"size: %u, gaps: %u, *argv: %08X, stopPos: %08X\n",sz,gaps,(unsigned)*argv,(unsigned)stopPos);
  186.     ptr=*argv+sz-(sz%4);
  187.     printItemStr(0,ptr,gaps);
  188.     ptr-=4;
  189.     while(ptr >= *argv){
  190.         printItemStr(0,ptr,0);
  191.         ptr-=4;
  192.     }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement