From 4ea37e18bfed8de162dfb816971417a0679b602f Mon Sep 17 00:00:00 2001 From: Mark Rowe Date: Wed, 7 May 2025 18:22:50 -0700 Subject: Implement a Pseudo Objective-C language representation This is implemented in the Pseudo C plug-in as it shares 99% of the logic. The Objective-C support is implemented in a subclass of `PseudoCFunction`. The handling of instruction types that the Objective-C representation needs to customize is extracted into virtual functions that the Objective-C subclass overrides. This currently supports: * Rewriting `objc_msgSend` / `objc_msgSendSuper2` with constant selectors to `[receiver message]` notation. * Rewriting calls to `objc_alloc` / `objc_alloc_init` / `objc_new` to the equivalent message send notation. * Rewriting `objc_retain` / `objc_release` and friends to the equivalent message send notation. * Displaying Objective-C class references as their class names rather than `_OBJC_CLASS_$_` symbol names. * Displaying Objective-C string literals as `@"..."`. This works best when used in conjunction with https://github.com/bdash/bn-objc-extras as the reference counting runtime calls add so much clutter. --- lang/c/plugin.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 lang/c/plugin.cpp (limited to 'lang/c/plugin.cpp') diff --git a/lang/c/plugin.cpp b/lang/c/plugin.cpp new file mode 100644 index 00000000..721cfc19 --- /dev/null +++ b/lang/c/plugin.cpp @@ -0,0 +1,30 @@ +#include "binaryninjaapi.h" +#include "pseudoc.h" +#include "pseudoobjc.h" + +using namespace BinaryNinja; + +extern "C" +{ + BN_DECLARE_CORE_ABI_VERSION + +#ifndef DEMO_EDITION + BINARYNINJAPLUGIN void CorePluginDependencies() + { + } +#endif + +#ifdef DEMO_EDITION + bool PseudoCPluginInit() +#else + BINARYNINJAPLUGIN bool CorePluginInit() +#endif + { + LanguageRepresentationFunctionType* type = new PseudoCFunctionType(); + LanguageRepresentationFunctionType::Register(type); + + type = new PseudoObjCFunctionType(); + LanguageRepresentationFunctionType::Register(type); + return true; + } +} -- cgit v1.3.1