OSDN Git Service

* WorkBackup: 2015/11/22(Sun) 22:03 (Fixed can't reading Not-default Section)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sun, 22 Nov 2015 13:04:16 +0000 (22:04 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sun, 22 Nov 2015 13:04:16 +0000 (22:04 +0900)
libgoblin/drd64_libgoblin_debug_addrinfo.c
libgoblin/drd64_libgoblin_debug_elf.c
libgoblin/drd64_libgoblin_elf64.c
libgoblin/drd64_libgoblin_section.c
libgoblin/drd64_libgoblin_section.h
libgoblin/drd64_libgoblin_section_defs.h

index e09715a..cfbdfac 100644 (file)
@@ -89,7 +89,13 @@ int
                        }
 
                        // pstr_name
-                       printf( "%30s ", p_addr->pstr_name );
+                       if( STT_SECTION == w_type )             {
+                               printf("%30s ",
+                                       LibGoblin_Section_GetSectionName( p_binfo, p_addr->w_secid ));
+                       }
+                       else    {
+                               printf( "%30s ", p_addr->pstr_name );
+                       }
 
                        // dw_srcid
                        // w_secid
@@ -98,10 +104,10 @@ int
                        else if( SHN_XINDEX  == p_addr->w_secid )       { printf("(XIndex)"); }
                        else if( SHN_UNDEF  == p_addr->w_secid )        { printf("(UNDEF)"); }
                        else if( LIBGOBLIN_SECTION_ID_MAX > p_addr->w_secid )   {
-                               printf("(Section: %s)",
+                               printf("(%s)",
                                        LibGoblin_Section_GetSectionName( p_binfo, p_addr->w_secid ));
                        }
-                       else    { printf("(NO SHNDX)"); }
+                       else    { printf("(NO SHNDX)%d", p_addr->w_secid); }
                        // dw_next
                        printf("\n");
                }
index 1907d92..0a292d8 100644 (file)
@@ -79,11 +79,11 @@ int
 
                if( 0x00 < b_level )    {
                        if( 0 < ptr_start )             {
-                               printf("  %08lx - %08lx (%8ld): %20s (FID:%d)\n",
+                               printf("  %02d: %08lx - %08lx (%8ld): %20s (FID:%d)\n", b_cnt,
                                                        ptr_start, ptr_start + p_secinfo->qw_size, p_secinfo->qw_size,
                                                        p_secinfo->pstr_secname, p_secinfo->i_fid );
                        } else  {
-                               printf("           -          (%8ld): %20s (FID:%d)\n",
+                               printf("  %02d:          -          (%8ld): %20s (FID:%d)\n", b_cnt,
                                                        p_secinfo->qw_size, p_secinfo->pstr_secname, p_secinfo->i_fid );
                        }
                }
index a8b5bf0..42d5047 100644 (file)
@@ -99,7 +99,7 @@ int
                }
 
                if( LIBGOBLIN_SECTION_ID_DEFAULT_MAX == i_index )       {
-                       p_sectbl        = &(p_bfile->t_section[i_index]);
+                       p_sectbl        = &(p_bfile->t_section[i_user_section]);
 
                        p_sectbl->pb_sechdr             = (Byte *)p_sechdr;
                        p_sectbl->pb_data               = (Byte *)(pb_data + p_sechdr->sh_offset);
index cc91fa5..7b7c4e6 100644 (file)
@@ -114,7 +114,7 @@ Word
        assert( NULL != p_binfo );
 
        // Through out input value when w_secnumber is not Section Index Value.
-       if( LIBGOBLIN_SECTION_ID_DEFAULT_MAX <= w_secnumber )   {
+       if( LIBGOBLIN_SECTION_ID_MAX <= w_secnumber )   {
                return w_secnumber;
        }
 
@@ -123,10 +123,7 @@ Word
        for( b_secid = 0; b_secid < LIBGOBLIN_SECTION_ID_MAX; b_secid++ )       {
                p_secinfo       = &(p_bfile->t_section[ b_secid ]);
 
-               if( NULL == p_secinfo->pb_sechdr )              { 
-                       w_result        = LIBGOBLIN_SECTION_ID_INVALID;
-                       break;
-               }
+               if( NULL == p_secinfo->pb_sechdr )              { continue; }
 
                if( p_secinfo->i_fid == (int)w_secnumber )      {
                        w_result        = (Word)b_secid;
index f581773..bf18d46 100644 (file)
@@ -48,6 +48,7 @@ Comment:
 
 #ifdef DRD64_SRC_LIBGOBLIN_SECTION
        char    *gstr_section_name[LIBGOBLIN_SECTION_ID_MAX] = {
+               LIBGOBLIN_SECTION_STR_NULL,
                LIBGOBLIN_SECTION_STR_TEXT,
                LIBGOBLIN_SECTION_STR_TEXT_INIT,
                LIBGOBLIN_SECTION_STR_TEXT_FINI,
index 3ba4783..24d9f9f 100644 (file)
@@ -37,46 +37,48 @@ Comment:
 #ifndef DRD64_HEADER_LIBGOBLIN_SECTION_DEFS
 #define DRD64_HEADER_LIBGOBLIN_SECTION_DEFS
 
-#define        LIBGOBLIN_SECTION_ID_DEFAULT_MAX        0x22
+#define        LIBGOBLIN_SECTION_ID_DEFAULT_MAX        0x24
 #define        LIBGOBLIN_SECTION_ID_MAX                        0x3f
 #define        LIBGOBLIN_SECTION_ID_INVALID            0xff
 
-#define        LIBGOBLIN_SECTION_ID_TEXT                       0x00
-#define        LIBGOBLIN_SECTION_ID_TEXT_INIT          0x01
-#define        LIBGOBLIN_SECTION_ID_TEXT_FINI          0x02
-#define        LIBGOBLIN_SECTION_ID_DATA                       0x03
-#define        LIBGOBLIN_SECTION_ID_BSS                        0x04
-#define        LIBGOBLIN_SECTION_ID_GOT                        0x05
-#define        LIBGOBLIN_SECTION_ID_GOT_PLT            0x06
-#define        LIBGOBLIN_SECTION_ID_PLT                        0x07
-#define        LIBGOBLIN_SECTION_ID_REL_PLT            0x08
-#define        LIBGOBLIN_SECTION_ID_RELA_PLT           0x09
-#define        LIBGOBLIN_SECTION_ID_SHSTRTAB           0x0a
-#define        LIBGOBLIN_SECTION_ID_STRTAB                     0x0b
-#define        LIBGOBLIN_SECTION_ID_SYMTAB                     0x0c
-#define        LIBGOBLIN_SECTION_ID_DTORS                      0x0d
-#define        LIBGOBLIN_SECTION_ID_CTORS                      0x0e
-#define        LIBGOBLIN_SECTION_ID_DYNAMIC            0x0f
-#define        LIBGOBLIN_SECTION_ID_DYNSTR                     0x10
-#define        LIBGOBLIN_SECTION_ID_DYNSYM                     0x11
-#define        LIBGOBLIN_SECTION_ID_EH_FRAME           0x12
-#define        LIBGOBLIN_SECTION_ID_EH_FRAME_HDR       0x13
-#define        LIBGOBLIN_SECTION_ID_COMMENT            0x14
-#define        LIBGOBLIN_SECTION_ID_GNU_VERSION        0x15
-#define        LIBGOBLIN_SECTION_ID_GNU_VERSION_R      0x16
-#define        LIBGOBLIN_SECTION_ID_RODATA                     0x17
-#define        LIBGOBLIN_SECTION_ID_NOTE_ABI_TAG       0x18
-#define        LIBGOBLIN_SECTION_ID_HASH                       0x19
-#define        LIBGOBLIN_SECTION_ID_INTERP                     0x1a
-#define        LIBGOBLIN_SECTION_ID_JCR                        0x1b
-#define        LIBGOBLIN_SECTION_ID_DEBUG_ABBREV       0x1c
-#define        LIBGOBLIN_SECTION_ID_DEBUG_INFO         0x1d
-#define        LIBGOBLIN_SECTION_ID_DEBUG_LINE         0x1e
-#define        LIBGOBLIN_SECTION_ID_DEBUG_ARANGES      0x1f
-#define        LIBGOBLIN_SECTION_ID_DEBUG_FRAME        0x20
-#define        LIBGOBLIN_SECTION_ID_DEBUG_LOC          0x21
-#define        LIBGOBLIN_SECTION_ID_DEBUG_PUBNAMES     0x22
+#define        LIBGOBLIN_SECTION_ID_NULL                       0x00
+#define        LIBGOBLIN_SECTION_ID_TEXT                       0x01
+#define        LIBGOBLIN_SECTION_ID_TEXT_INIT          0x02
+#define        LIBGOBLIN_SECTION_ID_TEXT_FINI          0x03
+#define        LIBGOBLIN_SECTION_ID_DATA                       0x04
+#define        LIBGOBLIN_SECTION_ID_BSS                        0x05
+#define        LIBGOBLIN_SECTION_ID_GOT                        0x06
+#define        LIBGOBLIN_SECTION_ID_GOT_PLT            0x07
+#define        LIBGOBLIN_SECTION_ID_PLT                        0x08
+#define        LIBGOBLIN_SECTION_ID_REL_PLT            0x09
+#define        LIBGOBLIN_SECTION_ID_RELA_PLT           0x0a
+#define        LIBGOBLIN_SECTION_ID_SHSTRTAB           0x0b
+#define        LIBGOBLIN_SECTION_ID_STRTAB                     0x0c
+#define        LIBGOBLIN_SECTION_ID_SYMTAB                     0x0d
+#define        LIBGOBLIN_SECTION_ID_DTORS                      0x0e
+#define        LIBGOBLIN_SECTION_ID_CTORS                      0x0f
+#define        LIBGOBLIN_SECTION_ID_DYNAMIC            0x10
+#define        LIBGOBLIN_SECTION_ID_DYNSTR                     0x11
+#define        LIBGOBLIN_SECTION_ID_DYNSYM                     0x12
+#define        LIBGOBLIN_SECTION_ID_EH_FRAME           0x13
+#define        LIBGOBLIN_SECTION_ID_EH_FRAME_HDR       0x14
+#define        LIBGOBLIN_SECTION_ID_COMMENT            0x15
+#define        LIBGOBLIN_SECTION_ID_GNU_VERSION        0x16
+#define        LIBGOBLIN_SECTION_ID_GNU_VERSION_R      0x17
+#define        LIBGOBLIN_SECTION_ID_RODATA                     0x18
+#define        LIBGOBLIN_SECTION_ID_NOTE_ABI_TAG       0x19
+#define        LIBGOBLIN_SECTION_ID_HASH                       0x1a
+#define        LIBGOBLIN_SECTION_ID_INTERP                     0x1b
+#define        LIBGOBLIN_SECTION_ID_JCR                        0x1c
+#define        LIBGOBLIN_SECTION_ID_DEBUG_ABBREV       0x1d
+#define        LIBGOBLIN_SECTION_ID_DEBUG_INFO         0x1e
+#define        LIBGOBLIN_SECTION_ID_DEBUG_LINE         0x1f
+#define        LIBGOBLIN_SECTION_ID_DEBUG_ARANGES      0x20
+#define        LIBGOBLIN_SECTION_ID_DEBUG_FRAME        0x21
+#define        LIBGOBLIN_SECTION_ID_DEBUG_LOC          0x22
+#define        LIBGOBLIN_SECTION_ID_DEBUG_PUBNAMES     0x23
 
+#define        LIBGOBLIN_SECTION_STR_NULL                              ""
 #define        LIBGOBLIN_SECTION_STR_TEXT                              ".text"
 #define        LIBGOBLIN_SECTION_STR_TEXT_INIT                 ".init"
 #define        LIBGOBLIN_SECTION_STR_TEXT_FINI                 ".fini"