mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 10:19:23 +02:00
Check original name in IsolateVariableTask
This commit is contained in:
parent
a3988a7db2
commit
cbcfaf54fa
4 changed files with 29 additions and 34 deletions
|
@ -115,7 +115,6 @@ void IfaceDecompCapability::registerCommands(IfaceStatus *status)
|
|||
status->registerCom(new IfcRename(),"rename");
|
||||
status->registerCom(new IfcRetype(),"retype");
|
||||
status->registerCom(new IfcRemove(),"remove");
|
||||
status->registerCom(new IfcIsolate(),"isolate");
|
||||
status->registerCom(new IfcLockPrototype(),"prototype","lock");
|
||||
status->registerCom(new IfcUnlockPrototype(),"prototype","unlock");
|
||||
status->registerCom(new IfcCommentInstr(),"comment","instruction");
|
||||
|
@ -1058,32 +1057,6 @@ void IfcRetype::execute(istream &s)
|
|||
}
|
||||
}
|
||||
|
||||
void IfcIsolate::execute(istream &s)
|
||||
|
||||
{
|
||||
string name;
|
||||
|
||||
s >> ws >> name;
|
||||
if (name.size()==0)
|
||||
throw IfaceParseError("Must specify name of symbol");
|
||||
|
||||
Symbol *sym;
|
||||
vector<Symbol *> symList;
|
||||
if (dcp->fd != (Funcdata *)0)
|
||||
dcp->fd->getScopeLocal()->queryByName(name,symList);
|
||||
else
|
||||
dcp->conf->symboltab->getGlobalScope()->queryByName(name,symList);
|
||||
|
||||
if (symList.empty())
|
||||
throw IfaceExecutionError("No symbol named: "+name);
|
||||
if (symList.size() > 1)
|
||||
throw IfaceExecutionError("More than one symbol named : "+name);
|
||||
else
|
||||
sym = symList[0];
|
||||
|
||||
sym->setIsolated(true);
|
||||
}
|
||||
|
||||
static Varnode *iface_read_varnode(IfaceDecompData *dcp,istream &s)
|
||||
|
||||
{ // Return varnode identified by input stream
|
||||
|
@ -1297,6 +1270,7 @@ void IfcTypeVarnode::execute(istream &s)
|
|||
scope = dcp->fd->getScopeLocal(); // force it to be in function scope
|
||||
Symbol *sym = scope->addSymbol(name,ct,loc,pc)->getSymbol();
|
||||
scope->setAttribute(sym,Varnode::typelock);
|
||||
sym->setIsolated(true);
|
||||
if (name.size() > 0)
|
||||
scope->setAttribute(sym,Varnode::namelock);
|
||||
|
||||
|
|
|
@ -304,11 +304,6 @@ public:
|
|||
virtual void execute(istream &s);
|
||||
};
|
||||
|
||||
class IfcIsolate : public IfaceDecompCommand {
|
||||
public:
|
||||
virtual void execute(istream &s);
|
||||
};
|
||||
|
||||
class IfcRemove : public IfaceDecompCommand {
|
||||
public:
|
||||
virtual void execute(istream &s);
|
||||
|
|
|
@ -1252,9 +1252,10 @@ void ScopeLocal::recoverNameRecommendationsForSymbols(void)
|
|||
if (vn == (Varnode *)0) continue;
|
||||
sym = vn->getHigh()->getSymbol();
|
||||
if (sym == (Symbol *)0) continue;
|
||||
if ((sym->getFlags() & Varnode::addrtied)!=0)
|
||||
continue; // Cannot use untied varnode as primary map for address tied symbol
|
||||
SymbolEntry *entry = sym->getFirstWholeMap();
|
||||
if (entry->getAddr() != addr)
|
||||
continue;
|
||||
// entry->getAddr() does not need to match address of the recommendation
|
||||
if (entry->getSize() != size) continue;
|
||||
}
|
||||
if (!sym->isNameUndefined()) continue;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue