----------------------------------------------------------------------*/
LIBGOBLIN_BINFO_EXTERN
int
+ BinInfo_SearchFilename_inProgInfo(
+ char *pstr_libname,
+ LibGoblin_ProgramInfo *p_pginfo )
+{
+ DWord dw_hash;
+ LibGoblin_BinaryInfo *p_binfo_top;
+ LibGoblin_BinaryInfo *p_binfo_now;
+ LibGoblin_BinaryInfo *p_binfo_ret;
+
+ dw_hash = Common_CalcDJBhash( pstr_libname );
+
+ // Search Parent BinaryInfo ---
+ p_binfo_top = BINFO( p_pginfo->i_binfo_id );
+ assert( NULL != p_binfo_top );
+
+ // Search & Get ChainEnd BinaryInfo ---
+ p_binfo_ret = NULL;
+ p_binfo_now = p_binfo_top;
+ do {
+ if( dw_hash == p_binfo_now->dw_hash ) {
+ if( !strncmp( p_binfo_now->str_filename, pstr_libname, DRD64_MAX_PATH ) ) {
+ p_binfo_ret = p_binfo_now;
+ break;
+ }
+ }
+
+ p_binfo_now = ((-0x01 != p_binfo_now->i_binfo_next)
+ ? BINFO( p_binfo_now->i_binfo_next) : NULL);
+ } while( NULL != p_binfo_now );
+
+ return ((NULL != p_binfo_ret) ? p_binfo_ret->i_id : -0x01 );
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_BINFO_EXTERN
+int
BinInfo_SearchFilename(
char *pstr_libname,
LibGoblin_BinaryInfo *p_binfo_self )
LIBGOBLIN_BINFO_EXTERN
LibGoblin_BinaryInfo *BinaryInfo_GetBinInfo( int i_bid );
LIBGOBLIN_BINFO_EXTERN
+ int BinInfo_SearchFilename_inProgInfo( char *pstr_libname, LibGoblin_ProgramInfo *p_pginfo );
+LIBGOBLIN_BINFO_EXTERN
int BinInfo_SearchFilename( char *pstr_libname, LibGoblin_BinaryInfo *p_binfo_self );
LIBGOBLIN_BINFO_EXTERN
int BinInfo_SearchNextSlave( int i_bid_self, int i_bid_now );
else if( LIBGOBLIN_BINFO_TYPE_ELF32 == p_binfo->b_type ) {
}
- i_result = LibGoblin_Elf_Dynamic_ReadDynamicSection( p_binfo );
+ i_result = ELF_Dynamic_ReadDynamicSection( p_binfo );
if( 0x00 > i_result ) {
return -0x02;
}
return i_result;
}
- Debug_ObjectInfo_Print_AllGroupLink( p_pginfo, 0xff );
+ //Debug_ObjectInfo_Print_AllGroupLink( p_pginfo, 0xff );
/* Analyze Dwarf-Debug Info. */
----------------------------------------------------------------------*/
LIBGOBLIN_ELF_DYNAMIC_EXTERN
int
- LibGoblin_Elf_Dynamic_ReadDynamicSection(
+ ELF_Dynamic_ReadDynamicSection(
LibGoblin_BinaryInfo *p_binfo )
{
Byte *pb_data;
LIBGOBLIN_ELF_DYNAMIC_EXTERN
int ELF64_Dynamic_GetDynStrSection_fromProgHdr( LibGoblin_BinaryInfo *p_binfo );
LIBGOBLIN_ELF_DYNAMIC_EXTERN
- int LibGoblin_Elf_Dynamic_ReadDynamicSection(
+ int ELF_Dynamic_ReadDynamicSection(
LibGoblin_BinaryInfo *p_binfo );
const char *pstr_binfilename,
int i_req_bid )
{
+ int i_bid;
LibGoblin_BinaryInfo *p_binfo = NULL;
assert( NULL != p_pginfo );
- // Alloc BinaryInfo ---
- p_binfo = BinaryInfo_AllocBinInfo( p_pginfo, pstr_binfilename, i_req_bid );
- if( NULL == p_binfo ) {
- return NULL;
- }
+ i_bid = BinInfo_SearchFilename_inProgInfo( pstr_binfilename, p_pginfo );
+ if( -0x01 == i_bid ) {
+ // Alloc BinaryInfo ---
+ p_binfo = BinaryInfo_AllocBinInfo( p_pginfo, pstr_binfilename, i_req_bid );
+ if( NULL == p_binfo ) {
+ return NULL;
+ }
- if( -1 == i_req_bid ) { p_pginfo->i_binfo_id = p_binfo->i_id; }
+ if( -1 == i_req_bid ) { p_pginfo->i_binfo_id = p_binfo->i_id; }
+ }
+ else {
+ p_binfo = BinaryInfo_GetBinInfo( i_bid );
+ }
return p_binfo;
}