From 3c8f924168ec967503cc5f9c63e82048925a0e9d Mon Sep 17 00:00:00 2001 From: "Koine Yuusuke(koinec)" Date: Tue, 17 Nov 2015 22:23:50 +0900 Subject: [PATCH] * WorkBackup: 2015/11/17(Tue) 22:23 --- libgoblin/drd64_libgoblin_addrinfo.c | 2 +- libgoblin/drd64_libgoblin_addrinfo.h | 3 +++ libgoblin/drd64_libgoblin_binfo.c | 6 ++++++ libgoblin/drd64_libgoblin_elf.c | 13 ++++++++++++- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/libgoblin/drd64_libgoblin_addrinfo.c b/libgoblin/drd64_libgoblin_addrinfo.c index c1717d5..dff374c 100644 --- a/libgoblin/drd64_libgoblin_addrinfo.c +++ b/libgoblin/drd64_libgoblin_addrinfo.c @@ -184,7 +184,7 @@ int assert( NULL != p_binfo ); if( NULL == p_binfo->p_addrinfo ) { - return -0x01; + return 0x00; } free( p_binfo->p_addrinfo ); diff --git a/libgoblin/drd64_libgoblin_addrinfo.h b/libgoblin/drd64_libgoblin_addrinfo.h index 42be296..43fb192 100644 --- a/libgoblin/drd64_libgoblin_addrinfo.h +++ b/libgoblin/drd64_libgoblin_addrinfo.h @@ -54,6 +54,9 @@ Comment: #define LIBGOBLIN_CalcAddrInfoAllocs(m) ((((m) / LIBGOBLIN_ADDRINFO_ALLOC_UNITS) + 2) * LIBGOBLIN_ADDRINFO_ALLOC_UNITS) LIBGOBLIN_ADDRINFO_EXTERN + int LibGoblin_AddrInfo_SyncSymbolWorkTable( + LibGoblin_BinaryInfo *p_binfo, LibGoblin_SymbolWorkTable *p_symworktbl ); +LIBGOBLIN_ADDRINFO_EXTERN int LibGoblin_AddrInfo_AllocAddrInfo( LibGoblin_BinaryInfo *p_binfo, DWord dw_initsymbols ); LIBGOBLIN_ADDRINFO_EXTERN int LibGoblin_AddrInfo_FreeAddrInfo( LibGoblin_BinaryInfo *p_binfo ); diff --git a/libgoblin/drd64_libgoblin_binfo.c b/libgoblin/drd64_libgoblin_binfo.c index 103c543..67e14a9 100644 --- a/libgoblin/drd64_libgoblin_binfo.c +++ b/libgoblin/drd64_libgoblin_binfo.c @@ -164,10 +164,16 @@ int LibGoblin_BinaryInfo *p_binfo ) { int i_binfoid; + int i_result; int i_cnt; if( NULL == p_binfo ) { return 0x01; } + i_result = LibGoblin_AddrInfo_FreeAddrInfo( p_binfo ); + if( 0x00 != i_result ) { + return -0x02; + } + for( i_cnt = 0; i_cnt < LIBGOBLIN_BINFO_MAXFILES; i_cnt++ ) { if( NULL == p_binfo->t_binfile[i_cnt].p_elf ) { free( p_binfo->t_binfile[i_cnt].p_elf ); diff --git a/libgoblin/drd64_libgoblin_elf.c b/libgoblin/drd64_libgoblin_elf.c index 6c8949a..a21e3c2 100644 --- a/libgoblin/drd64_libgoblin_elf.c +++ b/libgoblin/drd64_libgoblin_elf.c @@ -291,9 +291,18 @@ int return i_result; } + i_result = LibGoblin_AddrInfo_AllocAddrInfo( p_binfo, t_symwork.dw_max_symwork ); + if( 0x00 != i_result ) { + return i_result; + } + LibGoblin_Debug_SymWork_PrintWorkTable( &t_symwork, 0x02 ); - LibGoblin_SymWork_FreeSymbolWorkTable( &t_symwork ); + i_result = LibGoblin_AddrInfo_SyncSymbolWorkTable( p_binfo, &t_symwork ); + if( 0x00 != i_result ) { + return i_result; + } + /* p_symwork = LibGoblin_SymWork_CreateWorkTable( p_binfo, &dw_symbols, i_analyzefid ); @@ -309,6 +318,8 @@ int } */ + LibGoblin_SymWork_FreeSymbolWorkTable( &t_symwork ); + return 0x00; } -- 2.11.0