|
|
|
@ -187,7 +187,8 @@ find_subroutine_offset(u8 *file, u64 header_size, u8 address_size,
@@ -187,7 +187,8 @@ find_subroutine_offset(u8 *file, u64 header_size, u8 address_size,
|
|
|
|
|
switch (form) { |
|
|
|
|
case DW_FORM_sec_offset: |
|
|
|
|
case DW_FORM_strp: { |
|
|
|
|
u32 data = file[data_offset]; |
|
|
|
|
u32 data; |
|
|
|
|
memcpy(&data, file + data_offset, 4); |
|
|
|
|
data_offset += 4; // 8 bytes for x64 DWARF!
|
|
|
|
|
|
|
|
|
|
if (form == DW_FORM_strp) { |
|
|
|
@ -232,7 +233,8 @@ find_subroutine_offset(u8 *file, u64 header_size, u8 address_size,
@@ -232,7 +233,8 @@ find_subroutine_offset(u8 *file, u64 header_size, u8 address_size,
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
case DW_FORM_ref4: { |
|
|
|
|
u32 data = file[data_offset]; |
|
|
|
|
u32 data; |
|
|
|
|
memcpy(&data, file + data_offset, 4); |
|
|
|
|
data_offset += 4; |
|
|
|
|
//printf("%#x\n", data);
|
|
|
|
|
u32 referenced_data = file[original_data_offset - header_size + data]; |
|
|
|
@ -262,21 +264,24 @@ find_subroutine_offset(u8 *file, u64 header_size, u8 address_size,
@@ -262,21 +264,24 @@ find_subroutine_offset(u8 *file, u64 header_size, u8 address_size,
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
case DW_FORM_data2: { |
|
|
|
|
u16 data = file[data_offset]; |
|
|
|
|
u16 data; |
|
|
|
|
memcpy(&data, file + data_offset, 2); |
|
|
|
|
data_offset += 2; |
|
|
|
|
//printf("%#x\n", data);
|
|
|
|
|
break; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
case DW_FORM_data4: { |
|
|
|
|
u32 data = file[data_offset]; |
|
|
|
|
u32 data; |
|
|
|
|
memcpy(&data, file + data_offset, 4); |
|
|
|
|
data_offset += 4; |
|
|
|
|
//printf("%#x\n", data);
|
|
|
|
|
break; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
case DW_FORM_data8: { |
|
|
|
|
u64 data = file[data_offset]; |
|
|
|
|
u64 data; |
|
|
|
|
memcpy(&data, file + data_offset, 8); |
|
|
|
|
data_offset += 8; |
|
|
|
|
//printf("%#lx\n", data);
|
|
|
|
|
break; |
|
|
|
@ -284,7 +289,7 @@ find_subroutine_offset(u8 *file, u64 header_size, u8 address_size,
@@ -284,7 +289,7 @@ find_subroutine_offset(u8 *file, u64 header_size, u8 address_size,
|
|
|
|
|
|
|
|
|
|
default: { |
|
|
|
|
if (form) { |
|
|
|
|
//printf("unknown attribute form %d\n", form);
|
|
|
|
|
printf("unknown attribute form %d\n", form); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|