mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 17:59:46 +02:00
Merge remote-tracking branch 'origin/GP-5462_dev747368_missing_gotype_subst'
This commit is contained in:
commit
636f28dbdc
1 changed files with 9 additions and 2 deletions
|
@ -42,7 +42,7 @@ public class GoTypeManager {
|
||||||
"*runtime.funcval", "func()" // alias for closure
|
"*runtime.funcval", "func()" // alias for closure
|
||||||
);
|
);
|
||||||
private static final Pattern TYPENAME_SPLITTER_REGEX =
|
private static final Pattern TYPENAME_SPLITTER_REGEX =
|
||||||
Pattern.compile("(\\*|\\[\\]|\\[[0-9.]\\])(.*)");
|
Pattern.compile("(\\*|\\[\\]|\\[[0-9.]+\\])(.*)");
|
||||||
|
|
||||||
static class TypeRec {
|
static class TypeRec {
|
||||||
GoType type;
|
GoType type;
|
||||||
|
@ -647,6 +647,10 @@ public class GoTypeManager {
|
||||||
return genericDictDT;
|
return genericDictDT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Structure getGenericInterfaceDT() {
|
||||||
|
return goBinary.getStructureDataType(GoIface.class);
|
||||||
|
}
|
||||||
|
|
||||||
public DataType getMethodClosureType(String recvType) throws IOException {
|
public DataType getMethodClosureType(String recvType) throws IOException {
|
||||||
//struct struct { F uintptr; R *atomic.Uint64 }
|
//struct struct { F uintptr; R *atomic.Uint64 }
|
||||||
GoType closureType = findGoType("struct { F uintptr; R %s }".formatted(recvType));
|
GoType closureType = findGoType("struct { F uintptr; R %s }".formatted(recvType));
|
||||||
|
@ -717,7 +721,7 @@ public class GoTypeManager {
|
||||||
if (typeName.startsWith("*")) {
|
if (typeName.startsWith("*")) {
|
||||||
return new GoTypeBridge(typeName, dtm.getPointer(null), goBinary);
|
return new GoTypeBridge(typeName, dtm.getPointer(null), goBinary);
|
||||||
}
|
}
|
||||||
else if (typeName.startsWith("[]")) {
|
else if (typeName.startsWith("[]") || typeName.equals("runtime.slice")) {
|
||||||
return new GoTypeBridge(typeName, getGenericSliceDT(), goBinary);
|
return new GoTypeBridge(typeName, getGenericSliceDT(), goBinary);
|
||||||
}
|
}
|
||||||
else if (typeName.startsWith("map[")) {
|
else if (typeName.startsWith("map[")) {
|
||||||
|
@ -730,6 +734,9 @@ public class GoTypeManager {
|
||||||
DataType closureType = getDefaultClosureType();
|
DataType closureType = getDefaultClosureType();
|
||||||
return new GoTypeBridge(typeName, dtm.getPointer(closureType), goBinary);
|
return new GoTypeBridge(typeName, dtm.getPointer(closureType), goBinary);
|
||||||
}
|
}
|
||||||
|
else if (typeName.equals("runtime.iface")) {
|
||||||
|
return new GoTypeBridge(typeName, getGenericInterfaceDT(), goBinary);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue