Skip to content

Commit 712f6ab

Browse files
committed
Add collapse region identifier types
1 parent 14dfe4c commit 712f6ab

10 files changed

Lines changed: 87 additions & 70 deletions

binaryninjaapi.h

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6455,11 +6455,11 @@ namespace BinaryNinja {
64556455
*/
64566456
bool GetDataVariableAtAddress(uint64_t addr, DataVariable& var);
64576457

6458-
bool IsDataVariableRegionCollapsed(uint64_t hash) const;
6459-
void CollapseDataVariableRegion(uint64_t hash);
6460-
void ExpandDataVariableRegion(uint64_t hash);
6458+
bool IsDataVariableRegionCollapsed(BNCollapseRegionId id) const;
6459+
void CollapseDataVariableRegion(BNCollapseRegionId id);
6460+
void ExpandDataVariableRegion(BNCollapseRegionId id);
64616461
void ExpandAllDataVariableRegions();
6462-
void ToggleDataVariableRegion(uint64_t hash);
6462+
void ToggleDataVariableRegion(BNCollapseRegionId id);
64636463
bool IsSectionRegionCollapsed(Section* section) const;
64646464
void CollapseSectionRegion(Section* section);
64656465
void ExpandSectionRegion(Section* section);
@@ -13151,7 +13151,7 @@ namespace BinaryNinja {
1315113151
{
1315213152
int m_advancedAnalysisRequests;
1315313153

13154-
bool IsRegionCollapsed(uint64_t hash) const;
13154+
bool IsRegionCollapsed(BNCollapseRegionId id) const;
1315513155

1315613156
public:
1315713157
Function(BNFunction* func);
@@ -13862,11 +13862,12 @@ namespace BinaryNinja {
1386213862
};
1386313863

1386413864
// TODO: Documentation
13865-
bool IsInstructionCollapsed(const HighLevelILInstruction& instr, uint64_t designator = 0) const;
13865+
bool IsInstructionCollapsed(
13866+
const HighLevelILInstruction& instr, BNCollapseRegionDesignator designator = 0) const;
1386613867
bool IsCollapsed() const;
13867-
void ToggleRegion(uint64_t hash);
13868-
void CollapseRegion(uint64_t hash);
13869-
void ExpandRegion(uint64_t hash);
13868+
void ToggleRegion(BNCollapseRegionId id);
13869+
void CollapseRegion(BNCollapseRegionId id);
13870+
void ExpandRegion(BNCollapseRegionId id);
1387013871
void ExpandAll();
1387113872

1387213873
void StoreMetadata(const std::string& key, Ref<Metadata> value, bool isAuto = false);
@@ -22704,12 +22705,13 @@ namespace BinaryNinja {
2270422705
}
2270522706

2270622707
void PrependCollapseIndicator();
22707-
void PrependCollapseIndicator(Ref<Function> function, const HighLevelILInstruction& instr, uint64_t designator = 0);
2270822708
void PrependCollapseIndicator(Ref<Function> function, const HighLevelILInstruction& instr,
22709-
DisassemblySettings* settings, uint64_t designator = 0);
22710-
void PrependCollapseIndicator(BNInstructionTextTokenContext context, uint64_t hash);
22709+
BNCollapseRegionDesignator designator = 0);
22710+
void PrependCollapseIndicator(Ref<Function> function, const HighLevelILInstruction& instr,
22711+
DisassemblySettings* settings, BNCollapseRegionDesignator designator = 0);
22712+
void PrependCollapseIndicator(BNInstructionTextTokenContext context, BNCollapseRegionId id);
2271122713
static bool IsInstructionCollapsed(Ref<Function> function, const HighLevelILInstruction& instr,
22712-
DisassemblySettings* settings, uint64_t designator = 0);
22714+
DisassemblySettings* settings, BNCollapseRegionDesignator designator = 0);
2271322715
bool HasCollapsableRegions();
2271422716
void SetHasCollapsableRegions(bool state);
2271522717

binaryninjacore.h

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,12 @@
141141

142142
#define BN_MAX_STRING_LENGTH 128
143143

144+
/*! Identifier for a collapsible region in a rendered view. */
145+
typedef uint64_t BNCollapseRegionId;
146+
147+
/*! Selector used to distinguish collapsible regions associated with the same rendered object. */
148+
typedef uint64_t BNCollapseRegionDesignator;
149+
144150
#define LLVM_SVCS_CB_NOTE 0
145151
#define LLVM_SVCS_CB_WARNING 1
146152
#define LLVM_SVCS_CB_ERROR 2
@@ -5358,11 +5364,11 @@ extern "C"
53585364
BINARYNINJACOREAPI bool BNHasFunctions(BNBinaryView* view);
53595365
BINARYNINJACOREAPI bool BNHasSymbols(BNBinaryView* view);
53605366
BINARYNINJACOREAPI bool BNHasDataVariables(BNBinaryView* view);
5361-
BINARYNINJACOREAPI bool BNIsDataVariableRegionCollapsed(BNBinaryView* view, uint64_t hash);
5362-
BINARYNINJACOREAPI void BNCollapseDataVariableRegion(BNBinaryView* view, uint64_t hash);
5363-
BINARYNINJACOREAPI void BNExpandDataVariableRegion(BNBinaryView* view, uint64_t hash);
5367+
BINARYNINJACOREAPI bool BNIsDataVariableRegionCollapsed(BNBinaryView* view, BNCollapseRegionId id);
5368+
BINARYNINJACOREAPI void BNCollapseDataVariableRegion(BNBinaryView* view, BNCollapseRegionId id);
5369+
BINARYNINJACOREAPI void BNExpandDataVariableRegion(BNBinaryView* view, BNCollapseRegionId id);
53645370
BINARYNINJACOREAPI void BNExpandAllDataVariableRegions(BNBinaryView* view);
5365-
BINARYNINJACOREAPI void BNToggleDataVariableRegion(BNBinaryView* view, uint64_t hash);
5371+
BINARYNINJACOREAPI void BNToggleDataVariableRegion(BNBinaryView* view, BNCollapseRegionId id);
53665372
BINARYNINJACOREAPI bool BNIsSectionRegionCollapsed(BNBinaryView* view, BNSection* section);
53675373
BINARYNINJACOREAPI void BNCollapseSectionRegion(BNBinaryView* view, BNSection* section);
53685374
BINARYNINJACOREAPI void BNExpandSectionRegion(BNBinaryView* view, BNSection* section);
@@ -5868,11 +5874,11 @@ extern "C"
58685874
BINARYNINJACOREAPI BNArchitectureAndAddress* BNGetUnresolvedIndirectBranches(BNFunction* func, size_t* count);
58695875
BINARYNINJACOREAPI bool BNHasUnresolvedIndirectBranches(BNFunction* func);
58705876

5871-
BINARYNINJACOREAPI void BNFunctionToggleRegion(BNFunction* func, uint64_t hash);
5872-
BINARYNINJACOREAPI bool BNFunctionIsRegionCollapsed(BNFunction* func, uint64_t hash);
5877+
BINARYNINJACOREAPI void BNFunctionToggleRegion(BNFunction* func, BNCollapseRegionId id);
5878+
BINARYNINJACOREAPI bool BNFunctionIsRegionCollapsed(BNFunction* func, BNCollapseRegionId id);
58735879
BINARYNINJACOREAPI void BNFunctionExpandAll(BNFunction* func);
5874-
BINARYNINJACOREAPI void BNFunctionCollapseRegion(BNFunction* func, uint64_t hash);
5875-
BINARYNINJACOREAPI void BNFunctionExpandRegion(BNFunction* func, uint64_t hash);
5880+
BINARYNINJACOREAPI void BNFunctionCollapseRegion(BNFunction* func, BNCollapseRegionId id);
5881+
BINARYNINJACOREAPI void BNFunctionExpandRegion(BNFunction* func, BNCollapseRegionId id);
58765882

58775883
BINARYNINJACOREAPI void BNFunctionStoreMetadata(
58785884
BNFunction* func, const char* key, BNMetadata* value, bool isAuto);
@@ -9197,7 +9203,8 @@ extern "C"
91979203
// High level token emitter
91989204
BINARYNINJACOREAPI BNHighLevelILTokenEmitter* BNNewHighLevelILTokenEmitterReference(BNHighLevelILTokenEmitter* emitter);
91999205
BINARYNINJACOREAPI void BNHighLevelILTokenPrependCollapseBlankIndicator(BNHighLevelILTokenEmitter* emitter);
9200-
BINARYNINJACOREAPI void BNHighLevelILTokenPrependCollapseIndicator(BNHighLevelILTokenEmitter* emitter, BNInstructionTextTokenContext context, uint64_t hash);
9206+
BINARYNINJACOREAPI void BNHighLevelILTokenPrependCollapseIndicator(
9207+
BNHighLevelILTokenEmitter* emitter, BNInstructionTextTokenContext context, BNCollapseRegionId id);
92019208
BINARYNINJACOREAPI bool BNHighLevelILTokenEmitterHasCollapsableRegions(BNHighLevelILTokenEmitter* emitter);
92029209
BINARYNINJACOREAPI void BNHighLevelILTokenEmitterSetHasCollapsableRegions(BNHighLevelILTokenEmitter* emitter, bool state);
92039210
BINARYNINJACOREAPI void BNFreeHighLevelILTokenEmitter(BNHighLevelILTokenEmitter* emitter);

binaryview.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2310,21 +2310,21 @@ bool BinaryView::GetDataVariableAtAddress(uint64_t addr, DataVariable& var)
23102310
}
23112311

23122312

2313-
bool BinaryView::IsDataVariableRegionCollapsed(uint64_t hash) const
2313+
bool BinaryView::IsDataVariableRegionCollapsed(BNCollapseRegionId id) const
23142314
{
2315-
return BNIsDataVariableRegionCollapsed(m_object, hash);
2315+
return BNIsDataVariableRegionCollapsed(m_object, id);
23162316
}
23172317

23182318

2319-
void BinaryView::CollapseDataVariableRegion(uint64_t hash)
2319+
void BinaryView::CollapseDataVariableRegion(BNCollapseRegionId id)
23202320
{
2321-
BNCollapseDataVariableRegion(m_object, hash);
2321+
BNCollapseDataVariableRegion(m_object, id);
23222322
}
23232323

23242324

2325-
void BinaryView::ExpandDataVariableRegion(uint64_t hash)
2325+
void BinaryView::ExpandDataVariableRegion(BNCollapseRegionId id)
23262326
{
2327-
BNExpandDataVariableRegion(m_object, hash);
2327+
BNExpandDataVariableRegion(m_object, id);
23282328
}
23292329

23302330

@@ -2334,9 +2334,9 @@ void BinaryView::ExpandAllDataVariableRegions()
23342334
}
23352335

23362336

2337-
void BinaryView::ToggleDataVariableRegion(uint64_t hash)
2337+
void BinaryView::ToggleDataVariableRegion(BNCollapseRegionId id)
23382338
{
2339-
BNToggleDataVariableRegion(m_object, hash);
2339+
BNToggleDataVariableRegion(m_object, id);
23402340
}
23412341

23422342

function.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3363,21 +3363,21 @@ void Function::SetUserInlinedDuringAnalysis(Confidence<BNInlineDuringAnalysis> i
33633363
}
33643364

33653365

3366-
void Function::ToggleRegion(uint64_t hash)
3366+
void Function::ToggleRegion(BNCollapseRegionId id)
33673367
{
3368-
BNFunctionToggleRegion(m_object, hash);
3368+
BNFunctionToggleRegion(m_object, id);
33693369
}
33703370

33713371

3372-
void Function::CollapseRegion(uint64_t hash)
3372+
void Function::CollapseRegion(BNCollapseRegionId id)
33733373
{
3374-
BNFunctionCollapseRegion(m_object, hash);
3374+
BNFunctionCollapseRegion(m_object, id);
33753375
}
33763376

33773377

3378-
void Function::ExpandRegion(uint64_t hash)
3378+
void Function::ExpandRegion(BNCollapseRegionId id)
33793379
{
3380-
BNFunctionExpandRegion(m_object, hash);
3380+
BNFunctionExpandRegion(m_object, id);
33813381
}
33823382

33833383

@@ -3387,15 +3387,16 @@ bool Function::IsCollapsed() const
33873387
}
33883388

33893389

3390-
bool Function::IsInstructionCollapsed(const HighLevelILInstruction& instr, uint64_t designator) const
3390+
bool Function::IsInstructionCollapsed(
3391+
const HighLevelILInstruction& instr, BNCollapseRegionDesignator designator) const
33913392
{
33923393
return IsRegionCollapsed(instr.GetInstructionHash(designator));
33933394
}
33943395

33953396

3396-
bool Function::IsRegionCollapsed(uint64_t hash) const
3397+
bool Function::IsRegionCollapsed(BNCollapseRegionId id) const
33973398
{
3398-
return BNFunctionIsRegionCollapsed(m_object, hash);
3399+
return BNFunctionIsRegionCollapsed(m_object, id);
33993400
}
34003401

34013402

highlevelil.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -691,13 +691,15 @@ void HighLevelILTokenEmitter::PrependCollapseIndicator()
691691
}
692692

693693

694-
void HighLevelILTokenEmitter::PrependCollapseIndicator(Ref<Function> function, const HighLevelILInstruction& instr, uint64_t designator)
694+
void HighLevelILTokenEmitter::PrependCollapseIndicator(
695+
Ref<Function> function, const HighLevelILInstruction& instr, BNCollapseRegionDesignator designator)
695696
{
696697
PrependCollapseIndicator(function, instr, nullptr, designator);
697698
}
698699

699700
void HighLevelILTokenEmitter::PrependCollapseIndicator(
700-
Ref<Function> function, const HighLevelILInstruction& instr, DisassemblySettings* settings, uint64_t designator)
701+
Ref<Function> function, const HighLevelILInstruction& instr, DisassemblySettings* settings,
702+
BNCollapseRegionDesignator designator)
701703
{
702704
if (!HasCollapsableRegions())
703705
return;
@@ -712,13 +714,14 @@ void HighLevelILTokenEmitter::PrependCollapseIndicator(
712714
PrependCollapseIndicator(context, instr.GetInstructionHash(designator));
713715
}
714716

715-
void HighLevelILTokenEmitter::PrependCollapseIndicator(BNInstructionTextTokenContext context, uint64_t hash)
717+
void HighLevelILTokenEmitter::PrependCollapseIndicator(BNInstructionTextTokenContext context, BNCollapseRegionId id)
716718
{
717-
BNHighLevelILTokenPrependCollapseIndicator(m_object, context, hash);
719+
BNHighLevelILTokenPrependCollapseIndicator(m_object, context, id);
718720
}
719721

720722
bool HighLevelILTokenEmitter::IsInstructionCollapsed(
721-
Ref<Function> function, const HighLevelILInstruction& instr, DisassemblySettings* settings, uint64_t designator)
723+
Ref<Function> function, const HighLevelILInstruction& instr, DisassemblySettings* settings,
724+
BNCollapseRegionDesignator designator)
722725
{
723726
if (settings && settings->IsOptionSet(ShowCollapsedRegions))
724727
return false;

highlevelilinstruction.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ namespace BinaryNinja
420420

421421
bool HasParent() const;
422422
HighLevelILInstruction GetParent() const;
423-
uint64_t GetInstructionHash(size_t discriminator = 0) const
423+
BNCollapseRegionId GetInstructionHash(BNCollapseRegionDesignator discriminator = 0) const
424424
{
425425
constexpr auto rotl = [](uint64_t value, int shift)
426426
{ return (value << shift) | (value >> (64 - shift)); };

python/binaryview.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5987,20 +5987,20 @@ def get_data_var_at(self, addr: int) -> Optional['DataVariable']:
59875987
core.BNFreeDataVariable(var)
59885988
return result
59895989

5990-
def is_data_variable_region_collapsed(self, region_hash: int) -> bool:
5991-
return core.BNIsDataVariableRegionCollapsed(self.handle, region_hash)
5990+
def is_data_variable_region_collapsed(self, region_id: int) -> bool:
5991+
return core.BNIsDataVariableRegionCollapsed(self.handle, region_id)
59925992

5993-
def collapse_data_variable_region(self, region_hash: int) -> None:
5994-
core.BNCollapseDataVariableRegion(self.handle, region_hash)
5993+
def collapse_data_variable_region(self, region_id: int) -> None:
5994+
core.BNCollapseDataVariableRegion(self.handle, region_id)
59955995

5996-
def expand_data_variable_region(self, region_hash: int) -> None:
5997-
core.BNExpandDataVariableRegion(self.handle, region_hash)
5996+
def expand_data_variable_region(self, region_id: int) -> None:
5997+
core.BNExpandDataVariableRegion(self.handle, region_id)
59985998

59995999
def expand_all_data_variable_regions(self) -> None:
60006000
core.BNExpandAllDataVariableRegions(self.handle)
60016001

6002-
def toggle_data_variable_region(self, region_hash: int) -> None:
6003-
core.BNToggleDataVariableRegion(self.handle, region_hash)
6002+
def toggle_data_variable_region(self, region_id: int) -> None:
6003+
core.BNToggleDataVariableRegion(self.handle, region_id)
60046004

60056005
def is_section_region_collapsed(self, section: Section) -> bool:
60066006
return core.BNIsSectionRegionCollapsed(self.handle, section.handle)

python/function.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3699,26 +3699,26 @@ def set_user_inline_during_analysis(self, value: Union['types.InlineDuringAnalys
36993699
value = self._inline_during_analysis_with_confidence(value)
37003700
core.BNSetUserFunctionInlinedDuringAnalysis(self.handle, value)
37013701

3702-
def toggle_region(self, hash):
3702+
def toggle_region(self, region_id: int):
37033703
"""
3704-
Toggle the collapsed state of a region during rendering, by hash value
3705-
:param hash: Hash value of region
3704+
Toggle the collapsed state of a region during rendering.
3705+
:param region_id: Identifier of the region
37063706
"""
3707-
core.BNFunctionToggleRegion(self.handle, hash)
3707+
core.BNFunctionToggleRegion(self.handle, region_id)
37083708

3709-
def collapse_region(self, hash):
3709+
def collapse_region(self, region_id: int):
37103710
"""
37113711
Collapse a region during rendering
3712-
:param hash: Hash value of region
3712+
:param region_id: Identifier of the region
37133713
"""
3714-
core.BNFunctionCollapseRegion(self.handle, hash)
3714+
core.BNFunctionCollapseRegion(self.handle, region_id)
37153715

3716-
def expand_region(self, hash):
3716+
def expand_region(self, region_id: int):
37173717
"""
37183718
Un-collapse a region during rendering
3719-
:param hash: Hash value of region
3719+
:param region_id: Identifier of the region
37203720
"""
3721-
core.BNFunctionExpandRegion(self.handle, hash)
3721+
core.BNFunctionExpandRegion(self.handle, region_id)
37223722

37233723
def expand_all(self):
37243724
"""
@@ -3744,13 +3744,13 @@ def is_instruction_collapsed(
37443744
"""
37453745
return self.is_region_collapsed(instr.get_instruction_hash(discriminator))
37463746

3747-
def is_region_collapsed(self, hash) -> bool:
3747+
def is_region_collapsed(self, region_id: int) -> bool:
37483748
"""
37493749
Determine if a given region is collapsed during rendering.
3750-
:param hash: Hash value of region
3750+
:param region_id: Identifier of the region
37513751
:return: True if the region should be rendered as collapsed
37523752
"""
3753-
return core.BNFunctionIsRegionCollapsed(self.handle, hash)
3753+
return core.BNFunctionIsRegionCollapsed(self.handle, region_id)
37543754

37553755
def store_metadata(self, key: str, md: metadata.MetadataValueType, isAuto: bool = False) -> None:
37563756
"""

python/languagerepresentation.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,9 @@ def prepend_instr_collapse_indicator(
137137
def prepend_region_collapse_indicator(
138138
self,
139139
context: InstructionTextTokenContext,
140-
hash: int
140+
region_id: int
141141
):
142-
core.BNHighLevelILTokenPrependCollapseIndicator(self.handle, context, hash)
142+
core.BNHighLevelILTokenPrependCollapseIndicator(self.handle, context, region_id)
143143

144144
@property
145145
def has_collapsable_regions(self) -> bool:

rust/src/high_level_il/token_emitter.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,13 @@ impl HighLevelILTokenEmitter {
4444
unsafe { BNHighLevelILTokenPrependCollapseBlankIndicator(self.handle.as_ptr()) };
4545
}
4646

47-
pub fn prepend_collapse_indicator(&self, context: InstructionTextTokenContext, hash: u64) {
47+
pub fn prepend_collapse_indicator(
48+
&self,
49+
context: InstructionTextTokenContext,
50+
id: BNCollapseRegionId,
51+
) {
4852
unsafe {
49-
BNHighLevelILTokenPrependCollapseIndicator(self.handle.as_ptr(), context.into(), hash)
53+
BNHighLevelILTokenPrependCollapseIndicator(self.handle.as_ptr(), context.into(), id)
5054
};
5155
}
5256

0 commit comments

Comments
 (0)