mirror of
https://github.com/rizinorg/cutter.git
synced 2025-02-20 13:46:06 +00:00
Fix #22
This commit is contained in:
parent
2a7981a36a
commit
9d242f1fa9
@ -22,12 +22,12 @@ void RenameDialog::on_buttonBox_rejected()
|
||||
close();
|
||||
}
|
||||
|
||||
void RenameDialog::setFunctionName(QString fcnName)
|
||||
void RenameDialog::setName(QString fcnName)
|
||||
{
|
||||
ui->nameEdit->setText(fcnName);
|
||||
}
|
||||
|
||||
QString RenameDialog::getFunctionName() const
|
||||
QString RenameDialog::getName() const
|
||||
{
|
||||
return ui->nameEdit->text();
|
||||
}
|
||||
|
@ -17,8 +17,8 @@ public:
|
||||
explicit RenameDialog(QWidget *parent = 0);
|
||||
~RenameDialog();
|
||||
|
||||
void setFunctionName(QString fcnName);
|
||||
QString getFunctionName() const;
|
||||
void setName(QString fcnName);
|
||||
QString getName() const;
|
||||
|
||||
private slots:
|
||||
void on_buttonBox_accepted();
|
||||
|
@ -36,7 +36,7 @@ QKeySequence DisassemblyContextMenu::getAddFlagSequence() const
|
||||
|
||||
QKeySequence DisassemblyContextMenu::getRenameSequence() const
|
||||
{
|
||||
return {}; //TODO insert correct sequence
|
||||
return {Qt::Key_N};
|
||||
}
|
||||
|
||||
QKeySequence DisassemblyContextMenu::getXRefSequence() const
|
||||
@ -129,25 +129,62 @@ void DisassemblyContextMenu::on_actionAddFlag_triggered()
|
||||
|
||||
void DisassemblyContextMenu::on_actionRename_triggered()
|
||||
{
|
||||
// Get function for clicked offset
|
||||
RAnalFunction *fcn = CutterCore::getInstance()->functionAt(offset);
|
||||
if( nullptr == fcn )
|
||||
{
|
||||
return;
|
||||
}
|
||||
ut64 tgt_addr = UT64_MAX;
|
||||
RAnalOp op;
|
||||
RCore *core = Core()->core();
|
||||
|
||||
RenameDialog *dialog = new RenameDialog(this);
|
||||
// Get function based on click position
|
||||
dialog->setFunctionName(fcn->name);
|
||||
if (dialog->exec())
|
||||
{
|
||||
// Get new function name
|
||||
QString new_name = dialog->getFunctionName();
|
||||
// Rename function in r2 core
|
||||
CutterCore::getInstance()->renameFunction(fcn->name, new_name);
|
||||
// Seek to new renamed function
|
||||
CutterCore::getInstance()->seek(fcn->addr);
|
||||
|
||||
r_anal_op(core->anal, &op, offset, core->block, 32);
|
||||
tgt_addr = op.jump != UT64_MAX ? op.jump : op.ptr;
|
||||
if (op.var) {
|
||||
RAnalFunction *fcn = r_anal_get_fcn_in (core->anal, offset, 0);
|
||||
if (fcn) {
|
||||
RAnalVar *bar = r_anal_var_get_byname (core->anal, fcn, op.var->name);
|
||||
if (!bar) {
|
||||
bar = r_anal_var_get_byname (core->anal, fcn, op.var->name);
|
||||
if (!bar) {
|
||||
|
||||
bar = r_anal_var_get_byname (core->anal, fcn, op.var->name);
|
||||
}
|
||||
}
|
||||
if (bar) {
|
||||
dialog->setName(bar->name);
|
||||
if (dialog->exec()) {
|
||||
QString new_name = dialog->getName();
|
||||
r_anal_var_rename (core->anal, fcn->addr, bar->scope,
|
||||
bar->kind, bar->name, new_name.toStdString().c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (tgt_addr != UT64_MAX) {
|
||||
RAnalFunction *fcn = r_anal_get_fcn_at (core->anal, tgt_addr, R_ANAL_FCN_TYPE_NULL);
|
||||
RFlagItem *f = r_flag_get_i (core->flags, tgt_addr);
|
||||
if (fcn) {
|
||||
/* Rename function */
|
||||
dialog->setName(fcn->name);
|
||||
if (dialog->exec()) {
|
||||
QString new_name = dialog->getName();
|
||||
Core()->renameFunction(fcn->name, new_name);
|
||||
}
|
||||
} else if (f) {
|
||||
/* Rename current flag */
|
||||
dialog->setName(f->name);
|
||||
if (dialog->exec()) {
|
||||
QString new_name = dialog->getName();
|
||||
Core()->renameFunction(f->name, new_name);
|
||||
}
|
||||
} else {
|
||||
/* Create new flag */
|
||||
dialog->setName("");
|
||||
if (dialog->exec()) {
|
||||
QString new_name = dialog->getName();
|
||||
Core()->addFlag(tgt_addr, new_name, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
r_anal_op_fini (&op);
|
||||
emit Core()->commentsChanged();
|
||||
}
|
||||
|
||||
void DisassemblyContextMenu::on_actionXRefs_triggered()
|
||||
|
@ -468,12 +468,12 @@ void FunctionsWidget::on_actionFunctionsRename_triggered()
|
||||
RenameDialog *r = new RenameDialog(this);
|
||||
|
||||
// Set function name in dialog
|
||||
r->setFunctionName(function.name);
|
||||
r->setName(function.name);
|
||||
// If user accepted
|
||||
if (r->exec())
|
||||
{
|
||||
// Get new function name
|
||||
QString new_name = r->getFunctionName();
|
||||
QString new_name = r->getName();
|
||||
// Rename function in r2 core
|
||||
CutterCore::getInstance()->renameFunction(function.name, new_name);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user