Skip to content

Commit 6f22e49

Browse files
Fix StructGolangDatatype
It is a temporary.
1 parent 4e658bd commit 6f22e49

File tree

3 files changed

+13
-3
lines changed

3 files changed

+13
-3
lines changed

src/main/java/golanganalyzerextension/GolangBuildInfo.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public GolangBuildInfo(GolangBinary go_bin) {
2727
}
2828

2929
private Optional<Address> get_build_info_addr() {
30+
// ver > go1.12.*
3031
// cmd/go/internal/version/version.go
3132
// "\xff Go buildinf:"
3233
byte build_info_magic[]={(byte)0xff,(byte)0x20,(byte)0x47,(byte)0x6f,(byte)0x20,(byte)0x62,(byte)0x75,(byte)0x69,(byte)0x6c,(byte)0x64,(byte)0x69,(byte)0x6e,(byte)0x66,(byte)0x3a};

src/main/java/golanganalyzerextension/GolangFunction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ String pc_to_file_name(int target_pc_offset) {
459459
if(file_name_addr==null) {
460460
return null;
461461
}
462-
//Logger.append_message(String.format("%x %x %x %x", cutab_base.getOffset(), file_base.getOffset(), cu_offset, file_no));
462+
463463
String file_name=go_bin.create_string_data(file_name_addr);
464464
service.add_filename(file_name);
465465
return file_name;

src/main/java/golanganalyzerextension/StructGolangDatatype.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class StructField {
1818
StructField(GolangBinary go_bin, String name, long type_key, int offset){
1919
this.name=name;
2020
this.type_key=type_key;
21-
if(go_bin.compare_go_version("go1.19beta1")<=0) {
21+
if(go_bin.compare_go_version("go1.19beta1")<=0/* || go_bin.compare_go_version("go1.9beta1")>0*/) {
2222
this.offset=offset;
2323
} else {
2424
this.offset=offset>>1;
@@ -37,10 +37,19 @@ class StructGolangDatatype extends GolangDatatype {
3737
@Override
3838
public DataType get_datatype(DatatypeSearcher datatype_searcher) {
3939
StructureDataType structure_datatype=new StructureDataType(name, 0);
40+
41+
// ver <= go1.8.*
42+
int pre_field_end=0;
43+
4044
for(StructField field : field_list) {
4145
DataType field_datatype=datatype_searcher.get_datatype_by_key(field.type_key);
4246
if(field_datatype!=null && !field_datatype.isZeroLength() && !(field_datatype instanceof VoidDataType)) {
43-
structure_datatype.insertAtOffset(field.offset, field_datatype, field_datatype.getLength(), field.name, null);
47+
int offset=field.offset;
48+
if(offset<pre_field_end) {
49+
offset<<=1;
50+
}
51+
structure_datatype.insertAtOffset(offset, field_datatype, field_datatype.getLength(), field.name, null);
52+
pre_field_end=offset+field_datatype.getLength();
4453
}
4554
}
4655
for(int i=structure_datatype.getLength(); i<size; i++) {

0 commit comments

Comments
 (0)