From 19bd97e8041b4bd121bfbce59ef9b36e3135f743 Mon Sep 17 00:00:00 2001 From: "Koine Yuusuke(koinec)" Date: Tue, 2 Apr 2019 05:52:18 +0900 Subject: [PATCH] 2019/04/02(Tue) 05:52 (LibGoblin) * WorkBackup --- include/libgoblin.h | 2 +- libgoblin/drd64_libgoblin_api.c | 20 ++++++++++---------- libgoblin/drd64_libgoblin_elf.c | 6 +++--- libgoblin/drd64_libgoblin_elf.h | 2 +- libgoblin/drd64_libgoblin_loadprog.c | 2 +- libgoblin/test_libgoblin_loadprog.c | 18 ++++++++++++------ 6 files changed, 28 insertions(+), 22 deletions(-) diff --git a/include/libgoblin.h b/include/libgoblin.h index 1e2ed4c..1fbd7e3 100644 --- a/include/libgoblin.h +++ b/include/libgoblin.h @@ -63,7 +63,7 @@ typedef struct { #define LIBGOBLIN_API extern #endif LIBGOBLIN_API - int LibGoblin_AnalyzeProgram( int i_pgid ); + int LibGoblin_AnalyzeMainProgram( int i_pgid ); LIBGOBLIN_API int LibGoblin_GetUnresolv_ObjectFilePath( int i_pgid, LibGoblin_ObjectFilePath *p_objpath ); LIBGOBLIN_API diff --git a/libgoblin/drd64_libgoblin_api.c b/libgoblin/drd64_libgoblin_api.c index 7d00de5..2ae1b92 100644 --- a/libgoblin/drd64_libgoblin_api.c +++ b/libgoblin/drd64_libgoblin_api.c @@ -42,7 +42,7 @@ Comment: ***********************************************************************/ LIBGOBLIN_API int - LibGoblin_AnalyzeProgram( + LibGoblin_AnalyzeMainProgram( int i_pgid ) { int i_result; @@ -59,7 +59,7 @@ int return -0x02; } - i_result = ELF_ReadELF_Phase2( p_binfo ); + i_result = ELF_ReadELF_Phase2( p_binfo, (PtrValue)0x00000000 ); if( 0x00 != i_result ) { return -0x03; } @@ -83,12 +83,12 @@ int LibGoblin_BinaryFile *p_bfile; if( NULL == p_objpath ) { - return -0x01; + return -0x02; } p_pginfo = ProgInfo_GetProgInfo( i_pgid ); if( NULL == p_pginfo ) { - return -0x02; + return -0x03; } p_binfo = BinaryInfo_GetBinInfo( p_pginfo->i_binfo_id ); @@ -98,7 +98,7 @@ int p_binfo = BinaryInfo_GetBinInfo( p_binfo->i_binfo_next ); } - i_result = 0x00; + i_result = -0x01; if( NULL != p_binfo ) { memset( p_objpath, 0x00, sizeof( LibGoblin_ObjectFilePath ) ); @@ -115,7 +115,7 @@ int } } - i_result = 0x01; + i_result = p_binfo->i_id; } return i_result; @@ -169,7 +169,7 @@ int const char *pstr_remotefull, const char *pstr_localfull ) { - int i_result; + int i_bid; LibGoblin_ProgramInfo *p_pginfo; p_pginfo = ProgInfo_GetProgInfo( i_pgid ); @@ -181,13 +181,13 @@ int return -0x02; } - i_result = LoadProgram_LoadMainProgram( + i_bid = LoadProgram_LoadMainProgram( p_pginfo, pstr_remotefull, pstr_localfull ); - if( NULL == pstr_localfull ) { + if(( 0 > i_bid ) || ( NULL == pstr_localfull )) { return -0x03; } - return i_result; + return i_bid; } diff --git a/libgoblin/drd64_libgoblin_elf.c b/libgoblin/drd64_libgoblin_elf.c index 80d70c1..71a652b 100644 --- a/libgoblin/drd64_libgoblin_elf.c +++ b/libgoblin/drd64_libgoblin_elf.c @@ -146,7 +146,8 @@ int LIBGOBLIN_ELF_EXTERN int ELF_ReadELF_Phase2( - LibGoblin_BinaryInfo *p_binfo ) + LibGoblin_BinaryInfo *p_binfo, + PtrValue ptr_loadbase ) { int i_result; LibGoblin_ProgramInfo *p_pginfo; @@ -156,8 +157,7 @@ int p_pginfo = ProgInfo_GetProgInfo( p_binfo->i_pginfo ); assert( NULL != p_pginfo ); - // XXX - for DEV/DEBUG - p_binfo->ptr_loadbase = 0x00000000800000000; + p_binfo->ptr_loadbase = ptr_loadbase; /* Update SectionInfo from BinaryFile to BinaryInfo ---*/ Section_UpdateSectionInfo_inBinaryInfo( p_binfo ); diff --git a/libgoblin/drd64_libgoblin_elf.h b/libgoblin/drd64_libgoblin_elf.h index b8b58eb..a03ae4a 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_BinaryInfo *p_binfo ); + int ELF_ReadELF_Phase2( LibGoblin_BinaryInfo *p_binfo, PtrValue ptr_loadbase ); #endif /* DRD64_HEADER_LIBGOBLIN_BINFO */ diff --git a/libgoblin/drd64_libgoblin_loadprog.c b/libgoblin/drd64_libgoblin_loadprog.c index 9e2d4e2..51a6c65 100644 --- a/libgoblin/drd64_libgoblin_loadprog.c +++ b/libgoblin/drd64_libgoblin_loadprog.c @@ -109,7 +109,7 @@ int return -0x03; } - return i_result; + return p_binfo->i_id; } diff --git a/libgoblin/test_libgoblin_loadprog.c b/libgoblin/test_libgoblin_loadprog.c index 1721160..0188b8d 100644 --- a/libgoblin/test_libgoblin_loadprog.c +++ b/libgoblin/test_libgoblin_loadprog.c @@ -44,6 +44,8 @@ Comment: void Test_LibGoblin_LoadProg_API_LoadProgram_test00_001( void ) { int i_pgid; + int i_bid[20]; + int i_cnt = 1; int i_result; char *pstr_ldpath; char *pstr_env_ldlibpath; @@ -65,11 +67,12 @@ void Test_LibGoblin_LoadProg_API_LoadProgram_test00_001( void ) i_pgid = LibGoblin_AllocProgInfo(); CU_ASSERT( 0x00 <= i_result ); - i_result = LibGoblin_LoadProgram_Main( i_pgid, "../testdata/dwarftest", + i_bid[0] = LibGoblin_LoadProgram_Main( i_pgid, "../testdata/dwarftest", "../testdata/dwarftest" ); - CU_ASSERT( 0x00 == i_result ); + CU_ASSERT( 0x00 == i_bid[0] ); - while( 0x00 < LibGoblin_GetUnresolv_ObjectFilePath( i_pgid, &t_objpath ) ) { + i_bid[i_cnt] = LibGoblin_GetUnresolv_ObjectFilePath( i_pgid, &t_objpath ); + while( 0x00 < i_bid[i_cnt] ) { i_result = LibBrownie_GetLibraryPath( t_objpath.str_localpath, t_objpath.str_filename, @@ -82,17 +85,20 @@ void Test_LibGoblin_LoadProg_API_LoadProgram_test00_001( void ) if( 0x00 >= i_result ) { goto goto_Test_LibGoblin_LoadProg_API_LoadProgram_test00_001_post; } - printf(" file= %s, DT_RPATH= %s, DT_RUNPATH=%s\n => localpath: %s\n", + printf(" file= %s, DT_RPATH= %s, DT_RUNPATH=%s\n => localpath: %s [bid= %d]\n", t_objpath.str_filename, t_objpath.str_rpath, - t_objpath.str_runpath, t_objpath.str_localpath ); + t_objpath.str_runpath, t_objpath.str_localpath, i_bid[i_cnt] ); i_result = LibGoblin_SetPathAndLoad_ObjectFilePath( &t_objpath ); CU_ASSERT( 0x00 == i_result ); if( 0x00 != i_result ) { goto goto_Test_LibGoblin_LoadProg_API_LoadProgram_test00_001_post; } + + i_cnt++; + i_bid[i_cnt] = LibGoblin_GetUnresolv_ObjectFilePath( i_pgid, &t_objpath ); } - i_result = LibGoblin_AnalyzeProgram( i_pgid ); + i_result = LibGoblin_AnalyzeMainProgram( i_pgid ); CU_ASSERT( 0x00 == i_result ); i_result = LibGoblin_FreeProgInfo( i_pgid ); -- 2.11.0