• R/O
  • HTTP
  • SSH
  • HTTPS

drdeamon64: コミット

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


コミットメタ情報

リビジョンf093259426af392ebfbfc30fddba32d1611480ab (tree)
日時2018-10-15 21:37:45
作者Koine Yuusuke(koinec) <koinec@user...>
コミッターKoine Yuusuke(koinec)

ログメッセージ

2018/10/15(Mon)

  • CreateFile: drd64_libgoblin_objinfo.[ch]

変更サマリ

差分

--- a/include/libgoblin.h
+++ b/include/libgoblin.h
@@ -62,6 +62,8 @@ typedef struct {
6262 #define LIBGOBLIN_API extern
6363 #endif
6464 LIBGOBLIN_API
65+ int LibGoblin_AnalyzeProgram( int i_pgid );
66+LIBGOBLIN_API
6567 int LibGoblin_GetUnresolv_ObjectFilePath( int i_pgid, LibGoblin_ObjectFilePath *p_objpath );
6668 LIBGOBLIN_API
6769 int LibGoblin_SetPathAndLoad_ObjectFilePath( LibGoblin_ObjectFilePath *p_objpath );
--- a/libgoblin/Makefile
+++ b/libgoblin/Makefile
@@ -55,6 +55,7 @@ OBJS = drd64_libgoblin_api.o \
5555 drd64_libgoblin_readbin.o \
5656 drd64_libgoblin_loadprog.o \
5757 drd64_libgoblin_symwork.o \
58+ drd64_libgoblin_objinfo.o \
5859 drd64_libgoblin_addrinfo.o \
5960 drd64_libgoblin_section.o \
6061 drd64_libgoblin_elf.o \
@@ -79,6 +80,7 @@ HEADER = drd64_libgoblin.h \
7980 drd64_libgoblin_readbin.h \
8081 drd64_libgoblin_loadprog.h \
8182 drd64_libgoblin_symwork.h \
83+ drd64_libgoblin_objinfo.h \
8284 drd64_libgoblin_addrinfo.h \
8385 drd64_libgoblin_section.h \
8486 drd64_libgoblin_elf.h \
@@ -148,6 +150,9 @@ drd64_libgoblin_loadprog.o: drd64_libgoblin_loadprog.c $(HEADER)
148150 drd64_libgoblin_symwork.o: drd64_libgoblin_symwork.c $(HEADER)
149151 $(CC) -c -o drd64_libgoblin_symwork.o $(FLAGS_DEBUG) \
150152 drd64_libgoblin_symwork.c
153+drd64_libgoblin_objinfo.o: drd64_libgoblin_objinfo.c $(HEADER)
154+ $(CC) -c -o drd64_libgoblin_objinfo.o $(FLAGS_DEBUG) \
155+ drd64_libgoblin_objinfo.c
151156 drd64_libgoblin_addrinfo.o: drd64_libgoblin_addrinfo.c $(HEADER)
152157 $(CC) -c -o drd64_libgoblin_addrinfo.o $(FLAGS_DEBUG) \
153158 drd64_libgoblin_addrinfo.c
--- a/libgoblin/drd64_libgoblin.h
+++ b/libgoblin/drd64_libgoblin.h
@@ -78,6 +78,7 @@ Comment:
7878 #include"drd64_libgoblin_loadprog.h"
7979 #include"drd64_libgoblin_symwork.h"
8080 #include"drd64_libgoblin_section.h"
81+#include"drd64_libgoblin_objinfo.h"
8182 #include"drd64_libgoblin_addrinfo.h"
8283 #include"drd64_libgoblin_elf.h"
8384 #include"drd64_libgoblin_elf_dynver.h"
--- a/libgoblin/drd64_libgoblin_addrinfo.c
+++ b/libgoblin/drd64_libgoblin_addrinfo.c
@@ -41,7 +41,7 @@ Comment:
4141 /*----------------------------------------------------------------------
4242 ----------------------------------------------------------------------*/
4343 int
44- LibGoblin_AddrInfo_Set_Symtab(
44+ AddrInfo_Set_Symtab(
4545 LibGoblin_BinaryInfo *p_binfo,
4646 LibGoblin_AddressInfo *p_addr,
4747 LibGoblin_SymbolWorkInfo *p_syminfo )
@@ -105,7 +105,7 @@ int
105105 /*----------------------------------------------------------------------
106106 ----------------------------------------------------------------------*/
107107 int
108- LibGoblin_AddrInfo_Move_AddrInfo(
108+ AddrInfo_Move_AddrInfo(
109109 LibGoblin_BinaryInfo *p_binfo,
110110 LibGoblin_AddressInfo *p_addr,
111111 LibGoblin_SymbolWorkInfo *p_syminfo )
@@ -135,7 +135,7 @@ int
135135 ----------------------------------------------------------------------*/
136136 LIBGOBLIN_ADDRINFO_EXTERN
137137 int
138- LibGoblin_AddrInfo_SyncSymbolWorkTable(
138+ AddrInfo_SyncSymbolWorkTable(
139139 LibGoblin_BinaryInfo *p_binfo,
140140 LibGoblin_SymbolWorkTable *p_symworktbl )
141141 {
@@ -172,7 +172,7 @@ int
172172 p_syminfo = p_symworktbl->p_symwork + (p_symworktbl->dw_max_symwork - 1);
173173 for( dw_cnt = p_symworktbl->dw_max_symwork; dw_cnt > 0; dw_cnt--, p_syminfo--, p_addr-- ) {
174174 if( LIBGOBLIN_SYMWORKINFO_TYPE_SYMTAB == GET_SYMWORKINFO_TYPE(p_syminfo->dw_type) ) {
175- i_result = LibGoblin_AddrInfo_Set_Symtab( p_binfo, p_addr, p_syminfo );
175+ i_result = AddrInfo_Set_Symtab( p_binfo, p_addr, p_syminfo );
176176 }
177177 else if( LIBGOBLIN_SYMWORKINFO_TYPE_DWARF
178178 == GET_SYMWORKINFO_TYPE(p_syminfo->dw_type) ) {
@@ -180,7 +180,7 @@ int
180180 }
181181 else if( LIBGOBLIN_SYMWORKINFO_TYPE_ADDRTBL
182182 == GET_SYMWORKINFO_TYPE(p_syminfo->dw_type) ) {
183- i_result = LibGoblin_AddrInfo_Move_AddrInfo( p_binfo, p_addr, p_syminfo );
183+ i_result = AddrInfo_Move_AddrInfo( p_binfo, p_addr, p_syminfo );
184184 }
185185 }
186186
@@ -194,7 +194,7 @@ int
194194 ----------------------------------------------------------------------*/
195195 LIBGOBLIN_ADDRINFO_EXTERN
196196 int
197- LibGoblin_AddrInfo_AllocAddrInfo(
197+ AddrInfo_AllocAddrInfo(
198198 LibGoblin_BinaryInfo *p_binfo,
199199 DWord dw_initsymbols )
200200 {
@@ -227,7 +227,7 @@ int
227227 ----------------------------------------------------------------------*/
228228 LIBGOBLIN_ADDRINFO_EXTERN
229229 int
230- LibGoblin_AddrInfo_FreeAddrInfo(
230+ AddrInfo_FreeAddrInfo(
231231 LibGoblin_BinaryInfo *p_binfo )
232232 {
233233 assert( NULL != p_binfo );
--- a/libgoblin/drd64_libgoblin_addrinfo.h
+++ b/libgoblin/drd64_libgoblin_addrinfo.h
@@ -54,12 +54,12 @@ Comment:
5454 #define LIBGOBLIN_CalcAddrInfoAllocs(m) ((((m) / LIBGOBLIN_ADDRINFO_ALLOC_UNITS) + 2) * LIBGOBLIN_ADDRINFO_ALLOC_UNITS)
5555
5656 LIBGOBLIN_ADDRINFO_EXTERN
57- int LibGoblin_AddrInfo_SyncSymbolWorkTable(
57+ int AddrInfo_SyncSymbolWorkTable(
5858 LibGoblin_BinaryInfo *p_binfo, LibGoblin_SymbolWorkTable *p_symworktbl );
5959 LIBGOBLIN_ADDRINFO_EXTERN
60- int LibGoblin_AddrInfo_AllocAddrInfo( LibGoblin_BinaryInfo *p_binfo, DWord dw_initsymbols );
60+ int AddrInfo_AllocAddrInfo( LibGoblin_BinaryInfo *p_binfo, DWord dw_initsymbols );
6161 LIBGOBLIN_ADDRINFO_EXTERN
62- int LibGoblin_AddrInfo_FreeAddrInfo( LibGoblin_BinaryInfo *p_binfo );
62+ int AddrInfo_FreeAddrInfo( LibGoblin_BinaryInfo *p_binfo );
6363
6464
6565 #endif /* DRD64_HEADER_XXX */
--- a/libgoblin/drd64_libgoblin_api.c
+++ b/libgoblin/drd64_libgoblin_api.c
@@ -42,6 +42,30 @@ Comment:
4242 ***********************************************************************/
4343 LIBGOBLIN_API
4444 int
45+ LibGoblin_AnalyzeProgram(
46+ int i_pgid )
47+{
48+ int i_result;
49+ LibGoblin_ProgramInfo *p_pginfo;
50+
51+ p_pginfo = ProgInfo_GetProgInfo( i_pgid );
52+ if( NULL == p_pginfo ) {
53+ return -0x01;
54+ }
55+
56+ i_result = ELF_ReadELF_Phase2( p_pginfo->p_binfo[LIBGOBLIN_BINFO_FILE_EXEC] );
57+ if( 0x00 != i_result ) {
58+ return -0x02;
59+ }
60+
61+ return i_result;
62+}
63+
64+
65+/***********************************************************************
66+***********************************************************************/
67+LIBGOBLIN_API
68+int
4569 LibGoblin_GetUnresolv_ObjectFilePath(
4670 int i_pgid,
4771 LibGoblin_ObjectFilePath *p_objpath )
--- a/libgoblin/drd64_libgoblin_binfo.c
+++ b/libgoblin/drd64_libgoblin_binfo.c
@@ -389,7 +389,7 @@ int
389389
390390 if( NULL == p_binfo ) { return 0x01; }
391391
392- i_result = LibGoblin_AddrInfo_FreeAddrInfo( p_binfo );
392+ i_result = AddrInfo_FreeAddrInfo( p_binfo );
393393 if( 0x00 != i_result ) {
394394 return -0x02;
395395 }
--- a/libgoblin/drd64_libgoblin_dwarf.c
+++ b/libgoblin/drd64_libgoblin_dwarf.c
@@ -50,7 +50,7 @@ int
5050 assert( NULL != p_bin );
5151
5252 /* Get .debug_abbrev section Info */
53- pb_data_abbrev = LibGoblin_Elf_GetSection(
53+ pb_data_abbrev = ELF_GetSection(
5454 &qw_size_abbrev, p_bin,
5555 LIBGOBLIN_SECTION_ID_DEBUG_ABBREV );
5656 if( NULL == pb_data_abbrev ) { return 0x00; }
--- a/libgoblin/drd64_libgoblin_dwarf_abbrev.c
+++ b/libgoblin/drd64_libgoblin_dwarf_abbrev.c
@@ -136,7 +136,7 @@ int
136136 assert( NULL != p_dwarf );
137137
138138 /* Get .debug_abbrev section Info */
139- pb_data = LibGoblin_Elf_GetSection(
139+ pb_data = ELF_GetSection(
140140 &qw_size_abbrev, p_bin,
141141 LIBGOBLIN_SECTION_ID_DEBUG_ABBREV );
142142 if( NULL == pb_data ) { return 0x01; }
@@ -221,7 +221,7 @@ int
221221 assert( NULL != p_src );
222222
223223 /* Get .debug_abbrev section Info */
224- pb_data = LibGoblin_Elf_GetSection(
224+ pb_data = ELF_GetSection(
225225 &qw_size_abbrev, p_bin,
226226 LIBGOBLIN_SECTION_ID_DEBUG_ABBREV );
227227 if( NULL == pb_data ) { return 0x01; }
--- a/libgoblin/drd64_libgoblin_dwarf_info.c
+++ b/libgoblin/drd64_libgoblin_dwarf_info.c
@@ -492,7 +492,7 @@ int
492492 assert( NULL != p_src );
493493
494494 /* Get .debug_abbrev section Info */
495- pb_data = LibGoblin_Elf_GetSection(
495+ pb_data = ELF_GetSection(
496496 &qw_size_info, p_bin,
497497 LIBGOBLIN_SECTION_ID_DEBUG_INFO );
498498 if( NULL == pb_data ) { return 0x01; }
--- a/libgoblin/drd64_libgoblin_dwarf_line.c
+++ b/libgoblin/drd64_libgoblin_dwarf_line.c
@@ -653,7 +653,7 @@ int
653653 assert( NULL != p_src );
654654
655655 /* Get .debug_abbrev section Info */
656- pb_data = LibGoblin_Elf_GetSection(
656+ pb_data = ELF_GetSection(
657657 &qw_size, p_bin,
658658 LIBGOBLIN_SECTION_ID_DEBUG_LINE );
659659 if( NULL == pb_data ) { return 0x01; }
--- a/libgoblin/drd64_libgoblin_elf.c
+++ b/libgoblin/drd64_libgoblin_elf.c
@@ -42,7 +42,7 @@ Comment:
4242 ----------------------------------------------------------------------*/
4343 LIBGOBLIN_ELF_EXTERN
4444 int
45- LibGoblin_IsElf(
45+ ELF_IsElf(
4646 Byte *p_data )
4747 {
4848
@@ -62,7 +62,7 @@ Will Deprecate Functions!!! - Not Use!
6262 ----------------------------------------------------------------------*/
6363 LIBGOBLIN_ELF_EXTERN
6464 Byte *
65- LibGoblin_Elf_GetSection(
65+ ELF_GetSection(
6666 QWord *qw_secsize,
6767 LibGoblin_BinaryInfo *p_binfo,
6868 Byte b_secid )
@@ -94,7 +94,7 @@ Byte *
9494 ----------------------------------------------------------------------*/
9595 LIBGOBLIN_ELF_EXTERN
9696 int
97- LibGoblin_Elf_ReadELF_Phase1(
97+ ELF_ReadELF_Phase1(
9898 LibGoblin_BinaryInfo *p_binfo )
9999 {
100100 int i_result = 0x00;
@@ -131,7 +131,7 @@ int
131131 ----------------------------------------------------------------------*/
132132 LIBGOBLIN_ELF_EXTERN
133133 int
134- LibGoblin_Elf_ReadELF_Phase2(
134+ ELF_ReadELF_Phase2(
135135 LibGoblin_BinaryInfo *p_binfo )
136136 {
137137 int i_result;
@@ -151,14 +151,14 @@ int
151151 return i_result;
152152 }
153153
154- i_result = LibGoblin_AddrInfo_AllocAddrInfo( p_binfo, t_symwork.dw_max_symwork );
154+ i_result = AddrInfo_AllocAddrInfo( p_binfo, t_symwork.dw_max_symwork );
155155 if( 0x00 != i_result ) {
156156 return i_result;
157157 }
158158
159159 LibGoblin_Debug_SymWork_PrintWorkTable( &t_symwork, 0x02 );
160160
161- i_result = LibGoblin_AddrInfo_SyncSymbolWorkTable( p_binfo, &t_symwork );
161+ i_result = AddrInfo_SyncSymbolWorkTable( p_binfo, &t_symwork );
162162 if( 0x00 != i_result ) {
163163 return i_result;
164164 }
--- a/libgoblin/drd64_libgoblin_elf.h
+++ b/libgoblin/drd64_libgoblin_elf.h
@@ -47,14 +47,14 @@ Comment:
4747
4848
4949 LIBGOBLIN_ELF_EXTERN
50- int LibGoblin_IsElf( Byte *p_data );
50+ int ELF_IsElf( Byte *p_data );
5151 LIBGOBLIN_ELF_EXTERN
52- Byte *LibGoblin_Elf_GetSection(
52+ Byte *ELF_GetSection(
5353 QWord *qw_secsize, LibGoblin_BinaryInfo *p_bin, Byte b_secid );
5454 LIBGOBLIN_ELF_EXTERN
55- int LibGoblin_Elf_ReadELF_Phase1( LibGoblin_BinaryInfo *p_binfo );
55+ int ELF_ReadELF_Phase1( LibGoblin_BinaryInfo *p_binfo );
5656 LIBGOBLIN_ELF_EXTERN
57- int LibGoblin_Elf_ReadELF_Phase2( LibGoblin_BinaryInfo *p_binfo );
57+ int ELF_ReadELF_Phase2( LibGoblin_BinaryInfo *p_binfo );
5858
5959
6060 #endif /* DRD64_HEADER_LIBGOBLIN_BINFO */
--- a/libgoblin/drd64_libgoblin_loadprog.c
+++ b/libgoblin/drd64_libgoblin_loadprog.c
@@ -60,7 +60,7 @@ int
6060 return -0x04;
6161 }
6262
63- i_result = LibGoblin_Elf_ReadELF_Phase1( p_binfo );
63+ i_result = ELF_ReadELF_Phase1( p_binfo );
6464 if( 0x00 != i_result ) {
6565 return -0x05;
6666 }
@@ -105,6 +105,9 @@ int
105105 }
106106
107107 i_result = LoadProg_LoadBinaryInfo( p_binfo );
108+ if( 0x00 != i_result ) {
109+ return -0x03;
110+ }
108111
109112 return i_result;
110113 }
--- /dev/null
+++ b/libgoblin/drd64_libgoblin_objinfo.c
@@ -0,0 +1,240 @@
1+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
2+
3+ D r . D e a m o n 6 4
4+ for INTEL64(R), AMD64(R)
5+
6+ Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
7+
8+Redistribution and use in source and binary forms, with or without
9+modification, are permitted provided that the following conditions are met:
10+
11+ 1. Redistributions of source code must retain the above copyright notice,
12+ this list of conditions and the following disclaimer.
13+ 2. Redistributions in binary form must reproduce the above copyright
14+ notice, this list of conditions and the following disclaimer in the
15+ documentation and/or other materials provided with the distribution.
16+
17+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
18+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
21+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27+OF THE POSSIBILITY OF SUCH DAMAGE.
28+
29+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
30+
31+/* File Info -----------------------------------------------------------
32+File: drd64_.c
33+Function:
34+Comment:
35+----------------------------------------------------------------------*/
36+
37+#define DRD64_SRC_LIBGOBLIN_OBJINFO
38+#include"drd64_libgoblin.h"
39+
40+
41+/*----------------------------------------------------------------------
42+----------------------------------------------------------------------*/
43+LIBGOBLIN_OBJINFO_EXTERN
44+LibGoblin_ObjectInfo *
45+ ObjectInfo_GetObjectInfo(
46+ LibGoblin_ProgramInfo *p_pginfo,
47+ int i_oid )
48+{
49+ assert( NULL != p_pginfo );
50+
51+ if(( p_pginfo->i_max_objinfo <= i_oid ) || ( 0 > i_oid ))
52+ { return NULL; }
53+
54+ return OBJINFO(p_pginfo, i_oid);
55+}
56+
57+
58+/*----------------------------------------------------------------------
59+----------------------------------------------------------------------*/
60+void
61+ ObjectInfo_ClearObjectInfo(
62+ LibGoblin_ObjectInfo *p_objinfo )
63+{
64+ assert( NULL != p_objinfo );
65+
66+ memset( p_objinfo, 0x00, sizeof( LibGoblin_ObjectInfo ) );
67+
68+ p_objinfo->i_id = -0x01;
69+
70+ return;
71+}
72+
73+
74+/*----------------------------------------------------------------------
75+----------------------------------------------------------------------*/
76+LIBGOBLIN_OBJINFO_EXTERN
77+LibGoblin_ObjectInfo *
78+ ObjectInfo_AllocObjectInfo(
79+ LibGoblin_ProgramInfo *p_pginfo )
80+{
81+ int i_cnt;
82+ int i_id_now;
83+ LibGoblin_ObjectInfo *p_objinfo_base;
84+ LibGoblin_ObjectInfo *p_objinfo_now;
85+
86+ assert( NULL != p_pginfo );
87+
88+ p_objinfo_now = NULL;
89+ i_id_now = -1;
90+
91+ // Search Non-used ObjectInfo ---
92+ if( p_pginfo->i_now_objinfo < p_pginfo->i_max_objinfo ) {
93+ for( i_cnt = 0; i_cnt < p_pginfo->i_max_objinfo; i_cnt++ ) {
94+
95+ if( -1 == OBJINFO(p_pginfo, i_cnt)->i_id ) {
96+ p_objinfo_now = OBJINFO(p_pginfo, i_cnt);
97+ i_id_now = i_cnt;
98+ p_pginfo->i_now_objinfo++;
99+ break;
100+ }
101+ }
102+ }
103+ else if( p_pginfo->i_now_objinfo == p_pginfo->i_alloc_objinfo ) {
104+
105+ p_objinfo_base = realloc( p_pginfo->p_objinfo,
106+ sizeof( LibGoblin_ObjectInfo ) *
107+ (p_pginfo->i_alloc_objinfo + LIBGOBLIN_OBJINFO_UNITS) );
108+ if( NULL == p_objinfo_base ) {
109+ return NULL;
110+ }
111+
112+ for( i_cnt = p_pginfo->i_alloc_objinfo;
113+ i_cnt < (p_pginfo->i_alloc_objinfo + LIBGOBLIN_OBJINFO_UNITS); i_cnt++ ) {
114+ ObjectInfo_ClearObjectInfo( p_objinfo_base + i_cnt );
115+ }
116+
117+ p_pginfo->p_objinfo = p_objinfo_base;
118+ p_pginfo->i_alloc_objinfo += LIBGOBLIN_OBJINFO_UNITS;
119+
120+ p_objinfo_now = OBJINFO(p_pginfo, p_pginfo->i_now_objinfo);
121+ i_id_now = p_pginfo->i_now_objinfo++;
122+
123+ if( i_id_now == p_pginfo->i_max_objinfo )
124+ { p_pginfo->i_max_objinfo++; }
125+ }
126+ else {
127+ p_objinfo_now = OBJINFO(p_pginfo, p_pginfo->i_now_objinfo);
128+ i_id_now = p_pginfo->i_now_objinfo++;
129+
130+ if( i_id_now == p_pginfo->i_max_objinfo )
131+ { p_pginfo->i_max_objinfo++; }
132+ }
133+
134+ assert( NULL != p_objinfo_now );
135+
136+ ObjectInfo_ClearObjectInfo( p_objinfo_now );
137+ p_objinfo_now->i_id = i_id_now;
138+
139+ return p_objinfo_now;
140+}
141+
142+
143+/*----------------------------------------------------------------------
144+----------------------------------------------------------------------*/
145+LIBGOBLIN_OBJINFO_EXTERN
146+int
147+ ObjectInfo_FreeObjectInfo(
148+ LibGoblin_ProgramInfo *p_pginfo,
149+ LibGoblin_ObjectInfo *p_objinfo )
150+{
151+ int i_objid;
152+
153+ assert( NULL != p_pginfo );
154+
155+ if( NULL == p_objinfo ) { return 0x01; }
156+
157+ i_objid = p_objinfo->i_id;
158+ ObjectInfo_ClearObjectInfo( p_objinfo );
159+
160+ if( p_pginfo->i_max_objinfo == (i_objid + 1) )
161+ { p_pginfo->i_max_objinfo--; }
162+ p_pginfo->i_now_objinfo--;
163+ if( 0 == p_pginfo->i_now_objinfo )
164+ { p_pginfo->i_max_objinfo = 0; }
165+
166+ return 0x00;
167+}
168+
169+
170+/*----------------------------------------------------------------------
171+----------------------------------------------------------------------*/
172+LIBGOBLIN_OBJINFO_EXTERN
173+int
174+ ObjectInfo_Init(
175+ LibGoblin_ProgramInfo *p_pginfo,
176+ int i_init_objnums )
177+{
178+ int i_cnt;
179+ int i_items;
180+ LibGoblin_ObjectInfo *p_objinfo;
181+
182+ assert( NULL != p_pginfo );
183+
184+ if( 0 != p_pginfo->i_max_objinfo ) {
185+ return -0x01;
186+ }
187+
188+ if( 0 == i_init_objnums )
189+ { i_items = LIBGOBLIN_OBJINFO_UNITS * LIBGOBLIN_OBJINFO_INITALLOCRATE; }
190+ else
191+ { i_items = (( i_init_objnums / LIBGOBLIN_OBJINFO_UNITS ) + 2) * LIBGOBLIN_OBJINFO_UNITS; }
192+
193+ p_pginfo->p_objinfo = malloc( sizeof( LibGoblin_ObjectInfo ) * i_items );
194+ if( NULL == p_pginfo->p_objinfo ) {
195+ return -0x02;
196+ }
197+
198+ for( i_cnt = 0; i_cnt < LIBGOBLIN_OBJINFO_UNITS; i_cnt++ ) {
199+ p_objinfo = OBJINFO(p_pginfo, i_cnt);
200+ ObjectInfo_ClearObjectInfo( p_objinfo );
201+ }
202+
203+ p_pginfo->i_alloc_objinfo = LIBGOBLIN_OBJINFO_UNITS;
204+ p_pginfo->i_max_objinfo = 0;
205+ p_pginfo->i_now_objinfo = 0;
206+
207+ return 0x00;
208+}
209+
210+
211+/*----------------------------------------------------------------------
212+----------------------------------------------------------------------*/
213+LIBGOBLIN_OBJINFO_EXTERN
214+int
215+ ObjectInfo_Term(
216+ LibGoblin_ProgramInfo *p_pginfo )
217+{
218+ LibGoblin_ObjectInfo *p_objinfo;
219+
220+ assert( NULL != p_pginfo );
221+
222+ if( 0 < p_pginfo->i_now_objinfo ) {
223+ for( ; p_pginfo->i_now_objinfo >= 0; p_pginfo->i_now_objinfo-- ) {
224+ p_objinfo = OBJINFO(p_pginfo, p_pginfo->i_now_objinfo);
225+ ObjectInfo_FreeObjectInfo( p_pginfo, p_objinfo );
226+ }
227+ }
228+
229+ free( p_pginfo->p_objinfo );
230+
231+ p_pginfo->p_objinfo = NULL;
232+ p_pginfo->i_alloc_objinfo = 0;
233+ p_pginfo->i_max_objinfo = 0;
234+ p_pginfo->i_now_objinfo = 0;
235+
236+ return 0x00;
237+}
238+
239+
240+/* EOF of drd64_.c ----------------------------------- */
--- /dev/null
+++ b/libgoblin/drd64_libgoblin_objinfo.h
@@ -0,0 +1,83 @@
1+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
2+
3+ D r . D e a m o n 6 4
4+ for INTEL64(R), AMD64(R)
5+
6+ Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
7+
8+Redistribution and use in source and binary forms, with or without
9+modification, are permitted provided that the following conditions are met:
10+
11+ 1. Redistributions of source code must retain the above copyright notice,
12+ this list of conditions and the following disclaimer.
13+ 2. Redistributions in binary form must reproduce the above copyright
14+ notice, this list of conditions and the following disclaimer in the
15+ documentation and/or other materials provided with the distribution.
16+
17+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
18+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
21+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27+OF THE POSSIBILITY OF SUCH DAMAGE.
28+
29+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
30+
31+/* File Info -----------------------------------------------------------
32+File: drd64_.h
33+Function: Header
34+Comment:
35+----------------------------------------------------------------------*/
36+
37+#ifndef DRD64_HEADER_LIBGOBLIN_OBJINFO
38+#define DRD64_HEADER_LIBGOBLIN_OBJINFO
39+
40+#include"drd64_libgoblin.h"
41+
42+#ifdef DRD64_SRC_LIBGOBLIN_OBJINFO
43+ #define LIBGOBLIN_OBJINFO_EXTERN
44+#else
45+ #define LIBGOBLIN_OBJINFO_EXTERN extern
46+#endif
47+
48+#if defined DRD64_SRC_LIBGOBLIN_OBJINFO
49+ #define LIBGOBLIN_OBJINFO_INTERNALFUNC
50+#elif defined DRD64_SRC_TEST_LIBGOBLIN_OBJINFO
51+ #define LIBGOBLIN_OBJINFO_INTERNALFUNC
52+#endif
53+
54+
55+#define LIBGOBLIN_OBJINFO_UNITS 2048
56+#define LIBGOBLIN_OBJINFO_INITALLOCRATE 4
57+
58+#ifdef DRD64_SRC_LIBGOBLIN_OBJINFO
59+
60+#endif
61+
62+#define OBJINFO(p,n) ((LibGoblin_ObjectInfo *)((p)->p_objinfo + (n)))
63+
64+LIBGOBLIN_OBJINFO_EXTERN
65+ LibGoblin_ObjectInfo *ObjectInfo_GetObjectInfo( LibGoblin_ProgramInfo *p_pginfo, int i_bid );
66+LIBGOBLIN_OBJINFO_EXTERN
67+ LibGoblin_ObjectInfo *ObjectInfo_AllocObjectInfo( LibGoblin_ProgramInfo *p_pginfo );
68+LIBGOBLIN_OBJINFO_EXTERN
69+ int ObjectInfo_FreeObjectInfo( LibGoblin_ProgramInfo *p_pginfo, LibGoblin_ObjectInfo *p_binfo );
70+LIBGOBLIN_OBJINFO_EXTERN
71+ int ObjectInfo_Init( LibGoblin_ProgramInfo *p_pginfo, int i_init_objnums );
72+LIBGOBLIN_OBJINFO_EXTERN
73+ int ObjectInfo_Term( LibGoblin_ProgramInfo *p_pginfo );
74+
75+
76+#ifdef LIBGOBLIN_OBJINFO_INTERNALFUNC
77+ void ObjectInfo_ClearObjectInfo( LibGoblin_ObjectInfo *p_binfo );
78+#endif
79+
80+
81+#endif /* DRD64_HEADER_LIBGOBLIN_OBJINFO */
82+
83+/* EOF of drd64_.h ----------------------------------- */
--- a/libgoblin/drd64_libgoblin_type.h
+++ b/libgoblin/drd64_libgoblin_type.h
@@ -50,17 +50,46 @@ typedef struct {
5050
5151 /*=====================================================================*/
5252 typedef struct {
53- Ptr ptr_address;
54- char *pstr_name;
55- DWord dw_size;
56- DWord dw_srcid;
53+ Ptr ptr_address; // Object Address
54+ DWord dw_size; // Object Size (Address Range)
55+ char *pstr_name; // Object Name (Param./Func./etc...)
56+ //DWord dw_srcid; // SourceInfo struct ID
5757 DWord dw_next;
5858 Byte b_elf_flags;
59- Word w_secid;
59+ Word w_secid; // SectionInfo ItemIndex belong with this object.
6060 } LibGoblin_AddressInfo;
6161
6262
6363 /*=====================================================================*/
64+typedef struct {
65+ int i_id;
66+
67+ Ptr ptr_address; // Object Address
68+ DWord dw_size; // Object Size (Address Range)
69+ char *pstr_name; // Object Name (Param./Func./etc...)
70+ //DWord dw_srcid; // SourceInfo struct ID
71+ DWord dw_next;
72+ Byte b_elf_flags;
73+ Word w_secid; // SectionInfo ItemIndex belong with this object.
74+
75+} LibGoblin_ObjectInfo;
76+
77+
78+/*=====================================================================*/
79+typedef struct {
80+ Ptr ptr_address;
81+ LibGoblin_ObjectInfo *p_objinfo;
82+} LibGoblin_AddressTable;
83+
84+/*=====================================================================*/
85+typedef struct {
86+ int i_srcid;
87+ char str_filename[DRD64_MAX_PATH];
88+ char str_localpath[DRD64_MAX_PATH];
89+} LibGoblin_SourceInfo;
90+
91+
92+/*=====================================================================*/
6493 typedef struct {
6594 int i_id;
6695 int i_refcount;
@@ -174,8 +203,17 @@ typedef struct {
174203 int i_num_binfo;
175204 LibGoblin_BinaryInfo *p_binfo[LIBGOBLIN_BINFO_MAXFILES];
176205
177- int i_opened_bid;
206+ /* Address Table Info. */
207+ LibGoblin_AddressInfo *p_addrinfo;
208+ DWord dw_alloc_addrinfo;
209+ DWord dw_max_addrinfo;
178210
211+ // Object Table ---
212+ LibGoblin_ObjectInfo *p_objinfo;
213+ int i_alloc_objinfo;
214+ int i_max_objinfo;
215+ int i_now_objinfo;
216+
179217 } LibGoblin_ProgramInfo;
180218
181219
--- a/libgoblin/test_libgoblin_loadprog.c
+++ b/libgoblin/test_libgoblin_loadprog.c
@@ -84,6 +84,9 @@ void Test_LibGoblin_LoadProg_API_LoadProgram_test00_001( void )
8484 { goto goto_Test_LibGoblin_LoadProg_API_LoadProgram_test00_001_post; }
8585 }
8686
87+ i_result = LibGoblin_AnalyzeProgram( i_pgid );
88+ CU_ASSERT( 0x00 == i_result );
89+
8790 i_result = LibGoblin_FreeProgInfo( i_pgid );
8891 CU_ASSERT( 0x00 == i_result );
8992
旧リポジトリブラウザで表示