CPP   29
dump memory
Guest on 20th September 2023 12:06:42 AM


  1. #include<stdio.h>
  2. #include<ctype.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. void dump_memory(int type, void *address, int n){
  6.  
  7. int i;
  8. int k=0;
  9. int length;
  10. int longest=0;
  11.  
  12. switch(type){
  13.      
  14.       case 1:
  15.            for(i=0;i<n;i++){
  16.                         if(i != (n-1)){    
  17.                             if(i%6==0){
  18.                                        printf("%08X:",(unsigned int)address+i);
  19.                                        printf(" %08X",*((int*)address+i));
  20.                                        }
  21.                             if(i%6==5)
  22.                                        printf(" %08X\n",*((int*)address+i));
  23.                             if(((i%6)!=0)&&((i%6)!=5))
  24.                                        printf(" %08X",*((int*)address+i));
  25.                             }
  26.                         if(i==(n-1)){
  27.                             if(i%6==0){
  28.                                        printf("%08X:",(unsigned int)address+i);
  29.                                        printf(" %08X\n",*((int*)address+i));
  30.                                        }
  31.                             if((i%6)!=0)
  32.                                        printf(" %08X\n",*((int*)address+i));
  33.                                        }      
  34.                             }
  35.            break;
  36.       case 2:
  37.            for(i=0;i<n;i++){
  38.                   if(i != (n-1)){  
  39.                      if(isprint(*((char*)address+i))!=0){      
  40.                             if(i%8==0){
  41.                                        printf("%08X: ",(unsigned int)address+i);
  42.                                        printf("%-4c ",*((char*)address+i));
  43.                                        }
  44.                             if(i%8==7)
  45.                                        printf("%-4c\n",*((char*)address+i));
  46.                             if((i%8!=0)&&(i%8!=7))
  47.                                        printf("%-4c ",*((char*)address+i));
  48.                                                     }
  49.                      else{
  50.                            if(i%8==0){
  51.                                        printf("%08X: ",(unsigned int)address+i);
  52.                                        printf("0x%2x ",*((unsigned char*)address+i));
  53.                                        }
  54.                             if(i%8==7)
  55.                                        printf("0x%2x\n",*((unsigned char*)address+i));
  56.                             if((i%8!=0)&&(i%8!=7))
  57.                                        printf("0x%2x ",*((unsigned char*)address+i));  
  58.                           }
  59.                                  }
  60.                   if(i == (n-1)){
  61.                      if(isprint(*((char*)address+i))!=0){      
  62.                             if(i%8==0){
  63.                                        printf("%08X: ",(unsigned int)address+i);
  64.                                        printf("%-4c\n",*((char*)address+i));
  65.                                        }
  66.                             if(i%8==7)
  67.                                        printf("%-4c\n",*((char*)address+i));
  68.                             if((i%8!=0)&&(i%8!=7))
  69.                                        printf("%-4c\n",*((char*)address+i));
  70.                                                     }
  71.                      else{
  72.                            if(i%8==0){
  73.                                        printf("%08X: ",(unsigned int)address+i);
  74.                                        printf("0x%2x\n",*((unsigned char*)address+i));
  75.                                        }
  76.                             if(i%8==7)
  77.                                        printf("0x%2x\n",*((unsigned char*)address+i));
  78.                             if((i%8!=0)&&(i%8!=7))
  79.                                        printf("0x%2x\n",*((unsigned char*)address+i));  
  80.                           }            
  81.                                  }
  82.                             }
  83.            break;
  84.        case 3:
  85.             for(i=0;i<n;i++){
  86.                              if(i%4==0){
  87.                                        printf("%08X: ",(unsigned int)address+i);
  88.                                        printf("%15e ",*((double*)address+i));
  89.                                        }
  90.                             if(i%4==3)
  91.                                        printf("%15e\n",*((double*)address+i));
  92.                             if((i%4!=0)&&(i%4!=3))
  93.                                        printf("%15e ",*((double*)address+i));
  94.                             }  
  95.            break;
  96.         case 4:
  97.             for(i=0;i<n;i++){
  98.                              length=strlen( (char*)address+i );
  99.                                  if(length>longest)
  100.                                          longest=length;
  101.                              }
  102.             for(i=0;i<n;i++){
  103.                              printf("%08X: ",(unsigned int)address+k);
  104.                              printf("%*c\n",longest,*((char*)address+k));
  105.                              k=1+strlen((char*)address+k);
  106.                              }
  107.                              
  108.            break;
  109.             }    
  110.      }
  111.  
  112. int main(){
  113.     int a[200]={22,3,5,5,5,6,7,8};
  114.     dump_memory(1,a,8);
  115.    
  116.     system("pause");
  117.     return 0;
  118.     }

Raw Paste

Login or Register to edit or fork this paste. It's free.