diff options
| author | Brandon Miller <brandon@vector35.com> | 2024-03-21 10:52:21 -0400 |
|---|---|---|
| committer | Brandon Miller <bkmiller89@icloud.com> | 2024-04-25 10:56:18 -0400 |
| commit | 4b2b3d561b92a01f4d29b86d5510d39e4d1accf3 (patch) | |
| tree | 2d51e8c9c1fd539f27ffc52bcfe464ab6bd73ef0 /basedetection.cpp | |
| parent | 6ba7605eafb5419b82e2721026e9dc922de95347 (diff) | |
Base address detection widget in Triage view
Initial implementation of base address detection UI widget in triage
summary
Diffstat (limited to 'basedetection.cpp')
| -rw-r--r-- | basedetection.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/basedetection.cpp b/basedetection.cpp new file mode 100644 index 00000000..4389f1b7 --- /dev/null +++ b/basedetection.cpp @@ -0,0 +1,77 @@ +// Copyright (c) 2015-2024 Vector 35 Inc +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +#include "binaryninjaapi.h" + +using namespace BinaryNinja; +using namespace std; + + +BaseAddressDetection::BaseAddressDetection(Ref<BinaryView> bv) +{ + m_object = BNCreateBaseAddressDetection(bv->GetObject()); +} + + +BaseAddressDetection::~BaseAddressDetection() +{ + BNFreeBaseAddressDetection(m_object); +} + + +bool BaseAddressDetection::DetectBaseAddress(BaseAddressDetectionSettings& settings) +{ + BNBaseAddressDetectionSettings bnSettings = { + settings.Architecture.c_str(), + settings.Analysis.c_str(), + settings.MinStrlen, + settings.Alignment, + settings.LowerBoundary, + settings.UpperBoundary, + settings.POIAnalysis, + settings.MaxPointersPerCluster, + }; + + return BNDetectBaseAddress(m_object, bnSettings); +} + + +void BaseAddressDetection::Abort() +{ + return BNAbortBaseAddressDetection(m_object); +} + + +bool BaseAddressDetection::IsAborted() +{ + return BNIsBaseAddressDetectionAborted(m_object); +} + + +std::set<std::pair<size_t, uint64_t>> BaseAddressDetection::GetScores(BaseAddressDetectionConfidence* confidence) +{ + std::set<std::pair<size_t, uint64_t>> result; + BNBaseAddressDetectionScore scores[10]; + size_t numCandidates = BNGetBaseAddressDetectionScores(m_object, scores, 10, + (BNBaseAddressDetectionConfidence *)confidence); + for (size_t i = 0; i < numCandidates; i++) + result.insert(std::make_pair(scores[i].Score, scores[i].BaseAddress)); + return result; +} |
