• R/O
  • HTTP
  • SSH
  • HTTPS

drdeamon64: Commit

Dr.Deamon64 Git-Repository
(2014/03/01- Main-Repository: migrate from cvs)


Commit MetaInfo

Revision2348ae1e50883c9f4005919afb4646215cd44ee7 (tree)
Time2019-03-13 05:57:34
AuthorKoine Yuusuke(koinec) <koinec@user...>
CommiterKoine Yuusuke(koinec)

Log Message

2019/03/13(Wed)

(LibGoblin)
  • WorkBackup

Change Summary

Incremental Difference

--- a/libgoblin/drd64_libgoblin_debug_objinfo.c
+++ b/libgoblin/drd64_libgoblin_debug_objinfo.c
@@ -89,6 +89,7 @@ void
8989 char str_type[64];
9090 char str_binding[32];
9191 char str_visibility[32];
92+ LibGoblin_BinaryInfo *p_binfo_origin;
9293
9394 printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) File{ Offset=%8p, Size=%8ld, FID=%d }\n",
9495 pstr_space,
@@ -177,12 +178,20 @@ void
177178 break;
178179 }
179180
180-// TODO: 2019/03/12
181-// Append Dynamic Resolv Info.
182-
183181 printf(" %s\t\t[SYMBOL] Type: %s, Binding: %s, Visibility: %s\n",
184182 pstr_space, str_type, str_binding, str_visibility );
185183
184+
185+ if( OBJINFO_STATUS_DYNAMIC & p_obj->dw_status ) {
186+ p_binfo_origin = BinaryInfo_GetBinInfo( p_obj->dynamic.i_binfo_origin );
187+
188+ printf(" %s\t\t[DYNAMIC] Lib.Name: %s (binfo id= %d), .dynsym index= %d\n",
189+ pstr_space,
190+ ((NULL != p_binfo_origin) ? p_binfo_origin->str_filename : "--NULL--"),
191+ p_obj->dynamic.i_binfo_origin, p_obj->dynamic.i_dynsym_index );
192+ }
193+
194+
186195 return;
187196 }
188197
--- a/libgoblin/drd64_libgoblin_elf.c
+++ b/libgoblin/drd64_libgoblin_elf.c
@@ -175,7 +175,7 @@ int
175175 return i_result;
176176 }
177177
178- Debug_ObjectInfo_Print_AllGroupLink( p_pginfo, 0xff );
178+ //Debug_ObjectInfo_Print_AllGroupLink( p_pginfo, 0xff );
179179
180180
181181 /* Analyze Dwarf-Debug Info. */
--- a/libgoblin/drd64_libgoblin_elf_dynsym.c
+++ b/libgoblin/drd64_libgoblin_elf_dynsym.c
@@ -46,8 +46,10 @@ int
4646 LibGoblin_BinaryInfo *p_binfo )
4747 {
4848 char *pstr_symname;
49+ Byte b_binding;
4950 Byte *pb_dynstr;
5051 int i_bid;
52+ int i_result;
5153 int i_symindex;
5254 DWord dw_cnt;
5355 DWord dw_sym;
@@ -141,18 +143,21 @@ int
141143 pstr_symname = (char *)(pb_dynstr + p_sym->st_name);
142144
143145 // Check .gnu.hash ---
146+ i_symindex = -0x01;
144147 while( -0x01 != i_bid ) {
145148 p_binlib = BinaryInfo_GetBinInfo( i_bid );
146149 assert( NULL != p_binlib );
147150
148- i_symindex = ELF64_GnuHash_SearchDynSym( p_binlib, pstr_symname, p_vernow );
149- if( 0 <= i_symindex ) {
151+ i_result = ELF64_GnuHash_SearchDynSym( p_binlib, pstr_symname, p_vernow, &b_binding );
152+ if( 0 <= i_result ) {
153+ i_symindex = i_result;
150154 break;
151155 }
152156
153157 i_bid = BinInfo_SearchNextSlave( p_binfo->i_id, i_bid );
154158 }
155- printf(" debug: [%2u] %s (%s) = %d\n", dw_sym, pstr_symname, p_binlib->str_filename, i_symindex );
159+ printf(" debug: [%2u] %s (%s)[binding:%d] = %d\n",
160+ dw_sym, pstr_symname, p_binlib->str_filename, b_binding, i_symindex );
156161
157162 if( 0 > i_symindex ) { continue; }
158163
--- a/libgoblin/drd64_libgoblin_elf_hash.c
+++ b/libgoblin/drd64_libgoblin_elf_hash.c
@@ -55,7 +55,8 @@ int
5555 ELF64_GnuHash_SearchDynSym(
5656 LibGoblin_BinaryInfo *p_binfo,
5757 char *pstr_symname,
58- GnuVer_VerNeed *p_verneed )
58+ GnuVer_VerNeed *p_verneed,
59+ Byte *pb_binding )
5960 {
6061 int i_ret = -0x0f;
6162 int i_result;
@@ -152,10 +153,14 @@ int
152153
153154
154155 if(((dw_namehash | 1) == (dw_hash | 1)) && !strcmp(pstr_dynname, pstr_symname)) {
155- i_result = ELF64_GnuVer_CheckVerName_inVerDef( p_binfo, p_verneed, *pw_gvernow);
156- if( 0x00 <= i_result ) {
157- i_ret = dw_symix & 0x7fffffff;
158- break;
156+ if(( STV_ELIMINATE != p_symnow->st_other )
157+ && ( STV_HIDDEN != p_symnow->st_other )) {
158+ i_result = ELF64_GnuVer_CheckVerName_inVerDef( p_binfo, p_verneed, *pw_gvernow);
159+ if( 0x00 <= i_result ) {
160+ *pb_binding = ELF64_ST_BIND( p_symnow->st_info );
161+ i_ret = dw_symix & 0x7fffffff;
162+ break;
163+ }
159164 }
160165 }
161166
--- a/libgoblin/drd64_libgoblin_elf_hash.h
+++ b/libgoblin/drd64_libgoblin_elf_hash.h
@@ -51,7 +51,8 @@ Comment:
5151
5252 LIBGOBLIN_ELF_HASH_EXTERN
5353 int ELF64_GnuHash_SearchDynSym(
54- LibGoblin_BinaryInfo *p_binfo, char *pstr_symname, GnuVer_VerNeed *p_verneed );
54+ LibGoblin_BinaryInfo *p_binfo, char *pstr_symname,
55+ GnuVer_VerNeed *p_verneed, Byte *pb_binding );
5556
5657
5758
Show on old repository browser