CPP   47

dump memory address

Guest on 30th June 2022 02:48:24 AM

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include <ctype.h>
  4.  
  5. void dump_memory(int type, void *address, int n) ;
  6. int main()
  7. {
  8.     int i , j ;
  9.     /*char *a , *k ;
  10.     k = a ;
  11.     for( i = 0 ; i<4 ; i++ )
  12.     {
  13.         scanf( "%s" , a ) ;
  14.         *( a + strlen(a) ) = '\0' ;
  15.         a += strlen(a)+1 ;
  16.     }
  17.     dump_memory( 4 , k , 4 ) ;*/
  18.     char a[16] = { "1\nwe2f\054f5\0fwerg" };
  19.     /*for( i = 0 ; i<16 ; i++ )
  20.         scanf( "%lf" , &a[i] ) ;*/
  21.     dump_memory( 3 , a , 2 ) ;
  22.     scanf( " " ) ;
  23. }
  24.  
  25. void dump_memory(int type, void *address, int n)
  26. {
  27.     int i , j ;
  28.     if( type == 1 )
  29.     {
  30.         for( i = 0 ; i<n ; i++ )
  31.         {
  32.             printf( "%08X:" , (unsigned int*)address + i*6 ) ;
  33.             for( j = 0 ; j<6 ; j++ )
  34.                 printf( " %08X" , *( (unsigned int*)address+i*6+j ) ) ;
  35.             putchar( '\n' ) ;
  36.         }
  37.     }
  38.     else if( type == 2 )
  39.     {
  40.         for( i = 0 ; i<n ; i++ )
  41.         {
  42.             printf( "%08X:" , (double*)address + i*4 ) ;
  43.             for( j = 0 ; j<4 ; j++ )
  44.                 printf( " %15e" , *( (double*)address+i*4+j ) ) ;
  45.             putchar( '\n' ) ;
  46.         }
  47.     }
  48.     else if( type == 3 )
  49.     {
  50.         for( i = 0 ; i<n ; i++ )
  51.         {
  52.             printf( "%08X:" , (char*)address + i*8 ) ;
  53.             for( j = 0 ; j<8 ; j++ )
  54.             {
  55.                 if( isprint( *( (char*)address+i*8+j ) ) )
  56.                     printf( " %-4c" , *( (char*)address+i*8+j ) ) ;
  57.                 else
  58.                     printf( " 0x%02X" , *( (char*)address+i*8+j ) ) ;
  59.             }
  60.             putchar( '\n' ) ;
  61.         }
  62.     }
  63.     else
  64.     {
  65.         int longest = 0 ;
  66.         for( i = 0 , j = 0 ; i<n ; i++ )
  67.         {
  68.             if( strlen( (char*)address+j ) > longest )
  69.                 longest = strlen( (char*)address+j ) ;
  70.             j += ( strlen( (char*)address+j )+1 ) ;
  71.         }
  72.         for( i = 0 , j = 0 ; i<n ; i++ )
  73.         {
  74.             printf("%08X: %*s\n", ( char* )address + j , longest , ( char* )address + j );
  75.             j += (strlen( (char*)address+j )+1) ;
  76.         }
  77.     }
  78. }

Raw Paste


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