From f07f66ba03dfeed222f419e1bae274e95cbcd2d4 Mon Sep 17 00:00:00 2001 From: Zichuan Li <34680029+river-li@users.noreply.github.com> Date: Thu, 15 Aug 2024 18:23:43 -0400 Subject: misc: formated code and fixed several small issues 1. Fix code related to SMI handlers 2. also parse handlers registered by SxDispatch and parse them together 3. Set Progress Text properly --- platform/efi/efi_resolver/include/Resolver.h | 93 ++++++++++++++-------------- 1 file changed, 46 insertions(+), 47 deletions(-) (limited to 'platform/efi/efi_resolver/include/Resolver.h') diff --git a/platform/efi/efi_resolver/include/Resolver.h b/platform/efi/efi_resolver/include/Resolver.h index 7bbd3b99..91bb1862 100644 --- a/platform/efi/efi_resolver/include/Resolver.h +++ b/platform/efi/efi_resolver/include/Resolver.h @@ -16,61 +16,60 @@ using namespace std; typedef array EFI_GUID; -class Resolver { +class Resolver +{ protected: - Ref m_view; - Ref m_task; - size_t m_width; - map> m_protocol; - map m_user_guids; + Ref m_view; + Ref m_task; + size_t m_width; + map> m_protocol; + map m_user_guids; - vector> m_service_usages; - vector> m_protocol_usages; - vector> m_guid_usages; - vector> m_variable_usages; + vector> m_service_usages; + vector> m_protocol_usages; + vector> m_guid_usages; + vector> m_variable_usages; - bool parseUserGuidIfExists(const string& filePath); - bool parseProtocolMapping(const string& filePath); + bool parseUserGuidIfExists(const string& filePath); + bool parseProtocolMapping(const string& filePath); - /*! - For backward compatibility, if a user saved a bndb with older version Binary Ninja - this function will try to retrieve types from Platform Types if it doesn't find one - in BinaryView - */ - Ref GetTypeFromViewAndPlatform(string type_name); - void initProtocolMapping(); + /*! + For backward compatibility, if a user saved a bndb with older version Binary Ninja + this function will try to retrieve types from Platform Types if it doesn't find one + in BinaryView + */ + Ref GetTypeFromViewAndPlatform(string type_name); + void initProtocolMapping(); public: - bool setModuleEntry(EFIModuleType fileType); - bool resolveGuidInterface(Ref func, uint64_t addr, int guid_pos, int interface_pos); - Resolver(Ref view, Ref task); + bool setModuleEntry(EFIModuleType fileType); + bool resolveGuidInterface(Ref func, uint64_t addr, int guid_pos, int interface_pos); + Resolver(Ref view, Ref task); - pair lookupGuid(EFI_GUID guidBytes); - pair defineAndLookupGuid(uint64_t addr); + pair lookupGuid(EFI_GUID guidBytes); + pair defineAndLookupGuid(uint64_t addr); - string nonConflictingName(const string& basename); - static string nonConflictingLocalName(Ref func, const string& basename); + string nonConflictingName(const string& basename); + static string nonConflictingLocalName(Ref func, const string& basename); - /*! - Define the structure used at the callsite with type `typeName`, propagate it to the data section. If it's a structure type, define it fields - according to the `followFields` parameter. The input `addr` should be a call instruction - \param func the function that contains the callsite (it's parent function) - \param addr address of the callsite - \param typeName the type that need to define - \param paramIdx the parameter index that want to define - \param followFields whether to define the structure's fields if they are pointers - \return False if failed + /*! + Define the structure used at the callsite with type `typeName`, propagate it to the data section. If it's a + structure type, define it fields according to the `followFields` parameter. The input `addr` should be a call + instruction \param func the function that contains the callsite (it's parent function) \param addr address of the + callsite \param typeName the type that need to define \param paramIdx the parameter index that want to define \param + followFields whether to define the structure's fields if they are pointers \return False if failed - \b Example: - \code{.cpp} - refs = bv->GetCodeReferencesForType(QualifiedName("EFI_GET_VARIABLE")); - for (auto ref : refs) - { - // ... some checking, need to make sure is a call instruction - bool ok = defineTypeAtCallsite(ref.func, ref.addr, "EFI_GUID", 2, false); - } - \endcode - */ - bool defineTypeAtCallsite(Ref func, uint64_t addr, string typeName, int paramIdx, bool followFields = false); - vector HighLevelILExprsAt(Ref func, Ref arch, uint64_t addr); + \b Example: + \code{.cpp} + refs = bv->GetCodeReferencesForType(QualifiedName("EFI_GET_VARIABLE")); + for (auto ref : refs) + { + // ... some checking, need to make sure is a call instruction + bool ok = defineTypeAtCallsite(ref.func, ref.addr, "EFI_GUID", 2, false); + } + \endcode + */ + bool defineTypeAtCallsite( + Ref func, uint64_t addr, string typeName, int paramIdx, bool followFields = false); + vector HighLevelILExprsAt(Ref func, Ref arch, uint64_t addr); }; \ No newline at end of file -- cgit v1.3.1