diff options
| author | Rusty Wagner <rusty@vector35.com> | 2016-09-29 18:41:13 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2016-09-29 18:41:13 -0400 |
| commit | a40f0e1e494af967a35ca4a8977596f4693b5c0e (patch) | |
| tree | b3375770fb997ecfe6e675b388bcc924ccd8e51d /binaryninjacore.h | |
| parent | 78a13604bfeba1798379d15d6e26f4b6c128bda1 (diff) | |
Adding APIs for segments and sections
Diffstat (limited to 'binaryninjacore.h')
| -rw-r--r-- | binaryninjacore.h | 72 |
1 files changed, 70 insertions, 2 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h index b6d2f7ed..530fe241 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -1137,8 +1137,44 @@ extern "C" void (*destructFunction)(void* ctxt, BNFunction* func); }; + enum BNSegmentFlag + { + SegmentExecutable = 1, + SegmentWritable = 2, + SegmentReadable = 4, + SegmentContainsData = 8, + SegmentContainsCode = 0x10, + SegmentDenyWrite = 0x20, + SegmentDenyExecute = 0x40 + }; + + struct BNSegment + { + uint64_t start, length; + uint64_t dataOffset, dataLength; + uint32_t flags; + }; + + struct BNSection + { + char* name; + char* type; + uint64_t start, length; + char* linkedSection; + char* infoSection; + uint64_t infoData; + uint64_t align, entrySize; + }; + + struct BNAddressRange + { + uint64_t start; + uint64_t end; + }; + BINARYNINJACOREAPI char* BNAllocString(const char* contents); BINARYNINJACOREAPI void BNFreeString(char* str); + BINARYNINJACOREAPI void BNFreeStringList(char** strs, size_t count); BINARYNINJACOREAPI void BNShutdown(void); @@ -1266,6 +1302,8 @@ extern "C" BINARYNINJACOREAPI BNFileMetadata* BNGetFileForView(BNBinaryView* view); BINARYNINJACOREAPI char* BNGetViewType(BNBinaryView* view); + BINARYNINJACOREAPI BNBinaryView* BNGetParentView(BNBinaryView* view); + BINARYNINJACOREAPI size_t BNReadViewData(BNBinaryView* view, void* dest, uint64_t offset, size_t len); BINARYNINJACOREAPI BNDataBuffer* BNReadViewBuffer(BNBinaryView* view, uint64_t offset, size_t len); @@ -1325,6 +1363,35 @@ extern "C" BINARYNINJACOREAPI bool BNFindNextData(BNBinaryView* view, uint64_t start, BNDataBuffer* data, uint64_t* result, BNFindFlag flags); + BINARYNINJACOREAPI void BNAddAutoSegment(BNBinaryView* view, uint64_t start, uint64_t length, + uint64_t dataOffset, uint64_t dataLength, uint32_t flags); + BINARYNINJACOREAPI void BNRemoveAutoSegment(BNBinaryView* view, uint64_t start, uint64_t length); + BINARYNINJACOREAPI void BNAddUserSegment(BNBinaryView* view, uint64_t start, uint64_t length, + uint64_t dataOffset, uint64_t dataLength, uint32_t flags); + BINARYNINJACOREAPI void BNRemoveUserSegment(BNBinaryView* view, uint64_t start, uint64_t length); + BINARYNINJACOREAPI BNSegment* BNGetSegments(BNBinaryView* view, size_t* count); + BINARYNINJACOREAPI void BNFreeSegmentList(BNSegment* segments); + BINARYNINJACOREAPI bool BNGetSegmentAt(BNBinaryView* view, uint64_t addr, BNSegment* result); + + BINARYNINJACOREAPI void BNAddAutoSection(BNBinaryView* view, const char* name, uint64_t start, uint64_t length, + const char* type, uint64_t align, uint64_t entrySize, const char* linkedSection, const char* infoSection, + uint64_t infoData); + BINARYNINJACOREAPI void BNRemoveAutoSection(BNBinaryView* view, const char* name); + BINARYNINJACOREAPI void BNAddUserSection(BNBinaryView* view, const char* name, uint64_t start, uint64_t length, + const char* type, uint64_t align, uint64_t entrySize, const char* linkedSection, const char* infoSection, + uint64_t infoData); + BINARYNINJACOREAPI void BNRemoveUserSection(BNBinaryView* view, const char* name); + BINARYNINJACOREAPI BNSection* BNGetSections(BNBinaryView* view, size_t* count); + BINARYNINJACOREAPI BNSection* BNGetSectionsAt(BNBinaryView* view, uint64_t addr, size_t* count); + BINARYNINJACOREAPI void BNFreeSectionList(BNSection* sections, size_t count); + BINARYNINJACOREAPI bool BNGetSectionByName(BNBinaryView* view, const char* name, BNSection* result); + BINARYNINJACOREAPI void BNFreeSection(BNSection* section); + + BINARYNINJACOREAPI char** BNGetUniqueSectionNames(BNBinaryView* view, const char** names, size_t count); + + BINARYNINJACOREAPI BNAddressRange* BNGetAllocatedRanges(BNBinaryView* view, size_t* count); + BINARYNINJACOREAPI void BNFreeAddressRanges(BNAddressRange* ranges); + // Raw binary data view BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataView(BNFileMetadata* file); BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataViewFromBuffer(BNFileMetadata* file, BNDataBuffer* buf); @@ -1333,7 +1400,8 @@ extern "C" BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataViewFromFile(BNFileMetadata* file, BNFileAccessor* accessor); // Creation of new types of binary views - BINARYNINJACOREAPI BNBinaryView* BNCreateCustomBinaryView(const char* name, BNFileMetadata* file, BNCustomBinaryView* view); + BINARYNINJACOREAPI BNBinaryView* BNCreateCustomBinaryView(const char* name, BNFileMetadata* file, + BNBinaryView* parent, BNCustomBinaryView* view); // Binary view type management BINARYNINJACOREAPI BNBinaryViewType* BNGetBinaryViewTypeByName(const char* name); @@ -1616,7 +1684,7 @@ extern "C" BINARYNINJACOREAPI BNStringReference* BNGetStrings(BNBinaryView* view, size_t* count); BINARYNINJACOREAPI BNStringReference* BNGetStringsInRange(BNBinaryView* view, uint64_t start, uint64_t len, size_t* count); - BINARYNINJACOREAPI void BNFreeStringList(BNStringReference* strings); + BINARYNINJACOREAPI void BNFreeStringReferenceList(BNStringReference* strings); BINARYNINJACOREAPI BNStackVariable* BNGetStackLayout(BNFunction* func, size_t* count); BINARYNINJACOREAPI void BNFreeStackLayout(BNStackVariable* vars, size_t count); |
