StackView

Detailed Description

Classes

class  CreateStackVariableDialog
 Dialog to enable arbitrary stack variable creation. More...
 
class  StackViewLine
 A single line in the stack view. More...
 
class  StackView
 The Stack View. More...
 
class  StackViewSidebarWidget
 Stack view sidebar widget wrapper. More...
 
class  StackViewSidebarWidgetType
 

Enumerations

enum class  Direction { Direction::Up , Direction::Down , Direction::Left , Direction::Right }
 Simple direction enum; used for cursor movement functions. More...
 

Class Documentation

◆ CreateStackVariableDialog

class CreateStackVariableDialog

Dialog to enable arbitrary stack variable creation.

Public Member Functions

 CreateStackVariableDialog (QWidget *parent, BinaryViewRef data, FunctionRef func, int64_t initialOffset=0)
 

Protected Member Functions

void accept () override
 

Constructor & Destructor Documentation

◆ CreateStackVariableDialog()

CreateStackVariableDialog::CreateStackVariableDialog ( QWidget *  parent,
BinaryViewRef  data,
FunctionRef  func,
int64_t  initialOffset = 0 
)

Member Function Documentation

◆ accept()

void CreateStackVariableDialog::accept ( )
overrideprotected

◆ StackViewLine

class StackViewLine

A single line in the stack view.

Public Types

enum class  Type {
  Variable , Member , OffsetRef , Annotation ,
  Fill
}
 

Public Member Functions

StackViewLine::Type type () const
 Get this line's type. More...
 
int64_t offset () const
 Get the stack frame offset for this line. More...
 
size_t width () const
 Get the number of bytes this line represents on the stack. More...
 
size_t level () const
 Get the hierarchical level of this line. More...
 
void setLevel (size_t level)
 Set the hierarchical level for this line. More...
 
TypeRef dataType () const
 Get the type of the data this line represents. More...
 
void setDataType (TypeRef vnat)
 Set the type of the data this line represents. Does not affect the underlying variable. More...
 
BinaryNinja::Variable variable () const
 Get the variable represented by this line. More...
 
void setVariable (const BinaryNinja::Variable &var)
 Set the variable represented by this line. More...
 
void setWidthOverride (size_t width)
 Set a width override for this line. More...
 
bool isDataBacked () const
 Is this line backed by data or is it ephermeral? More...
 
bool isReferenced () const
 Is the data represented by this line referenced in the current function? More...
 
void setIsReferenced (bool isReferenced)
 Set whether the data represented by this line is referenced in the current function. More...
 
bool isUnused () const
 Is the data represented by this line unused in the current function? More...
 
void setIsUnused (bool isUnused)
 Set whether the data represented by this line unused in the current function. More...
 
BinaryNinja::DisassemblyTextLine content () const
 Get the content (with no offset) for this line. More...
 
BinaryNinja::DisassemblyTextLine contentWithOffset (bool hide=false) const
 Get the content with the leading offset (or padding) for this line. More...
 
size_t contentWidth (bool withOffset=true) const
 Get the width of the total line content in characters. More...
 
void appendToken (const BinaryNinja::InstructionTextToken &token)
 Append a single token to this line's content. More...
 
void appendTokens (const std::vector< BinaryNinja::InstructionTextToken > &tokens)
 Append multiple tokens to this line's content. More...
 
void indent (size_t levels=1)
 Indent this line's content. More...
 

Static Public Member Functions

static StackViewLine variable (int64_t offset, const BinaryNinja::VariableNameAndType &vnat, PlatformRef plat)
 Create a new line for a variable. More...
 
static StackViewLine member (int64_t offset, const BinaryNinja::VariableNameAndType &vnat, PlatformRef plat)
 Create a new line for a struct or array member. More...
 
static StackViewLine offsetRef (int64_t base, uint64_t offset, size_t size)
 Create a new line for a struct offset reference. More...
 
static StackViewLine annotation (int64_t offset, const std::string &text)
 Create a new annotation line. More...
 
static StackViewLine fill (int64_t offset, size_t length)
 Create a new fill line. More...
 

Member Enumeration Documentation

◆ Type

enum class StackViewLine::Type
strong
Enumerator
Variable 
Member 
OffsetRef 
Annotation 
Fill 

Member Function Documentation

◆ variable() [1/2]

static StackViewLine StackViewLine::variable ( int64_t  offset,
const BinaryNinja::VariableNameAndType vnat,
PlatformRef  plat 
)
static

Create a new line for a variable.

◆ member()

static StackViewLine StackViewLine::member ( int64_t  offset,
const BinaryNinja::VariableNameAndType vnat,
PlatformRef  plat 
)
static

Create a new line for a struct or array member.

◆ offsetRef()

static StackViewLine StackViewLine::offsetRef ( int64_t  base,
uint64_t  offset,
size_t  size 
)
static

Create a new line for a struct offset reference.

◆ annotation()

static StackViewLine StackViewLine::annotation ( int64_t  offset,
const std::string &  text 
)
static

Create a new annotation line.

◆ fill()

static StackViewLine StackViewLine::fill ( int64_t  offset,
size_t  length 
)
static

Create a new fill line.

◆ type()

StackViewLine::Type StackViewLine::type ( ) const

Get this line's type.

◆ offset()

int64_t StackViewLine::offset ( ) const

Get the stack frame offset for this line.

◆ width()

size_t StackViewLine::width ( ) const

Get the number of bytes this line represents on the stack.

◆ level()

size_t StackViewLine::level ( ) const

Get the hierarchical level of this line.

◆ setLevel()

void StackViewLine::setLevel ( size_t  level)

Set the hierarchical level for this line.

◆ dataType()

TypeRef StackViewLine::dataType ( ) const

Get the type of the data this line represents.

◆ setDataType()

void StackViewLine::setDataType ( TypeRef  vnat)

Set the type of the data this line represents. Does not affect the underlying variable.

◆ variable() [2/2]

BinaryNinja::Variable StackViewLine::variable ( ) const

Get the variable represented by this line.

◆ setVariable()

void StackViewLine::setVariable ( const BinaryNinja::Variable var)

Set the variable represented by this line.

◆ setWidthOverride()

void StackViewLine::setWidthOverride ( size_t  width)

Set a width override for this line.

◆ isDataBacked()

bool StackViewLine::isDataBacked ( ) const

Is this line backed by data or is it ephermeral?

◆ isReferenced()

bool StackViewLine::isReferenced ( ) const

Is the data represented by this line referenced in the current function?

◆ setIsReferenced()

void StackViewLine::setIsReferenced ( bool  isReferenced)

Set whether the data represented by this line is referenced in the current function.

◆ isUnused()

bool StackViewLine::isUnused ( ) const

Is the data represented by this line unused in the current function?

◆ setIsUnused()

void StackViewLine::setIsUnused ( bool  isUnused)

Set whether the data represented by this line unused in the current function.

◆ content()

BinaryNinja::DisassemblyTextLine StackViewLine::content ( ) const

Get the content (with no offset) for this line.

◆ contentWithOffset()

BinaryNinja::DisassemblyTextLine StackViewLine::contentWithOffset ( bool  hide = false) const

Get the content with the leading offset (or padding) for this line.

◆ contentWidth()

size_t StackViewLine::contentWidth ( bool  withOffset = true) const

Get the width of the total line content in characters.

◆ appendToken()

void StackViewLine::appendToken ( const BinaryNinja::InstructionTextToken token)

Append a single token to this line's content.

◆ appendTokens()

void StackViewLine::appendTokens ( const std::vector< BinaryNinja::InstructionTextToken > &  tokens)

Append multiple tokens to this line's content.

◆ indent()

void StackViewLine::indent ( size_t  levels = 1)

Indent this line's content.

◆ StackView

class StackView

The Stack View.

Public Member Functions

 StackView (ViewFrame *view, BinaryViewRef data)
 
void refresh ()
 Refresh the stack view's content. More...
 
void moveCursorToMouse (QMouseEvent *event, bool isSelecting)
 Move the cursor to approximate clicked position. More...
 
void ensureCursorIsVisible ()
 Ensure the cursor is visible by adjusting the scroll position. More...
 
void moveCursor (Direction dir)
 Move the cursor via the keyboard. More...
 
void sanitizeCursor (Direction preference)
 Ensure the cursor is not selecting any prohibited tokens. More...
 
const StackViewLineselectedLine () const
 Get the selected StackViewLine. More...
 
void renameVariable ()
 Rename the variable belonging to the selected line. More...
 
void retypeVariable ()
 Change the type of the variable belonging to the selected line. More...
 
void undefineVariable ()
 Undefine the variable belonging to the selected line. More...
 
void showCreateVariableDialog ()
 Show the "Create Variable" dialog. More...
 
void quickCreateIntegerAtCursor (size_t size)
 
void quickInvertIntegerSignAtCursor ()
 Toggle the sign of the integer at the cursor position. More...
 
void quickCreateFloatAtCursor (size_t size)
 
void quickCreatePointerAtCursor ()
 Create a pointer the cursor. More...
 
void quickCreateArrayAtCursor ()
 Create an array at the cursor, spanning until the next stack variable. More...
 
void quickCreateStructAtCursor ()
 Create a new struct at the cursor, spanning until the next stack variable. More...
 
bool event (QEvent *event) override
 Override the default event handler so we can have nice tooltips. More...
 
BinaryViewRef getData () override
 
uint64_t getCurrentOffset () override
 
bool canCopyAddress () override
 
bool canPaste () override
 
void setSelectionOffsets (BNAddressRange range) override
 
bool navigate (uint64_t offset) override
 
QFont getFont () override
 
void updateFonts () override
 
- Public Member Functions inherited from View
 View ()
 
virtual ~View ()
 
void enableRefreshTimer (QWidget *owner, int interval)
 
void setRefreshTimerRunning (bool running)
 
void setRefreshQuiesce (bool enable)
 
virtual void notifyRefresh ()
 
void setupView (QWidget *widget)
 
virtual bool canAssemble ()
 
virtual bool canCompile ()
 
virtual bool findNextData (uint64_t start, uint64_t end, const BinaryNinja::DataBuffer &data, uint64_t &addr, BNFindFlag flags, const std::function< bool(size_t current, size_t total)> &cb)
 
virtual bool findNextText (uint64_t start, uint64_t end, const std::string &text, uint64_t &addr, DisassemblySettingsRef settings, BNFindFlag flags, BNFunctionGraphType graph, const std::function< bool(size_t current, size_t total)> &cb)
 
virtual bool findNextConstant (uint64_t start, uint64_t end, uint64_t constant, uint64_t &addr, DisassemblySettingsRef settings, BNFunctionGraphType graph, const std::function< bool(size_t current, size_t total)> &cb)
 
virtual bool findAllData (uint64_t start, uint64_t end, const BinaryNinja::DataBuffer &data, BNFindFlag flags, const std::function< bool(size_t current, size_t total)> &cb, const std::function< bool(uint64_t addr, const BinaryNinja::DataBuffer &match)> &matchCallback)
 
virtual bool findAllText (uint64_t start, uint64_t end, const std::string &data, DisassemblySettingsRef settings, BNFindFlag flags, BNFunctionGraphType graph, const std::function< bool(size_t current, size_t total)> &cb, const std::function< bool(uint64_t addr, const std::string &match, const BinaryNinja::LinearDisassemblyLine &line)> &matchCallback)
 
virtual bool findAllConstant (uint64_t start, uint64_t end, uint64_t constant, DisassemblySettingsRef settings, BNFunctionGraphType graph, const std::function< bool(size_t current, size_t total)> &cb, const std::function< bool(uint64_t addr, const BinaryNinja::LinearDisassemblyLine &line)> &matchCallback)
 
virtual BinaryViewRef getData ()=0
 
virtual uint64_t getCurrentOffset ()=0
 
virtual BNAddressRange getSelectionOffsets ()
 
virtual SelectionInfoForXref getSelectionForXref ()
 
virtual void setSelectionOffsets (BNAddressRange range)=0
 
virtual bool navigate (uint64_t offset)=0
 
virtual bool navigateToFunction (FunctionRef func, uint64_t offset)
 
virtual bool goToReference (FunctionRef func, uint64_t source, uint64_t target)
 
virtual bool navigateToViewLocation (const ViewLocation &viewLocation, bool center=false)
 
bool navigateOnOtherPane (uint64_t offset)
 
bool navigateToFunctionOnOtherPane (FunctionRef func, uint64_t offset)
 
bool isBinaryDataNavigable ()
 
void setBinaryDataNavigable (bool navigable)
 
virtual bool closeRequest ()
 
virtual void closing ()
 
virtual void updateFonts ()
 
virtual void updateTheme ()
 
virtual void undo ()
 
virtual void redo ()
 
virtual bool canUndo ()
 
virtual bool canRedo ()
 
virtual void cut ()
 
virtual void copy (TransformRef xform=nullptr)
 
virtual void copyAddress ()
 
virtual void paste (TransformRef xform=nullptr)
 
virtual bool canCut ()
 
virtual bool canCopy ()
 
virtual bool canCopyWithTransform ()
 
virtual bool canCopyAddress ()
 
virtual bool canPaste ()
 
virtual bool canPasteWithTransform ()
 
virtual void transform (TransformRef xform, bool encode)
 
virtual bool canTransform ()
 
virtual void writeData (const BinaryNinja::DataBuffer &data, uint64_t addr)
 
virtual bool canDisplayAs (const UIActionContext &context, const BNIntegerDisplayType)
 
virtual void displayAs (const UIActionContext &context, BNIntegerDisplayType type)
 
virtual BinaryNinja::Ref< HistoryEntrygetHistoryEntry ()
 
virtual void navigateToHistoryEntry (BinaryNinja::Ref< HistoryEntry > entry)
 
virtual StatusBarWidgetgetStatusBarWidget ()
 
virtual ViewPaneHeaderSubtypeWidgetgetHeaderSubtypeWidget ()
 
virtual QWidget * getHeaderOptionsWidget ()
 
virtual FunctionRef getCurrentFunction ()
 
virtual BasicBlockRef getCurrentBasicBlock ()
 
virtual ArchitectureRef getCurrentArchitecture ()
 
virtual LowLevelILFunctionRef getCurrentLowLevelILFunction ()
 
virtual MediumLevelILFunctionRef getCurrentMediumLevelILFunction ()
 
virtual HighLevelILFunctionRef getCurrentHighLevelILFunction ()
 
virtual BNFunctionGraphType getILViewType ()
 
virtual void setILViewType (BNFunctionGraphType ilViewType)
 
virtual size_t getCurrentILInstructionIndex ()
 
virtual size_t getSelectionStartILInstructionIndex ()
 
virtual BNILIndexRange getILIndexRange ()
 
virtual QFont getFont ()=0
 
virtual DisassemblySettingsRef getDisassemblySettings ()
 
virtual void setDisassemblySettings (DisassemblySettingsRef settings)
 
virtual HighlightTokenState getHighlightTokenState ()
 
virtual UIActionContext actionContext ()
 
MenucontextMenu ()
 
UIActionHandleractionHandler ()
 
QWidget * widget ()
 
QString viewType ()
 
void updateCrossReferenceSelection (ViewFrame *frame=nullptr)
 
void forceSyncFromView (ViewFrame *frame=nullptr)
 
virtual void clearRelatedHighlights ()
 
virtual void setRelatedIndexHighlights (FunctionRef func, const std::set< size_t > &related)
 
virtual void setRelatedInstructionHighlights (FunctionRef func, const std::set< uint64_t > &related)
 

Protected Member Functions

void paintEvent (QPaintEvent *event) override
 
void mousePressEvent (QMouseEvent *event) override
 
void mouseDoubleClickEvent (QMouseEvent *event) override
 
- Protected Member Functions inherited from View
bool writeDataToClipboard (const BinaryNinja::DataBuffer &data, bool binary, TransformRef xform)
 
BinaryNinja::DataBuffer readDataFromClipboard (TransformRef xform)
 
virtual std::string getNavigationMode ()
 
virtual void setNavigationMode (std::string mode)
 
virtual std::vector< std::string > getNavigationModes ()
 

Additional Inherited Members

- Static Public Member Functions inherited from View
static ViewgetViewFromWidget (QWidget *widget)
 
static void registerActions ()
 
static void registerLateActions ()
 
- Protected Attributes inherited from View
Menu m_contextMenu
 
UIActionHandler m_actionHandler
 
bool m_binaryDataNavigable = false
 
QPointer< TransformParameterDialogm_transformParamDialog
 
QTimer * m_updateTimer = nullptr
 

Constructor & Destructor Documentation

◆ StackView()

StackView::StackView ( ViewFrame view,
BinaryViewRef  data 
)

Member Function Documentation

◆ paintEvent()

void StackView::paintEvent ( QPaintEvent *  event)
overrideprotected

◆ mousePressEvent()

void StackView::mousePressEvent ( QMouseEvent *  event)
overrideprotected

◆ mouseDoubleClickEvent()

void StackView::mouseDoubleClickEvent ( QMouseEvent *  event)
overrideprotected

◆ refresh()

void StackView::refresh ( )

Refresh the stack view's content.

◆ moveCursorToMouse()

void StackView::moveCursorToMouse ( QMouseEvent *  event,
bool  isSelecting 
)

Move the cursor to approximate clicked position.

◆ ensureCursorIsVisible()

void StackView::ensureCursorIsVisible ( )

Ensure the cursor is visible by adjusting the scroll position.

◆ moveCursor()

void StackView::moveCursor ( Direction  dir)

Move the cursor via the keyboard.

◆ sanitizeCursor()

void StackView::sanitizeCursor ( Direction  preference)

Ensure the cursor is not selecting any prohibited tokens.

◆ selectedLine()

const StackViewLine * StackView::selectedLine ( ) const

Get the selected StackViewLine.

◆ renameVariable()

void StackView::renameVariable ( )

Rename the variable belonging to the selected line.

◆ retypeVariable()

void StackView::retypeVariable ( )

Change the type of the variable belonging to the selected line.

◆ undefineVariable()

void StackView::undefineVariable ( )

Undefine the variable belonging to the selected line.

◆ showCreateVariableDialog()

void StackView::showCreateVariableDialog ( )

Show the "Create Variable" dialog.

◆ quickCreateIntegerAtCursor()

void StackView::quickCreateIntegerAtCursor ( size_t  size)

Create an integer of the given size at the cursor position. Pass `0` for `size` to cycle through integer sizes automatically.

◆ quickInvertIntegerSignAtCursor()

void StackView::quickInvertIntegerSignAtCursor ( )

Toggle the sign of the integer at the cursor position.

◆ quickCreateFloatAtCursor()

void StackView::quickCreateFloatAtCursor ( size_t  size)

Create an float of the given size at the cursor position. Pass `0` for `size` to cycle through float sizes automatically.

◆ quickCreatePointerAtCursor()

void StackView::quickCreatePointerAtCursor ( )

Create a pointer the cursor.

◆ quickCreateArrayAtCursor()

void StackView::quickCreateArrayAtCursor ( )

Create an array at the cursor, spanning until the next stack variable.

◆ quickCreateStructAtCursor()

void StackView::quickCreateStructAtCursor ( )

Create a new struct at the cursor, spanning until the next stack variable.

◆ event()

bool StackView::event ( QEvent *  event)
override

Override the default event handler so we can have nice tooltips.

◆ getData()

BinaryViewRef StackView::getData ( )
overridevirtual

Implements View.

◆ getCurrentOffset()

uint64_t StackView::getCurrentOffset ( )
overridevirtual

Implements View.

◆ canCopyAddress()

bool StackView::canCopyAddress ( )
inlineoverridevirtual

Reimplemented from View.

◆ canPaste()

bool StackView::canPaste ( )
inlineoverridevirtual

Reimplemented from View.

◆ setSelectionOffsets()

void StackView::setSelectionOffsets ( BNAddressRange  range)
overridevirtual

Implements View.

◆ navigate()

bool StackView::navigate ( uint64_t  offset)
overridevirtual

Implements View.

◆ getFont()

QFont StackView::getFont ( )
overridevirtual

Implements View.

◆ updateFonts()

void StackView::updateFonts ( )
overridevirtual

Reimplemented from View.

◆ StackViewSidebarWidget

class StackViewSidebarWidget

Stack view sidebar widget wrapper.

Public Member Functions

 StackViewSidebarWidget (ViewFrame *view, BinaryViewRef data)
 
void refresh ()
 
void focus () override
 
void notifyFontChanged () override
 
- Public Member Functions inherited from SidebarWidget
 SidebarWidget (const QString &title)
 
 ~SidebarWidget ()
 
const QString & title () const
 
void enableRefreshTimer (int interval)
 
void setRefreshQuiesce (bool enable)
 
virtual void notifyRefresh ()
 
virtual void notifyFontChanged ()
 
virtual void notifyOffsetChanged (uint64_t)
 
virtual void notifyThemeChanged ()
 
virtual void notifyViewChanged (ViewFrame *)
 
virtual void notifyViewLocationChanged (View *, const ViewLocation &)
 
virtual void focus ()
 
virtual void closing ()
 
virtual void setPrimaryOrientation (Qt::Orientation)
 
virtual QWidget * headerWidget ()
 

Additional Inherited Members

- Protected Attributes inherited from SidebarWidget
QString m_title
 
UIActionHandler m_actionHandler
 
ContextMenuManagerm_contextMenuManager = nullptr
 
Menum_menu = nullptr
 
QTimer * m_updateTimer = nullptr
 

Constructor & Destructor Documentation

◆ StackViewSidebarWidget()

StackViewSidebarWidget::StackViewSidebarWidget ( ViewFrame view,
BinaryViewRef  data 
)

Member Function Documentation

◆ refresh()

void StackViewSidebarWidget::refresh ( )

◆ focus()

void StackViewSidebarWidget::focus ( )
inlineoverridevirtual

Reimplemented from SidebarWidget.

◆ notifyFontChanged()

void StackViewSidebarWidget::notifyFontChanged ( )
inlineoverridevirtual

Reimplemented from SidebarWidget.

◆ StackViewSidebarWidgetType

class StackViewSidebarWidgetType

Public Member Functions

 StackViewSidebarWidgetType ()
 
SidebarWidgetcreateWidget (ViewFrame *frame, BinaryViewRef data) override
 
virtual SidebarWidgetLocation defaultLocation () const override
 
- Public Member Functions inherited from SidebarWidgetType
 SidebarWidgetType (const QImage &icon, const QString &name)
 
virtual ~SidebarWidgetType ()
 
const SidebarIconicon () const
 
const QString & name () const
 
virtual bool isInReferenceArea () const
 
virtual bool viewSensitive () const
 
virtual SidebarWidgetLocation defaultLocation () const
 
virtual SidebarContextSensitivity contextSensitivity () const
 
virtual bool alwaysShowTabs () const
 
virtual bool hideIfNoContent () const
 
virtual SidebarWidgetcreateWidget (ViewFrame *, BinaryViewRef)
 
virtual SidebarWidgetcreateInvalidContextWidget ()
 
virtual QWidget * headerWidget (SplitPaneWidget *, ViewFrame *, BinaryViewRef)
 
virtual bool focusHeaderWidget () const
 
virtual QString noWidgetMessage () const
 
virtual DockableTabStyletabStyle () const
 
virtual bool canUseAsPane (SplitPaneWidget *, BinaryViewRef) const
 
virtual PanecreatePane (SplitPaneWidget *, BinaryViewRef)
 
void updateTheme ()
 

Constructor & Destructor Documentation

◆ StackViewSidebarWidgetType()

StackViewSidebarWidgetType::StackViewSidebarWidgetType ( )

Member Function Documentation

◆ createWidget()

SidebarWidget * StackViewSidebarWidgetType::createWidget ( ViewFrame frame,
BinaryViewRef  data 
)
overridevirtual

Reimplemented from SidebarWidgetType.

◆ defaultLocation()

virtual SidebarWidgetLocation StackViewSidebarWidgetType::defaultLocation ( ) const
inlineoverridevirtual

Reimplemented from SidebarWidgetType.

Enumeration Type Documentation

◆ Direction

enum class Direction
strong

Simple direction enum; used for cursor movement functions.

Enumerator
Up 
Down 
Left 
Right