From 91b0ebe9bbd63e43eece9d1f2570568d082e24f1 Mon Sep 17 00:00:00 2001 From: "Koine Yuusuke(koinec)" Date: Sat, 23 Mar 2019 12:34:49 +0900 Subject: [PATCH] 2019/03/23(Sat) 12:35 (LibGoblin) * WorkBackup --- libgoblin/drd64_libgoblin_api.c | 12 ++++-- libgoblin/drd64_libgoblin_debug_addrinfo.c | 61 ------------------------------ libgoblin/drd64_libgoblin_elf.c | 5 ++- libgoblin/drd64_libgoblin_elf.h | 2 +- libgoblin/drd64_libgoblin_proginfo.c | 16 +------- libgoblin/drd64_libgoblin_proginfo.h | 2 - libgoblin/drd64_libgoblin_section.c | 3 +- libgoblin/drd64_libgoblin_type.h | 24 ++++++------ 8 files changed, 30 insertions(+), 95 deletions(-) diff --git a/libgoblin/drd64_libgoblin_api.c b/libgoblin/drd64_libgoblin_api.c index 93e95dc..7d00de5 100644 --- a/libgoblin/drd64_libgoblin_api.c +++ b/libgoblin/drd64_libgoblin_api.c @@ -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; } diff --git a/libgoblin/drd64_libgoblin_debug_addrinfo.c b/libgoblin/drd64_libgoblin_debug_addrinfo.c index 4d4bba4..e832753 100644 --- a/libgoblin/drd64_libgoblin_debug_addrinfo.c +++ b/libgoblin/drd64_libgoblin_debug_addrinfo.c @@ -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("-----------------------------------------------------------------------"); diff --git a/libgoblin/drd64_libgoblin_elf.c b/libgoblin/drd64_libgoblin_elf.c index 8a20789..4a23e46 100644 --- a/libgoblin/drd64_libgoblin_elf.c +++ b/libgoblin/drd64_libgoblin_elf.c @@ -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; diff --git a/libgoblin/drd64_libgoblin_elf.h b/libgoblin/drd64_libgoblin_elf.h index e187957..b8b58eb 100644 --- a/libgoblin/drd64_libgoblin_elf.h +++ b/libgoblin/drd64_libgoblin_elf.h @@ -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 */ diff --git a/libgoblin/drd64_libgoblin_proginfo.c b/libgoblin/drd64_libgoblin_proginfo.c index 1ecaf3b..43659a0 100644 --- a/libgoblin/drd64_libgoblin_proginfo.c +++ b/libgoblin/drd64_libgoblin_proginfo.c @@ -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; } diff --git a/libgoblin/drd64_libgoblin_proginfo.h b/libgoblin/drd64_libgoblin_proginfo.h index cf3d08b..017e52d 100644 --- a/libgoblin/drd64_libgoblin_proginfo.h +++ b/libgoblin/drd64_libgoblin_proginfo.h @@ -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 diff --git a/libgoblin/drd64_libgoblin_section.c b/libgoblin/drd64_libgoblin_section.c index 42642af..53ffa44 100644 --- a/libgoblin/drd64_libgoblin_section.c +++ b/libgoblin/drd64_libgoblin_section.c @@ -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. diff --git a/libgoblin/drd64_libgoblin_type.h b/libgoblin/drd64_libgoblin_type.h index 90d544e..315b4e3 100644 --- a/libgoblin/drd64_libgoblin_type.h +++ b/libgoblin/drd64_libgoblin_type.h @@ -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; -- 2.11.0