summaryrefslogtreecommitdiff
path: root/plugins/rtti/plugin.cpp
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2024-12-03 18:07:32 -0500
committerMason Reed <mason@vector35.com>2025-03-19 21:17:34 -0400
commit845dcf25563ed4982ea3f8fbca9aa6893bba7b16 (patch)
tree560053107bdce45badfb7c97667384e29ec66c4e /plugins/rtti/plugin.cpp
parent31ef836d222aaa8786d4ac2c36e09e4fd9e02929 (diff)
Preliminary Itanium RTTI virtual function table support
Still needs to support edge cases and multiple vtables, as well as naming needs to be adjusted
Diffstat (limited to 'plugins/rtti/plugin.cpp')
-rw-r--r--plugins/rtti/plugin.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/plugins/rtti/plugin.cpp b/plugins/rtti/plugin.cpp
index 4ec833be..52501efe 100644
--- a/plugins/rtti/plugin.cpp
+++ b/plugins/rtti/plugin.cpp
@@ -31,9 +31,10 @@ void RTTIAnalysis(const Ref<AnalysisContext>& analysisContext)
else
{
// TODO: We currently only want to check for itanium rtti on non windows platforms
+ // TODO: This needs to always run.
auto processor = RTTI::Itanium::ItaniumRTTIProcessor(view);
processor.ProcessRTTI();
- // view->StoreMetadata(VIEW_METADATA_RTTI, processor.SerializedMetadata(), true);
+ view->StoreMetadata(VIEW_METADATA_RTTI, processor.SerializedMetadata(), true);
}
}
@@ -46,9 +47,12 @@ void VFTAnalysis(const Ref<AnalysisContext>& analysisContext)
// TODO: Run for both itanium and ms (depending on platform)
auto processor = RTTI::Microsoft::MicrosoftRTTIProcessor(view);
processor.ProcessVFT();
+ auto itaniumProcessor = RTTI::Itanium::ItaniumRTTIProcessor(view);
+ itaniumProcessor.ProcessVTT();
view->StoreMetadata(VIEW_METADATA_RTTI, processor.SerializedMetadata(), true);
}
+
void MakeItaniumRTTIHere(Ref<BinaryView> view, uint64_t addr)
{
auto processor = RTTI::Itanium::ItaniumRTTIProcessor(view);
@@ -56,7 +60,6 @@ void MakeItaniumRTTIHere(Ref<BinaryView> view, uint64_t addr)
}
-
extern "C" {
BN_DECLARE_CORE_ABI_VERSION