Skip to content

Commit

Permalink
Fix StructGolangDatatype
Browse files Browse the repository at this point in the history
It is a temporary.
  • Loading branch information
mooncat-greenpy committed Sep 25, 2022
1 parent 4e658bd commit 6f22e49
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 3 deletions.
1 change: 1 addition & 0 deletions src/main/java/golanganalyzerextension/GolangBuildInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public GolangBuildInfo(GolangBinary go_bin) {
}

private Optional<Address> get_build_info_addr() {
// ver > go1.12.*
// cmd/go/internal/version/version.go
// "\xff Go buildinf:"
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};
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/golanganalyzerextension/GolangFunction.java
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ String pc_to_file_name(int target_pc_offset) {
if(file_name_addr==null) {
return null;
}
//Logger.append_message(String.format("%x %x %x %x", cutab_base.getOffset(), file_base.getOffset(), cu_offset, file_no));

String file_name=go_bin.create_string_data(file_name_addr);
service.add_filename(file_name);
return file_name;
Expand Down
13 changes: 11 additions & 2 deletions src/main/java/golanganalyzerextension/StructGolangDatatype.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class StructField {
StructField(GolangBinary go_bin, String name, long type_key, int offset){
this.name=name;
this.type_key=type_key;
if(go_bin.compare_go_version("go1.19beta1")<=0) {
if(go_bin.compare_go_version("go1.19beta1")<=0/* || go_bin.compare_go_version("go1.9beta1")>0*/) {
this.offset=offset;
} else {
this.offset=offset>>1;
Expand All @@ -37,10 +37,19 @@ class StructGolangDatatype extends GolangDatatype {
@Override
public DataType get_datatype(DatatypeSearcher datatype_searcher) {
StructureDataType structure_datatype=new StructureDataType(name, 0);

// ver <= go1.8.*
int pre_field_end=0;

for(StructField field : field_list) {
DataType field_datatype=datatype_searcher.get_datatype_by_key(field.type_key);
if(field_datatype!=null && !field_datatype.isZeroLength() && !(field_datatype instanceof VoidDataType)) {
structure_datatype.insertAtOffset(field.offset, field_datatype, field_datatype.getLength(), field.name, null);
int offset=field.offset;
if(offset<pre_field_end) {
offset<<=1;
}
structure_datatype.insertAtOffset(offset, field_datatype, field_datatype.getLength(), field.name, null);
pre_field_end=offset+field_datatype.getLength();
}
}
for(int i=structure_datatype.getLength(); i<size; i++) {
Expand Down

0 comments on commit 6f22e49

Please sign in to comment.