drd64_libgoblin_dwarf_common.o \
drd64_libgoblin_debug_elf.o \
drd64_libgoblin_debug_dwarf_str.o \
+ drd64_libgoblin_debug_dwarf.o \
drd64_libgoblin_debug_objinfo.o
HEADER = drd64_libgoblin.h \
drd64_libgoblin_section_defs.h \
drd64_libgoblin_dwarf_common.h \
drd64_libgoblin_debug_elf.h \
drd64_libgoblin_debug_dwarf_str.h \
+ drd64_libgoblin_debug_dwarf.h \
drd64_libgoblin_debug_objinfo.h \
drd64_libgoblin_addrinfo.h \
$(USER_HEADER) $(SUPER_HEADER) $(LIB_HEADER)
drd64_libgoblin_debug_dwarf_str.o: drd64_libgoblin_debug_dwarf_str.c $(HEADER)
$(CC) -c -o drd64_libgoblin_debug_dwarf_str.o $(FLAGS_DEBUG) \
drd64_libgoblin_debug_dwarf_str.c
+drd64_libgoblin_debug_dwarf.o: drd64_libgoblin_debug_dwarf.c $(HEADER)
+ $(CC) -c -o drd64_libgoblin_debug_dwarf.o $(FLAGS_DEBUG) \
+ drd64_libgoblin_debug_dwarf.c
drd64_libgoblin_debug_objinfo.o: drd64_libgoblin_debug_objinfo.c $(HEADER)
$(CC) -c -o drd64_libgoblin_debug_objinfo.o $(FLAGS_DEBUG) \
drd64_libgoblin_debug_objinfo.c
#include"drd64_libgoblin_dwarf_tag.h"
#include"drd64_libgoblin_dwarf.h"
#include"drd64_libgoblin_debug_dwarf_str.h"
+#include"drd64_libgoblin_debug_dwarf.h"
#include"drd64_libgoblin_debug_elf.h"
#include"drd64_libgoblin_debug_objinfo.h"
--- /dev/null
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+ D r . D e a m o n 6 4
+ for INTEL64(R), AMD64(R)
+
+ Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.c
+Function:
+Comment:
+----------------------------------------------------------------------*/
+
+#define DRD64_SRC_LIBGOBLIN_DEBUG_DWARF
+#include"drd64_libgoblin.h"
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_DEBUG_DWARF_EXTERN
+void
+ Debug_DWARF_PrintDIE(
+ LibGoblin_BinaryFile *p_bfile,
+ DWARF_AbbrevEntry *p_abbrev,
+ DWord dw_abbrevid,
+ int i_childlv )
+{
+ int i_cnt;
+ int i_end;
+ char str_space[65];
+ DWord dw_tag;
+ QWord qw_cnt;
+ LibGoblin_DWARF_DIEValue *p_val;
+ DWARF_AbbrevEntry *p_arvnow;
+
+ memset( str_space, ' ', 64 );
+ i_end = ((64 < i_childlv) ? 64 : (2 + (i_childlv * 2)));
+ str_space[i_end] = '\0';
+
+ p_arvnow = p_abbrev + (dw_abbrevid - 1);
+ p_val = p_bfile->dwarf.p_infoval;
+
+ printf( "%s<%2d>: Abbrev Number: %2d (%s [%02xh])\n",
+ str_space, i_childlv, dw_abbrevid,
+ Debug_DWARF_GetTAGname( p_arvnow->dw_tag ), p_arvnow->dw_tag );
+
+ for( i_cnt = 0; i_cnt < p_arvnow->i_items; i_cnt++, p_val++ ) {
+ printf("%s %-20s, %-16s : ",
+ str_space,
+ Debug_DWARF_GetAttributeName( p_arvnow->dw_attribute[ i_cnt ] ),
+ Debug_DWARF_GetFormName( p_arvnow->dw_format[ i_cnt ] ) );
+
+ switch( p_val->b_type ) {
+ case LIBGOBLIN_DWARF_INFO_TYPE_STRING:
+ printf( "[Str ] %s\n", p_val->value.pstr_value ); break;
+ case LIBGOBLIN_DWARF_INFO_TYPE_WORD:
+ printf( "[Word ] %d\n", p_val->value.w_value ); break;
+ case LIBGOBLIN_DWARF_INFO_TYPE_DWORD:
+ printf( "[DWord] %d\n", p_val->value.dw_value ); break;
+ case LIBGOBLIN_DWARF_INFO_TYPE_QWORD:
+ printf( "[QWord] %ld\n", p_val->value.qw_value ); break;
+ case LIBGOBLIN_DWARF_INFO_TYPE_BYTE:
+ printf( "[Byte ] %d\n", p_val->value.b_value ); break;
+ case LIBGOBLIN_DWARF_INFO_TYPE_LINK:
+ printf( "[LINK ] %p\n", p_val->value.pb_link ); break;
+ case LIBGOBLIN_DWARF_INFO_TYPE_BLOCK:
+ printf( "[Block] Size= %ld (", p_val->qw_size );
+ for( qw_cnt = 0; qw_cnt < p_val->qw_size; qw_cnt++ )
+ { printf("%0xh ", *(p_val->value.pb_data + qw_cnt) ); }
+ puts(")");
+ break;
+ default:
+ break;
+ }
+
+ }
+
+ return;
+}
+
+
+/* EOF of drd64_.c ----------------------------------- */
--- /dev/null
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+ D r . D e a m o n 6 4
+ for INTEL64(R), AMD64(R)
+
+ Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.h
+Function: Header
+Comment:
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_LIBGOBLIN_DEBUG_DWARF
+#define DRD64_HEADER_LIBGOBLIN_DEBUG_DWARF
+
+#include"drd64_libgoblin.h"
+
+#ifdef DRD64_SRC_LIBGOBLIN_DEBUG_DWARF
+ #define LIBGOBLIN_DEBUG_DWARF_EXTERN
+#else
+ #define LIBGOBLIN_DEBUG_DWARF_EXTERN extern
+#endif
+
+LIBGOBLIN_DEBUG_DWARF_EXTERN
+ void Debug_DWARF_PrintDIE(
+ LibGoblin_BinaryFile *p_bfile, DWARF_AbbrevEntry *p_abbrev,
+ DWord dw_abbrevid, int i_childlv );
+
+#endif /* DRD64_HEADER_LIBGOBLIN_BINFO */
+
+/* EOF of drd64_.h ----------------------------------- */
}
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-LIBGOBLIN_DEBUG_DWARF_STR_EXTERN
-void
- Debug_DWARF_PrintDIE(
- DWord dw_abbrevid,
- DWord dw_attribute,
- DWord dw_format,
- int i_childlv,
- LibGoblin_DWARF_DIEValue *p_val )
-{
-
- return;
-}
-
-
/* EOF of drd64_.c ----------------------------------- */
break;
}
- switch( p_val->b_type ) {
- case LIBGOBLIN_DWARF_INFO_TYPE_STRING:
- printf( "[Str] %s\n", p_val->value.pstr_value );
- break;
- case LIBGOBLIN_DWARF_INFO_TYPE_WORD:
- printf( "[Word] %d\n", p_val->value.w_value );
- break;
- case LIBGOBLIN_DWARF_INFO_TYPE_DWORD:
- printf( "[DWord] %d\n", p_val->value.dw_value );
- break;
- case LIBGOBLIN_DWARF_INFO_TYPE_QWORD:
- printf( "[QWord] %ld\n", p_val->value.qw_value );
- break;
- case LIBGOBLIN_DWARF_INFO_TYPE_BYTE:
- printf( "[Byte] %d\n", p_val->value.b_value );
- break;
- case LIBGOBLIN_DWARF_INFO_TYPE_LINK:
- printf( "[LINK] %p\n", p_val->value.pb_link );
- break;
- case LIBGOBLIN_DWARF_INFO_TYPE_BLOCK:
- printf( "[Block] Size= %ld\n ", p_val->qw_size );
- for( qw_cnt = 0; qw_cnt < p_val->qw_size; qw_cnt++ ) {
- printf("%0xh ", *(p_val->value.pb_data + qw_cnt) );
- }
- puts("");
- break;
- default:
- break;
- }
-
return pb_info;
}
}
p_arvnow = p_abbrev + (dw_arvid - 1);
-printf(" [AbbrevID = %d] %s (%02xh)\n", dw_arvid, Debug_DWARF_GetTAGname(p_arvnow->dw_tag), p_arvnow->dw_tag );
// Read Debug Information Entry (DIE) ---
memset( p_infoval, 0x00, sizeof( LibGoblin_DWARF_DIEValue ) * p_arvnow->i_items );
for( i_cnt = 0; i_cnt < p_arvnow->i_items; i_cnt++, p_val++ ) {
dw_attribute = p_arvnow->dw_attribute[ i_cnt ];
dw_format = p_arvnow->dw_format[ i_cnt ];
-printf(" %-24s, %-24s : ", Debug_DWARF_GetAttributeName( dw_attribute ),
- Debug_DWARF_GetFormName( dw_format ) );
pb_info = DWARF_Info_ReadFormat_Data(
p_val, pb_info, &qw_size_cu, dw_format, p_binfo, &t_cuheader );
// Dispatch for generate Rapid-Access Table by DIE-tag
+ Debug_DWARF_PrintDIE( p_bfile, p_abbrev, dw_arvid, i_childlv );
+
}while( 0 != qw_size_cu );
qw_size_info -= t_cuheader.qw_unitsize;
//}while((qw_size_info > 0) && (i_srcfiles > 0));
+
+
return 0x00;
}