From 41b31873f6436fe8f02ca89ee8f1d46552cf9e81 Mon Sep 17 00:00:00 2001 From: "Koine Yuusuke(koinec)" Date: Tue, 25 Jun 2019 05:26:04 +0900 Subject: [PATCH] (LibGoblin) * WorkBackup --- libgoblin/drd64_libgoblin_debug_dwarf_str.c | 4 ++-- libgoblin/drd64_libgoblin_debug_dwarf_str.h | 12 ++++++------ libgoblin/drd64_libgoblin_dwarf_attrform.c | 13 +++++++++++++ libgoblin/drd64_libgoblin_dwarf_info.c | 7 ++++--- libgoblin/drd64_libgoblin_type.h | 7 +++++++ 5 files changed, 32 insertions(+), 11 deletions(-) diff --git a/libgoblin/drd64_libgoblin_debug_dwarf_str.c b/libgoblin/drd64_libgoblin_debug_dwarf_str.c index 53edbcd..824d14f 100644 --- a/libgoblin/drd64_libgoblin_debug_dwarf_str.c +++ b/libgoblin/drd64_libgoblin_debug_dwarf_str.c @@ -80,12 +80,12 @@ char * int i_cnt; char *pstr_name = NULL; - if( DEBUG_DWARF_STR_AT_MAX >= dw_attr ) { + if( LIBGOBLIN_DWARF_ATTR_DEF_MAX >= dw_attr ) { pstr_name = gpstr_dwarf_attribute_name[ dw_attr ]; goto goto_Debug_DWARF_GetAttributeName_post; } - for( i_cnt = 0; i_cnt < DEBUG_DWARF_STR_AT_EXT_MAX; i_cnt++ ) { + for( i_cnt = 0; i_cnt < LIBGOBLIN_DWARF_ATTR_EXT_MAX; i_cnt++ ) { if( dw_attr == gt_dwarf_str_at_ext[ i_cnt ].dw_at ) { pstr_name = gt_dwarf_str_at_ext[ i_cnt ].pstr_atname; break; diff --git a/libgoblin/drd64_libgoblin_debug_dwarf_str.h b/libgoblin/drd64_libgoblin_debug_dwarf_str.h index a3a00ce..c6524bf 100644 --- a/libgoblin/drd64_libgoblin_debug_dwarf_str.h +++ b/libgoblin/drd64_libgoblin_debug_dwarf_str.h @@ -182,20 +182,20 @@ typedef struct { DWord dw_at; } LibGoblin_Debug_DWARF_Str_ATExtension; -#define DEBUG_DWARF_STR_AT_MAX 0x6f -#define DEBUG_DWARF_STR_AT_EXT_MAX 53 +//#define DEBUG_DWARF_STR_AT_MAX 0x6f +//#define DEBUG_DWARF_STR_AT_EXT_MAX 53 #ifndef DRD64_SRC_LIBGOBLIN_DEBUG_DWARF_STR extern char gstr_dwarf_attribute[ 64 ]; extern LibGoblin_Debug_DWARF_Str_ATExtension - gt_dwarf_str_at_ext[ DEBUG_DWARF_STR_AT_EXT_MAX + 1 ]; - extern char *gpstr_dwarf_attribute_name[ DEBUG_DWARF_STR_AT_MAX + 1 ]; + gt_dwarf_str_at_ext[ LIBGOBLIN_DWARF_ATTR_EXT_MAX + 1 ]; + extern char *gpstr_dwarf_attribute_name[ LIBGOBLIN_DWARF_ATTR_DEF_MAX + 1 ]; #else char gstr_dwarf_attribute[ 64 ]; - char *gpstr_dwarf_attribute_name[ DEBUG_DWARF_STR_AT_MAX + 1 ] = { + char *gpstr_dwarf_attribute_name[ LIBGOBLIN_DWARF_ATTR_DEF_MAX + 1 ] = { "none_AT(ENDorERROR)", /* 0x00 */ "DW_AT_sibling", /* 0x01 */ "DW_AT_location", /* 0x02 */ @@ -318,7 +318,7 @@ typedef struct { // #define DW_AT_lo_user 0x2000 // #define DW_AT_hi_user 0x3fff LibGoblin_Debug_DWARF_Str_ATExtension - gt_dwarf_str_at_ext[ DEBUG_DWARF_STR_AT_EXT_MAX + 1 ] = { + gt_dwarf_str_at_ext[ LIBGOBLIN_DWARF_ATTR_EXT_MAX + 1 ] = { { "DW_AT_sf_names", 0x2101 }, // GNU extensions. { "DW_AT_src_info", 0x2102 }, // GNU extensions. { "DW_AT_mac_info", 0x2103 }, // GNU extensions. diff --git a/libgoblin/drd64_libgoblin_dwarf_attrform.c b/libgoblin/drd64_libgoblin_dwarf_attrform.c index de47f9a..a0617cc 100644 --- a/libgoblin/drd64_libgoblin_dwarf_attrform.c +++ b/libgoblin/drd64_libgoblin_dwarf_attrform.c @@ -302,10 +302,22 @@ Byte * LibGoblin_DWARF_DIEValue *p_val, Byte *pb_info, QWord *pqw_remains, + //DWARF_AbbrevEntry *p_abbrev, DWord dw_format, LibGoblin_BinaryInfo *p_binfo, LibGoblin_DWARF_Info_CUHeader *p_cuheader ) { +/* + LibGoblin_DWARF_DIEValue *p_val, + + // Read Debug Information Entry (DIE) --- + memset( p_infoval, 0x00, sizeof( LibGoblin_DWARF_DIEValue ) * p_abbrev->i_items ); + p_val = p_infoval; + memset( p_binfo->dwarf.t_attr, 0x00, sizeof( p_binfo->dwarf.t_attr) ); + for( i_cnt = 0; i_cnt < p_abbrev->i_items; i_cnt++, p_val++ ) { + dw_attribute = p_abbrev->dw_attribute[ i_cnt ]; + dw_format = p_abbrev->dw_format[ i_cnt ]; +*/ switch( dw_format ) { case DW_FORM_addr: // 0x01: address pb_info = DWARF_AttrForm_ReadFormat_Address( @@ -426,6 +438,7 @@ Byte * default: break; } +// } return pb_info; } diff --git a/libgoblin/drd64_libgoblin_dwarf_info.c b/libgoblin/drd64_libgoblin_dwarf_info.c index ff5be34..a03ccd4 100644 --- a/libgoblin/drd64_libgoblin_dwarf_info.c +++ b/libgoblin/drd64_libgoblin_dwarf_info.c @@ -307,7 +307,6 @@ int t_cuheader.qw_abbrev_offset, t_cuheader.b_pointersize); - // Read & Process DWARF info TAG --- i_childlv = 0; do { @@ -326,14 +325,16 @@ int memset( p_infoval, 0x00, sizeof( LibGoblin_DWARF_DIEValue ) * p_arvnow->i_items ); p_val = p_infoval; + memset( p_binfo->dwarf.t_attr, 0x00, sizeof( p_binfo->dwarf.t_attr) ); + 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 ]; - //pb_info = DWARF_Info_ReadFormat_Data( - // p_val, pb_info, &qw_size_cu, dw_format, p_binfo, &t_cuheader ); pb_info = DWARF_AttrForm_ReadFormat_Data( p_val, pb_info, &qw_size_cu, dw_format, p_binfo, &t_cuheader ); + + } if( 0x00 != p_arvnow->b_children ) { i_childlv++; } diff --git a/libgoblin/drd64_libgoblin_type.h b/libgoblin/drd64_libgoblin_type.h index 17a958d..b2c8bb5 100644 --- a/libgoblin/drd64_libgoblin_type.h +++ b/libgoblin/drd64_libgoblin_type.h @@ -375,6 +375,11 @@ typedef struct { #define LIBGOBLIN_BINFO_FILE_DEBUG 2 #define LIBGOBLIN_BINFO_FILE_LIBRARY -1 +#define LIBGOBLIN_DWARF_ATTR_DEF_MAX 0x6f +#define LIBGOBLIN_DWARF_ATTR_EXT_MAX 53 +#define LIBGOBLIN_DWARF_ATTR_MAX (LIBGOBLIN_DWARF_ATTR_DEF_MAX + LIBGOBLIN_DWARF_ATTR_EXT_MAX) + + typedef struct { /* BinaryInfo Struct ID */ int i_id; @@ -416,6 +421,8 @@ typedef struct { struct { int i_maxvals; LibGoblin_DWARF_DIEValue *p_infoval; + + LibGoblin_DWARF_Attribute t_attr[LIBGOBLIN_DWARF_ATTR_MAX+1]; } dwarf; -- 2.11.0