OSDN Git Service

2019/03/23(Sat) 12:35
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sat, 23 Mar 2019 03:34:49 +0000 (12:34 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sat, 23 Mar 2019 03:34:49 +0000 (12:34 +0900)
 (LibGoblin)
  * WorkBackup

libgoblin/drd64_libgoblin_api.c
libgoblin/drd64_libgoblin_debug_addrinfo.c
libgoblin/drd64_libgoblin_elf.c
libgoblin/drd64_libgoblin_elf.h
libgoblin/drd64_libgoblin_proginfo.c
libgoblin/drd64_libgoblin_proginfo.h
libgoblin/drd64_libgoblin_section.c
libgoblin/drd64_libgoblin_type.h

index 93e95dc..7d00de5 100644 (file)
@@ -47,17 +47,23 @@ int
 {
        int             i_result;
        LibGoblin_ProgramInfo   *p_pginfo;
+       LibGoblin_BinaryInfo    *p_binfo;
 
        p_pginfo        = ProgInfo_GetProgInfo( i_pgid );
        if( NULL == p_pginfo )  {
                return -0x01;
        }
 
-       i_result        = ELF_ReadELF_Phase2( p_pginfo, p_pginfo->p_binfo[LIBGOBLIN_BINFO_FILE_EXEC] );
-       if( 0x00 != i_result )  {
+       p_binfo = BinaryInfo_GetBinInfo( p_pginfo->i_binfo_id );
+       if( NULL == p_binfo )   {
                return -0x02;
        }
 
+       i_result        = ELF_ReadELF_Phase2( p_binfo );
+       if( 0x00 != i_result )  {
+               return -0x03;
+       }
+
        return  i_result;
 }
 
@@ -85,7 +91,7 @@ int
                return -0x02;
        }
 
-       p_binfo = p_pginfo->p_binfo[LIBGOBLIN_BINFO_FILE_EXEC];
+       p_binfo = BinaryInfo_GetBinInfo( p_pginfo->i_binfo_id );
        while( NULL != p_binfo )        {
                if( LIBGOBLIN_BINFO_PHASE_SETPROG > p_binfo->b_phase )
                        { break; }
index 4d4bba4..e832753 100644 (file)
@@ -46,71 +46,10 @@ int
                        LibGoblin_BinaryInfo    *p_binfo,
                        Byte            b_level )
 {
-       Word                                    w_scope;
-       Word                                    w_type;
-       DWord                                   dw_cnt;
-       LibGoblin_AddressInfo   *p_addr;
-       LibGoblin_ProgramInfo   *p_pginfo;
-
-       assert( NULL != p_binfo );
-       p_pginfo        = ProgInfo_GetProgInfo( p_binfo->i_pginfo );
 
        if( 0x00 < b_level )
                { puts("[DEBUG] Address Info. Table -------------------------------------------"); }
 
-       p_addr  = p_binfo->p_addrinfo;
-       if( NULL == p_addr )    {
-               if( 0x00 < b_level )    { puts(" Not exist Address Table."); }
-               return 0x01;
-       }
-
-       for( dw_cnt = 0; dw_cnt < p_binfo->dw_max_addrinfo; dw_cnt++, p_addr++ )        {
-               if( 0x00 < b_level )    {
-                       printf("  %08lx - %08lx (%8d) ", p_addr->ptr_addr.value,
-                                                       p_addr->ptr_addr.value + p_addr->dw_size, p_addr->dw_size );
-
-                       // b_elf_flags
-                       w_scope = p_addr->b_elf_flags >> 4;
-                       if( STB_GLOBAL == w_scope )             { printf( "[Global:" ); }
-                       else if( STB_WEAK == w_scope )  { printf( "[Weak  :" ); }
-                       else if( STB_LOCAL == w_scope ) { printf( "[Local :" ); }
-                       else                                                    { printf( "[Other :" ); }
-
-                       w_type  = p_addr->b_elf_flags & 0x0f;
-                       switch( w_type )        {
-                               case STT_NOTYPE:        printf( "No Type ] " ); break;
-                               case STT_OBJECT:        printf( "Object  ] " ); break;
-                               case STT_FUNC:          printf( "Function] " ); break;
-                               case STT_SECTION:       printf( "Section ] " ); break;
-                               case STT_FILE:          printf( "File    ] " ); break;
-                               case STT_COMMON:        printf( "Common  ] " ); break;
-                               case STT_TLS:           printf( "TLS     ] " ); break;
-                               case STT_NUM:           printf( "Number  ] " ); break;
-                               default:                        printf( "(Other) ] " ); break;
-                       }
-
-                       // pstr_name
-                       printf( "%30s ", p_addr->pstr_name );
-                       if( STT_SECTION == w_type )             {
-                               printf("\n");
-                               continue;
-                       }
-
-                       // dw_srcid
-                       // w_secid
-                       if( SHN_ABS  == p_addr->w_secid )                       { printf("(ABS)"); }
-                       else if( SHN_COMMON  == p_addr->w_secid )       { printf("(Common)"); }
-                       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("(%s)",
-                                       LibGoblin_Section_GetSectionName( p_pginfo, p_addr->w_secid ));
-                       }
-                       else    { printf("(NO SHNDX)%d", p_addr->w_secid); }
-                       // dw_next
-                       printf("\n");
-               }
-       }
 
        if( 0x00 < b_level )    {
                puts("-----------------------------------------------------------------------");
index 8a20789..4a23e46 100644 (file)
@@ -139,13 +139,16 @@ int
 LIBGOBLIN_ELF_EXTERN
 int
        ELF_ReadELF_Phase2(
-               LibGoblin_ProgramInfo   *p_pginfo,
                LibGoblin_BinaryInfo    *p_binfo )
 {
        int             i_result;
+       LibGoblin_ProgramInfo   *p_pginfo;
 
        assert( NULL != p_binfo );
 
+       p_pginfo        = ProgInfo_GetProgInfo( p_binfo->i_pginfo );
+       assert( NULL != p_pginfo );
+
        // XXX - for DEV/DEBUG 
        p_binfo->ptr_loadbase   = 0x00000000800000000;
 
index e187957..b8b58eb 100644 (file)
@@ -54,7 +54,7 @@ LIBGOBLIN_ELF_EXTERN
 LIBGOBLIN_ELF_EXTERN
        int ELF_ReadELF_Phase1( LibGoblin_BinaryInfo *p_binfo );
 LIBGOBLIN_ELF_EXTERN
-       int ELF_ReadELF_Phase2( LibGoblin_ProgramInfo *p_pginfo, LibGoblin_BinaryInfo *p_binfo );
+       int ELF_ReadELF_Phase2( LibGoblin_BinaryInfo *p_binfo );
 
 
 #endif /* DRD64_HEADER_LIBGOBLIN_BINFO */
index 1ecaf3b..43659a0 100644 (file)
@@ -57,19 +57,6 @@ LibGoblin_ProgramInfo        *
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
 LIBGOBLIN_PROGINFO_EXTERN
-int
-       ProgInfo_GetBinaryInfos(
-                       LibGoblin_ProgramInfo   *p_pginfo )
-{
-       assert( NULL != p_pginfo );
-       
-       return p_pginfo->i_num_binfo;
-}
-
-
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-LIBGOBLIN_PROGINFO_EXTERN
 LibGoblin_BinaryInfo *
        ProgInfo_AddBinaryInfo(
                        LibGoblin_ProgramInfo   *p_pginfo,
@@ -88,12 +75,11 @@ LibGoblin_BinaryInfo *
 
        if( -1 == i_req_bid )   {
                p_binfo->i_filetype     = LIBGOBLIN_BINFO_FILE_EXEC;
-               p_pginfo->p_binfo[LIBGOBLIN_BINFO_FILE_EXEC]    = p_binfo;
+               p_pginfo->i_binfo_id    = p_binfo->i_id;
        }
        else    {
                p_binfo->i_filetype     = LIBGOBLIN_BINFO_FILE_LIBRARY;
        }
-       p_pginfo->i_num_binfo++;
 
        return p_binfo;
 }
index cf3d08b..017e52d 100644 (file)
@@ -64,8 +64,6 @@ int                                           gi_now_program_info             = 0;
 LIBGOBLIN_PROGINFO_EXTERN
        LibGoblin_ProgramInfo *ProgInfo_GetProgInfo( int i_pgid );
 LIBGOBLIN_PROGINFO_EXTERN
-       int ProgInfo_GetBinaryInfos( LibGoblin_ProgramInfo *p_pginfo );
-LIBGOBLIN_PROGINFO_EXTERN
        LibGoblin_BinaryInfo *ProgInfo_AddBinaryInfo(
                        LibGoblin_ProgramInfo *p_pginfo, const char *pstr_binfilename, int i_req_bid );
 LIBGOBLIN_PROGINFO_EXTERN
index 42642af..53ffa44 100644 (file)
@@ -222,7 +222,8 @@ int
 
                if( 0x00000000 == p_section->ptr_addr.value )   { continue; }
 
-               p_binfo = p_pginfo->p_binfo[ ((0x00 > p_section->i_fid) ? 0x00 : (p_section->i_fid) ) ];
+               // XXX 2019/03/23 temporary!
+               p_binfo = BinaryInfo_GetBinInfo( p_pginfo->i_binfo_id );
                assert( NULL != p_binfo );
 
                // sh_addr - Address in memory image.
index 90d544e..315b4e3 100644 (file)
@@ -301,12 +301,15 @@ typedef struct    {
        
        int                     i_binfile;              // binaryFile ID
 
+
        int                     i_pginfo;
        int                     i_binfo_parent;
        int                     i_binfo_next;
 
        PtrValue        ptr_loadbase;
 
+       LibGoblin_SectionInfo   t_section[LIBGOBLIN_SECTION_ID_MAX];
+
        /* Binary-Format Depending Info. (ELF)*/
        //void          *p_format;
 
@@ -319,16 +322,6 @@ typedef    struct  {
 
        int                                             i_id;
 
-       int                                             i_num_binfo;
-       LibGoblin_BinaryInfo    *p_binfo[LIBGOBLIN_BINFO_MAXFILES];
-
-       LibGoblin_SectionInfo   t_section[LIBGOBLIN_SECTION_ID_MAX];
-
-       /* Address Table Info. */
-       //LibGoblin_AddressInfo *p_addrinfo;
-       //DWord         dw_alloc_addrinfo;
-       //DWord         dw_max_addrinfo;
-
        // Object Table & Address Table ---
        struct  {
                LibGoblin_ObjectInfo    *p_objinfo;
@@ -339,9 +332,18 @@ typedef    struct  {
        } objinfo;
        LibGoblin_AddressInfo   *p_addrinfo;
        
+       Word                                    dw_flag;
+
+       int             i_binfo_id;
+
+       LibGoblin_SectionInfo   t_section[LIBGOBLIN_SECTION_ID_MAX];
 
-       DWord                                   dw_flag;
        
+       /* Address Table Info. */
+       //LibGoblin_AddressInfo *p_addrinfo;
+       //DWord         dw_alloc_addrinfo;
+       //DWord         dw_max_addrinfo;
+
        
 }      LibGoblin_ProgramInfo;