summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Miller <brandon@vector35.com>2024-10-23 14:41:40 -0400
committerBrandon Miller <bkmiller89@icloud.com>2024-10-24 08:20:11 -0400
commit5082d6de4b9af14b6106856618666b3fce1c8316 (patch)
tree667cad05f69829832027042bbf155535811dd6a4
parent3006c68e108a18f9b8782bc937dc9ec7e2cb3b54 (diff)
Initial Firmware Ninja core API
-rw-r--r--binaryninjacore.h96
-rw-r--r--ui/memorymap.h1
2 files changed, 95 insertions, 2 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 10ad516f..e1b08f5c 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -37,14 +37,14 @@
// Current ABI version for linking to the core. This is incremented any time
// there are changes to the API that affect linking, including new functions,
// new types, or modifications to existing functions or types.
-#define BN_CURRENT_CORE_ABI_VERSION 79
+#define BN_CURRENT_CORE_ABI_VERSION 80
// Minimum ABI version that is supported for loading of plugins. Plugins that
// are linked to an ABI version less than this will not be able to load and
// will require rebuilding. The minimum version is increased when there are
// incompatible changes that break binary compatibility, such as changes to
// existing types or functions.
-#define BN_MINIMUM_CORE_ABI_VERSION 79
+#define BN_MINIMUM_CORE_ABI_VERSION 80
#ifdef __GNUC__
#ifdef BINARYNINJACORE_LIBRARY
@@ -300,6 +300,7 @@ extern "C"
typedef struct BNUndoAction BNUndoAction;
typedef struct BNUndoEntry BNUndoEntry;
typedef struct BNDemangler BNDemangler;
+ typedef struct BNFirmwareNinja BNFirmwareNinja;
//! Console log levels
typedef enum BNLogLevel
@@ -3463,6 +3464,78 @@ extern "C"
typedef bool(*BNCollaborationAnalysisConflictHandler)(void*, const char** keys, BNAnalysisMergeConflict** conflicts, size_t conflictCount);
typedef bool(*BNCollaborationNameChangesetFunction)(void*, BNCollaborationChangeset*);
+ typedef struct BNFirmwareNinjaDevice
+ {
+ char* name;
+ uint64_t start;
+ uint64_t end;
+ char* info;
+ } BNFirmwareNinjaDevice;
+
+ typedef enum BNFirmwareNinjaSectionType
+ {
+ CodeSectionType,
+ DataSectionType,
+ CompressionSectionType,
+ PaddingSectionType,
+ } BNFirmwareNinjaSectionType;
+
+
+ typedef enum BNFirmwareNinjaSectionAnalysisMode
+ {
+ DefaultSectionAnalysisMode,
+ IgnorePaddingSectionAnalysisMode,
+ DetectStringsSectionAnalysisMode,
+ } BNFirmwareNinjaSectionAnalysisMode;
+
+ typedef struct BNFirmwareNinjaSection
+ {
+ BNFirmwareNinjaSectionType type;
+ uint64_t start;
+ uint64_t end;
+ float entropy;
+ } BNFirmwareNinjaSection;
+
+ typedef enum BNFirmwareNinjaMMIOHeuristic
+ {
+ NoMMIOHeuristic,
+ HasReadBarrierMMIOHeuristic,
+ HasWriteBarrierMMIOHeuristic,
+ StoreToOOBMemoryMMIOHeuristic,
+ LoadFromOOBMemoryMMIOHeuristic,
+ RepeatLoadStoreMMIOHeuristic,
+ } BNFirmwareNinjaMMIOHeuristic;
+
+ typedef enum BNFirmwareNinjaMMIOAccessType
+ {
+ NoMMIOAccessType,
+ ReadMMIOAccessType,
+ WriteMMIOAccessType,
+ } BNFirmwareNinjaMMIOAccessType;
+
+ typedef struct BNFirmwareNinjaMMIOAccess
+ {
+ uint64_t instrAddress;
+ BNRegisterValue reg;
+ BNFirmwareNinjaMMIOHeuristic heuristic;
+ BNFirmwareNinjaMMIOAccessType type;
+ } BNFirmwareNinjaMMIOAccess;
+
+ typedef struct BNFirmwareNinjaFunctionMMIOInfo
+ {
+ uint64_t start;
+ size_t count;
+ BNFirmwareNinjaMMIOAccess** accesses;
+ } BNFirmwareNinjaFunctionMMIOInfo;
+
+ typedef struct BNFirmwareNinjaDeviceAccesses
+ {
+ char* name;
+ size_t total;
+ size_t unique;
+ } BNFirmwareNinjaDeviceAccesses;
+
+
BINARYNINJACOREAPI char* BNAllocString(const char* contents);
BINARYNINJACOREAPI void BNFreeString(char* str);
BINARYNINJACOREAPI char** BNAllocStringList(const char** contents, size_t size);
@@ -7934,6 +8007,25 @@ extern "C"
BINARYNINJACOREAPI int64_t BNMaskToSize(int64_t value, size_t size);
BINARYNINJACOREAPI int64_t BNGetMaskForSize(size_t size);
+ // FirmwareNinja
+ BINARYNINJACOREAPI BNFirmwareNinja* BNCreateFirmwareNinja(BNBinaryView *view);
+ BINARYNINJACOREAPI bool BNFirmwareNinjaAddCustomDevice(BNFirmwareNinja* fn, const char* name, uint64_t start, uint64_t end, const char* info);
+ BINARYNINJACOREAPI bool BNFirmwareNinjaDeleteCustomDevice(BNFirmwareNinja* fn, const char* name);
+ BINARYNINJACOREAPI int BNFirmwareNinjaQueryCustomDevices(BNFirmwareNinja* fn, BNFirmwareNinjaDevice** devices);
+ BINARYNINJACOREAPI void BNFirmwareNinjaFreeDevices(BNFirmwareNinjaDevice *devices, int size);
+ BINARYNINJACOREAPI int BNFirmwareNinjaQueryBoardNamesForArchitecture(BNFirmwareNinja* fn, BNArchitecture* arch, char ***boards);
+ BINARYNINJACOREAPI void BNFirmwareNinjaFreeBoardNames(char **boards, int size);
+ BINARYNINJACOREAPI int BNFirmwareNinjaQueryBoardDevices(BNFirmwareNinja* fn, BNArchitecture* arch, const char* board, BNFirmwareNinjaDevice** devices);
+ BINARYNINJACOREAPI int BNFirmwareNinjaFindSectionsWithEntropy(BNFirmwareNinja* fn, BNFirmwareNinjaSection** sections,
+ float highCodeEntropyThreshold, float lowCodeEntropyThreshold, size_t blockSize, BNFirmwareNinjaSectionAnalysisMode mode);
+ BINARYNINJACOREAPI void BNFirmwareNinjaFreeSections(BNFirmwareNinjaSection *sections, int size);
+ BINARYNINJACOREAPI int BNFirmwareNinjaFindMMIOAccesses(BNFirmwareNinja* fn, BNFirmwareNinjaFunctionMMIOInfo*** mmio, BNProgressFunction progress, void* progressContext);
+ BINARYNINJACOREAPI void BNFirmwareNinjaFreeMMIOAccesses(BNFirmwareNinjaFunctionMMIOInfo **mmio, int size);
+ BINARYNINJACOREAPI void BNFirmwareNinjaSaveMMIOAccessesToMetadata(BNFirmwareNinja* fn, BNFirmwareNinjaFunctionMMIOInfo** mmio, int size);
+ BINARYNINJACOREAPI int BNFirmwareNinjaLoadMMIOAccessesFromMetadata(BNFirmwareNinja* fn, BNFirmwareNinjaFunctionMMIOInfo*** mmio);
+ BINARYNINJACOREAPI int BNFirmwareNinjaGetBoardDeviceAccesses(BNFirmwareNinja* fn, BNFirmwareNinjaFunctionMMIOInfo** mmio, int size,
+ BNFirmwareNinjaDeviceAccesses** accesses, BNArchitecture* arch);
+ BINARYNINJACOREAPI void BNFirmwareNinjaFreeBoardDeviceAccesses(BNFirmwareNinjaDeviceAccesses *accesses, int size);
#ifdef __cplusplus
}
#endif
diff --git a/ui/memorymap.h b/ui/memorymap.h
index 8e9df680..982bfe26 100644
--- a/ui/memorymap.h
+++ b/ui/memorymap.h
@@ -87,6 +87,7 @@ class BINARYNINJAUIAPI SectionDialog : public QDialog
void Submit();
public:
+ void SetDefaultValues(const QString& name, uint64_t start, uint64_t length, BNSectionSemantics semantics);
SectionDialog(QWidget* parent, BinaryViewRef data, SectionRef section = nullptr);
};