drd64_libgoblin_dwarf_attrform.o \
drd64_libgoblin_dwarf_info.o \
drd64_libgoblin_dwarf_oldline.o \
+ drd64_libgoblin_dwarf_tag_compileunit.o \
drd64_libgoblin_dwarf_tag_type.o \
drd64_libgoblin_dwarf_tag_struct.o \
drd64_libgoblin_dwarf_tag_parameter.o \
drd64_libgoblin_dwarf_attrform.h \
drd64_libgoblin_dwarf_info.h \
drd64_libgoblin_dwarf_oldline.h \
+ drd64_libgoblin_dwarf_tag_compileunit.h \
drd64_libgoblin_dwarf_tag_type.h \
drd64_libgoblin_dwarf_tag_struct.h \
drd64_libgoblin_dwarf_tag_parameter.h \
drd64_libgoblin_dwarf_oldline.c $(HEADER)
$(CC) -c -o drd64_libgoblin_dwarf_oldline.o $(FLAGS_DEBUG) \
drd64_libgoblin_dwarf_oldline.c
+drd64_libgoblin_dwarf_tag_compileunit.o: \
+ drd64_libgoblin_dwarf_tag_compileunit.c $(HEADER)
+ $(CC) -c -o drd64_libgoblin_dwarf_tag_compileunit.o $(FLAGS_DEBUG) \
+ drd64_libgoblin_dwarf_tag_compileunit.c
drd64_libgoblin_dwarf_tag_type.o: \
drd64_libgoblin_dwarf_tag_type.c $(HEADER)
$(CC) -c -o drd64_libgoblin_dwarf_tag_type.o $(FLAGS_DEBUG) \
#include"../include/libfiletype.h"
#include"../include/libbrownie.h"
#include"drd64_libgoblin_section_defs.h"
+#include"drd64_libgoblin_type_dwarf.h"
#include"drd64_libgoblin_type.h"
#include"drd64_libgoblin_proginfo.h"
#include"drd64_libgoblin_binfo.h"
#include"drd64_libgoblin_dwarf_attrform.h"
#include"drd64_libgoblin_dwarf_info.h"
#include"drd64_libgoblin_dwarf_oldline.h"
+#include"drd64_libgoblin_dwarf_tag_compileunit.h"
#include"drd64_libgoblin_dwarf_tag_type.h"
#include"drd64_libgoblin_dwarf_tag_struct.h"
#include"drd64_libgoblin_dwarf_tag_parameter.h"
int i_objfiles;
int i_abbrevs;
Byte *pb_info;
+ Byte *pb_now;
Byte *pb_custart;
DWord dw_arvid;
QWord qw_temp;
DWARF_AbbrevEntry *p_arvnow;
LibGoblin_DWARF_Info_CUHeader t_cuheader;
LibGoblin_SrcFile *p_srcfile;
+ LibGoblin_DWARF_Info_Ancestry t_ancestry[DWARF_ANCESTRY_MAX];
assert( NULL != p_binfo );
//printf( "\n SrcFile: %s, Orig.Path: %s\n", p_srcfile->str_filename, p_srcfile->str_srcpath );
}
-/*
- printf( " size: %ld, ver:%d, abbrev off.:%ld, addr.size: %d\n",
- t_cuheader.qw_unitsize,
- t_cuheader.w_version,
- t_cuheader.qw_abbrev_offset,
- t_cuheader.b_pointersize);
-*/
+
+ //printf( " size: %ld, ver:%d, abbrev off.:%ld, addr.size: %d\n",
+ // t_cuheader.qw_unitsize, t_cuheader.w_version, t_cuheader.qw_abbrev_offset, t_cuheader.b_pointersize);
// Read & Process DWARF info TAG ---
i_childlv = 0;
+ t_ancestry[0].pb_dwinfo = NULL;
+ t_ancestry[0].i_objid = NO_OBJ;
+
do {
+ pb_now = pb_info;
+
// Read Reference Abbrev-ID ---
pb_info = DWARF_Common_DecodeULEB128( &qw_temp, pb_info, &qw_size_cu );
dw_arvid = (DWord)qw_temp;
pb_info, &qw_size_cu, p_arvnow, p_binfo, &t_cuheader );
// Dispatch for generate Rapid-Access Table by DIE-tag
- i_result = DWARF_Tag_Dispatch( p_binfo, p_arvnow );
+ i_result = DWARF_Tag_Dispatch( p_binfo, p_arvnow, i_childlv, t_ancestry );
+ //i_result = DWARF_Tag_Dispatch( p_binfo, p_arvnow );
+
+ t_ancestry[i_childlv].pb_dwinfo = pb_now;
+ t_ancestry[i_childlv].i_objid = i_result;
Debug_DWARF_PrintDIE( p_binfo, p_abbrev, dw_arvid, i_childlv );
- if( 0x00 != p_arvnow->b_children ) { i_childlv++; }
+ if( 0x00 != p_arvnow->b_children ) {
+ i_childlv++;
+ t_ancestry[i_childlv].pb_dwinfo = NULL;
+ t_ancestry[i_childlv].i_objid = NO_OBJ;
+ }
}while( 0 != qw_size_cu );
qw_size_info -= t_cuheader.qw_unitsize;
--- /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_DWARF_TAG_COMPILEUNIT
+#include"drd64_libgoblin.h"
+
+/*----------------------------------------------------------------------
+DW_TAG_compile_unit
+DW_TAG_partial_unit
+DW_TAG_imported_unit
+----------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_TAG_COMPILEUNIT_EXTERN
+int
+ DWARF_Tag_CompileUnit_UnImplement(
+ DWord dw_tag,
+ LibGoblin_BinaryInfo *p_binfo )
+{
+ printf( " UnImplement DWARF Tag(CompileUnit): %s [%02xh]\n",
+ Debug_DWARF_GetTAGname( dw_tag ), dw_tag );
+
+ return 0x00;
+}
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+
+
+
+/* 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_DWARF_TAG_COMPILEUNIT
+#define DRD64_HEADER_LIBGOBLIN_DWARF_TAG_COMPILEUNIT
+
+#include"drd64_libgoblin.h"
+
+#ifdef DRD64_SRC_LIBGOBLIN_DWARF_TAG_COMPILEUNIT
+ #define LIBGOBLIN_DWARF_TAG_COMPILEUNIT_EXTERN
+#else
+ #define LIBGOBLIN_DWARF_TAG_COMPILEUNIT_EXTERN extern
+#endif
+
+LIBGOBLIN_DWARF_TAG_COMPILEUNIT_EXTERN
+ int DWARF_Tag_CompileUnit_UnImplement( DWord dw_tag, LibGoblin_BinaryInfo *p_binfo );
+
+
+#endif /* DRD64_HEADER_LIBGOBLIN_BINFO */
+
+/* EOF of drd64_.h ----------------------------------- */
int
DWARF_Tag_Dispatch(
LibGoblin_BinaryInfo *p_binfo,
- DWARF_AbbrevEntry *p_abbrev )
+ DWARF_AbbrevEntry *p_abbrev,
+ int i_childlv,
+ LibGoblin_DWARF_Info_Ancestry *p_ancestry )
{
int i_result;
DWord dw_cnt;
LIBGOBLIN_DWARF_TAG_DISPATCH_EXTERN
int DWARF_Tag_Dispatch(
LibGoblin_BinaryInfo *p_binfo,
- DWARF_AbbrevEntry *p_abbrev );
-
+ DWARF_AbbrevEntry *p_abbrev,
+ int i_childlv,
+ LibGoblin_DWARF_Info_Ancestry *p_ancestry );
// DW_TAG_file_type (for PASCAL) is TagID unknown.
{ DW_TAG_pointer_type, DWARF_Tag_Type_UnImplement }, // 0x0f: type
{ DW_TAG_reference_type, DWARF_Tag_Type_UnImplement }, // 0x10: type
- { DW_TAG_compile_unit, NULL }, // 0x11
+ { DW_TAG_compile_unit, DWARF_Tag_CompileUnit_UnImplement },// 0x11: compileunit
{ DW_TAG_string_type, DWARF_Tag_NotClang_UnImplement }, // 0x12: notclang
{ DW_TAG_structure_type, DWARF_Tag_Struct_UnImplement }, // 0x13: struct
{ 0x14, NULL },
{ DW_TAG_namespace, DWARF_Tag_Class_UnImplement }, // 0x39: class
{ DW_TAG_imported_module, DWARF_Tag_Class_UnImplement }, // 0x3a: class
{ DW_TAG_unspecified_type, DWARF_Tag_Type_UnImplement }, // 0x3b: type
- { DW_TAG_partial_unit, DWARF_Tag_NotClang_UnImplement }, // 0x3c: notclang
- { DW_TAG_imported_unit, DWARF_Tag_NotClang_UnImplement }, // 0x3d: notclang
+ { DW_TAG_partial_unit, DWARF_Tag_CompileUnit_UnImplement}, // 0x3c: compileunit
+ { DW_TAG_imported_unit, DWARF_Tag_CompileUnit_UnImplement },// 0x3d: compileunit
{ 0x3e, NULL },
{ DW_TAG_condition, DWARF_Tag_NotClang_UnImplement }, // 0x3f: notclang
/*=====================================================================*/
-typedef struct {
- QWord qw_unitsize;
- Word w_version;
- Byte b_pointersize;
- Byte b_bits;
- Byte b_offsetsize;
- QWord qw_abbrev_offset;
- Byte *pb_custart;
-
- QWord qw_type_signature; // for DWARF4
- QWord qw_type_offset; // for DWARF4
-} LibGoblin_DWARF_Info_CUHeader;
-
-
-/*=====================================================================*/
-#define DWARF_ABBREV_MAXITEMS 30
-
-typedef struct {
- DWord dw_id;
- DWord dw_tag;
- Byte b_children;
- int i_items;
- DWord dw_attribute[ DWARF_ABBREV_MAXITEMS ];
- DWord dw_format[ DWARF_ABBREV_MAXITEMS ];
-} DWARF_AbbrevEntry;
-
-
-/*=====================================================================*/
-#define LIBGOBLIN_DWARF_INFO_TYPE_NONE 0x00
-#define LIBGOBLIN_DWARF_INFO_TYPE_BYTE 0x01
-#define LIBGOBLIN_DWARF_INFO_TYPE_WORD 0x02
-#define LIBGOBLIN_DWARF_INFO_TYPE_DWORD 0x03
-#define LIBGOBLIN_DWARF_INFO_TYPE_QWORD 0x04
-#define LIBGOBLIN_DWARF_INFO_TYPE_INT64 0x05
-#define LIBGOBLIN_DWARF_INFO_TYPE_POINTER 0x06
-#define LIBGOBLIN_DWARF_INFO_TYPE_STRING 0x07
-#define LIBGOBLIN_DWARF_INFO_TYPE_BLOCK 0x08
-#define LIBGOBLIN_DWARF_INFO_TYPE_LINK 0x09
-
-typedef struct {
- Byte b_type;
- QWord qw_size;
- DWord dw_format;
-
- union {
- Byte b_value;
- Word w_value;
- DWord dw_value;
- QWord qw_value;
- QWord qw_link;
- Int64 ii_value;
- void *p_value;
- Byte *pb_link;
- char *pstr_value;
- Byte *pb_data; // for BlockData
- } value;
-} LibGoblin_DWARF_DIEValue;
-
-
-/*=====================================================================*/
-typedef struct {
- DWord dw_attribute;
- LibGoblin_DWARF_DIEValue *p_val;
-} LibGoblin_DWARF_Attribute;
-
-
-/*=====================================================================*/
typedef struct {
Byte *pb_sechdr;
Byte *pb_data; // FileLocation (Offset)
--- /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_TYPE_DWARF
+#define DRD64_HEADER_LIBGOBLIN_TYPE_DWARF
+
+
+/*=====================================================================*/
+#define DWARF_ANCESTRY_MAX 64
+
+typedef struct {
+ Byte *pb_dwinfo;
+ int i_objid;
+} LibGoblin_DWARF_Info_Ancestry;
+
+
+/*=====================================================================*/
+typedef struct {
+ QWord qw_unitsize;
+ Word w_version;
+ Byte b_pointersize;
+ Byte b_bits;
+ Byte b_offsetsize;
+ QWord qw_abbrev_offset;
+ Byte *pb_custart;
+
+ QWord qw_type_signature; // for DWARF4
+ QWord qw_type_offset; // for DWARF4
+} LibGoblin_DWARF_Info_CUHeader;
+
+
+/*=====================================================================*/
+#define DWARF_ABBREV_MAXITEMS 30
+
+typedef struct {
+ DWord dw_id;
+ DWord dw_tag;
+ Byte b_children;
+ int i_items;
+ DWord dw_attribute[ DWARF_ABBREV_MAXITEMS ];
+ DWord dw_format[ DWARF_ABBREV_MAXITEMS ];
+} DWARF_AbbrevEntry;
+
+
+/*=====================================================================*/
+#define LIBGOBLIN_DWARF_INFO_TYPE_NONE 0x00
+#define LIBGOBLIN_DWARF_INFO_TYPE_BYTE 0x01
+#define LIBGOBLIN_DWARF_INFO_TYPE_WORD 0x02
+#define LIBGOBLIN_DWARF_INFO_TYPE_DWORD 0x03
+#define LIBGOBLIN_DWARF_INFO_TYPE_QWORD 0x04
+#define LIBGOBLIN_DWARF_INFO_TYPE_INT64 0x05
+#define LIBGOBLIN_DWARF_INFO_TYPE_POINTER 0x06
+#define LIBGOBLIN_DWARF_INFO_TYPE_STRING 0x07
+#define LIBGOBLIN_DWARF_INFO_TYPE_BLOCK 0x08
+#define LIBGOBLIN_DWARF_INFO_TYPE_LINK 0x09
+
+typedef struct {
+ Byte b_type;
+ QWord qw_size;
+ DWord dw_format;
+
+ union {
+ Byte b_value;
+ Word w_value;
+ DWord dw_value;
+ QWord qw_value;
+ QWord qw_link;
+ Int64 ii_value;
+ void *p_value;
+ Byte *pb_link;
+ char *pstr_value;
+ Byte *pb_data; // for BlockData
+ } value;
+} LibGoblin_DWARF_DIEValue;
+
+
+/*=====================================================================*/
+typedef struct {
+ DWord dw_attribute;
+ LibGoblin_DWARF_DIEValue *p_val;
+} LibGoblin_DWARF_Attribute;
+
+
+#endif /* DRD64_HEADER_LIBGOBLIN_TYPE*/
+
+/* EOF of drd64_.h ----------------------------------- */