From fc27060b42d3444d37596fa7ce7a43d6b8b737c0 Mon Sep 17 00:00:00 2001 From: ghizard <50744617+ghizard@users.noreply.github.com> Date: Fri, 31 Jul 2026 16:25:26 -0400 Subject: [PATCH] GP-7106 - MDMANG - Improve some extended data types --- .../mdemangler/datatype/MDDataTypeParser.java | 6 ++-- ...aType.java => MDAngleUnknownDataType.java} | 10 +++---- ...endedDataType.java => MDAutoDataType.java} | 12 ++++---- ...aType.java => MDDecltypeAutoDataType.java} | 12 ++++---- .../test/java/mdemangler/MDMangBaseTest.java | 28 +++++++++++++++++-- 5 files changed, 46 insertions(+), 22 deletions(-) rename Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/{MDUnknownRExtendedDataType.java => MDAngleUnknownDataType.java} (80%) rename Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/{MDUnknownPExtendedDataType.java => MDAutoDataType.java} (75%) rename Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/{MDUnknownTExtendedDataType.java => MDDecltypeAutoDataType.java} (75%) diff --git a/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/MDDataTypeParser.java b/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/MDDataTypeParser.java index 9318bb2f1c..f9607b887e 100644 --- a/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/MDDataTypeParser.java +++ b/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/MDDataTypeParser.java @@ -352,19 +352,19 @@ public class MDDataTypeParser { dt = new MDArrayBasicType(dmang); break; case 'P': - dt = new MDUnknownPExtendedDataType(dmang); + dt = new MDAutoDataType(dmang); break; case 'Q': dt = new MDChar8DataType(dmang); break; case 'R': - dt = new MDUnknownRExtendedDataType(dmang); + dt = new MDAngleUnknownDataType(dmang); break; case 'S': dt = new MDChar16DataType(dmang); break; case 'T': - dt = new MDUnknownTExtendedDataType(dmang); + dt = new MDDecltypeAutoDataType(dmang); break; case 'U': dt = new MDChar32DataType(dmang); diff --git a/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDUnknownRExtendedDataType.java b/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDAngleUnknownDataType.java similarity index 80% rename from Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDUnknownRExtendedDataType.java rename to Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDAngleUnknownDataType.java index 83d06466cf..2962b2f1b9 100644 --- a/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDUnknownRExtendedDataType.java +++ b/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDAngleUnknownDataType.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -18,11 +18,11 @@ package mdemangler.datatype.extended; import mdemangler.MDMang; /** - * This class represents an _R Extended data type within a Microsoft mangled symbol. + * This class represents an "" data type within a Microsoft mangled symbol. */ -public class MDUnknownRExtendedDataType extends MDExtendedType { +public class MDAngleUnknownDataType extends MDExtendedType { - public MDUnknownRExtendedDataType(MDMang dmang) { + public MDAngleUnknownDataType(MDMang dmang) { super(dmang); } diff --git a/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDUnknownPExtendedDataType.java b/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDAutoDataType.java similarity index 75% rename from Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDUnknownPExtendedDataType.java rename to Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDAutoDataType.java index c635ce307c..62e9d51234 100644 --- a/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDUnknownPExtendedDataType.java +++ b/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDAutoDataType.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -18,16 +18,16 @@ package mdemangler.datatype.extended; import mdemangler.MDMang; /** - * This class represents an _P Extended data type within a Microsoft mangled symbol. + * This class represents an "auto" data type within a Microsoft mangled symbol. */ -public class MDUnknownPExtendedDataType extends MDExtendedType { +public class MDAutoDataType extends MDExtendedType { - public MDUnknownPExtendedDataType(MDMang dmang) { + public MDAutoDataType(MDMang dmang) { super(dmang); } @Override public String getTypeName() { - return "UNKNOWN"; + return "auto"; } } diff --git a/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDUnknownTExtendedDataType.java b/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDDecltypeAutoDataType.java similarity index 75% rename from Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDUnknownTExtendedDataType.java rename to Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDDecltypeAutoDataType.java index 53c9932de7..62509092de 100644 --- a/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDUnknownTExtendedDataType.java +++ b/Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/extended/MDDecltypeAutoDataType.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -18,16 +18,16 @@ package mdemangler.datatype.extended; import mdemangler.MDMang; /** - * This class represents an _T Extended data type within a Microsoft mangled symbol. + * This class represents a "decltype(auto)" data type within a Microsoft mangled symbol. */ -public class MDUnknownTExtendedDataType extends MDExtendedType { +public class MDDecltypeAutoDataType extends MDExtendedType { - public MDUnknownTExtendedDataType(MDMang dmang) { + public MDDecltypeAutoDataType(MDMang dmang) { super(dmang); } @Override public String getTypeName() { - return "UNKNOWN"; + return "decltype(auto)"; } } diff --git a/Ghidra/Features/MicrosoftDmang/src/test/java/mdemangler/MDMangBaseTest.java b/Ghidra/Features/MicrosoftDmang/src/test/java/mdemangler/MDMangBaseTest.java index 99be154a2a..61d5694ed2 100644 --- a/Ghidra/Features/MicrosoftDmang/src/test/java/mdemangler/MDMangBaseTest.java +++ b/Ghidra/Features/MicrosoftDmang/src/test/java/mdemangler/MDMangBaseTest.java @@ -1615,11 +1615,19 @@ public class MDMangBaseTest extends AbstractGenericTest { @Test public void testExtendedTypes__P() throws Exception { mangled = "?Name@@3_PA"; - msTruth = "UNKNOWN Name"; + msTruth = "auto Name"; mdTruth = msTruth; demangleAndTest(); } + @Test + public void testExtendedTypes__P_1() throws Exception { + mangled = "?a@@YA?A_PXZ"; + msTruth = "auto __cdecl a(void)"; + mdTruth = msTruth; + demangleAndTest16Bit(); + } + @Test public void testExtendedTypes__Q() throws Exception { mangled = "?Name@@3_QA"; @@ -1636,6 +1644,14 @@ public class MDMangBaseTest extends AbstractGenericTest { demangleAndTest(); } + @Test + public void testExtendedTypes__R_1() throws Exception { + mangled = "?a@@YA?A_RXZ"; + msTruth = " __cdecl a(void)"; + mdTruth = msTruth; + demangleAndTest16Bit(); + } + @Test public void testExtendedTypes__S() throws Exception { mangled = "?Name@@3_SA"; @@ -1647,11 +1663,19 @@ public class MDMangBaseTest extends AbstractGenericTest { @Test public void testExtendedTypes__T() throws Exception { mangled = "?Name@@3_TA"; - msTruth = "UNKNOWN Name"; + msTruth = "decltype(auto) Name"; mdTruth = msTruth; demangleAndTest(); } + @Test + public void testExtendedTypes__T_1() throws Exception { + mangled = "?a@@YA?A_TXZ"; + msTruth = "decltype(auto) __cdecl a(void)"; + mdTruth = msTruth; + demangleAndTest16Bit(); + } + @Test public void testExtendedTypes__U() throws Exception { mangled = "?Name@@3_UA";