[WIP] Some cleanup (#958)

* Some cleanup

* Some more

* Some more

* Some more
This commit is contained in:
Paul I 2018-11-27 01:34:34 +03:00 committed by Itay Cohen
parent 33d16dda3e
commit 3096d24998
33 changed files with 235 additions and 198 deletions

View File

@ -99,7 +99,7 @@ void AnalTask::runTask()
if (!options.analCmd.empty()) { if (!options.analCmd.empty()) {
log(tr("Analyzing...")); log(tr("Analyzing..."));
for (QString cmd : options.analCmd) { for (const QString &cmd : options.analCmd) {
if (isInterrupted()) { if (isInterrupted()) {
return; return;
} }

View File

@ -13,7 +13,7 @@
Q_GLOBAL_STATIC(ccClass, uniqueInstance) Q_GLOBAL_STATIC(ccClass, uniqueInstance)
#define R_JSON_KEY(name) static const QLatin1String name = QLatin1Literal(#name) #define R_JSON_KEY(name) static const QString name = QStringLiteral(#name)
namespace RJsonKey { namespace RJsonKey {
R_JSON_KEY(addr); R_JSON_KEY(addr);
@ -50,6 +50,7 @@ namespace RJsonKey {
R_JSON_KEY(hw); R_JSON_KEY(hw);
R_JSON_KEY(in_functions); R_JSON_KEY(in_functions);
R_JSON_KEY(index); R_JSON_KEY(index);
R_JSON_KEY(jump);
R_JSON_KEY(laddr); R_JSON_KEY(laddr);
R_JSON_KEY(lang); R_JSON_KEY(lang);
R_JSON_KEY(len); R_JSON_KEY(len);
@ -228,7 +229,7 @@ CutterCore::~CutterCore()
QString CutterCore::sanitizeStringForCommand(QString s) QString CutterCore::sanitizeStringForCommand(QString s)
{ {
static const QRegExp regexp(";|@"); static const QRegExp regexp(";|@");
return s.replace(regexp, "_"); return s.replace(regexp, QStringLiteral("_"));
} }
/** /**
@ -237,14 +238,13 @@ QString CutterCore::sanitizeStringForCommand(QString s)
* Note that if you want to seek to an address, you should use CutterCore::seek * Note that if you want to seek to an address, you should use CutterCore::seek
* @return command output * @return command output
*/ */
QString CutterCore::cmd(const QString &str) QString CutterCore::cmd(const char *str)
{ {
CORE_LOCK(); CORE_LOCK();
RVA offset = core_->offset; RVA offset = core_->offset;
QByteArray cmd = str.toUtf8();
r_core_task_sync_begin(core_); r_core_task_sync_begin(core_);
char *res = r_core_cmd_str(this->core_, cmd.constData()); char *res = r_core_cmd_str(this->core_, str);
r_core_task_sync_end(core_); r_core_task_sync_end(core_);
QString o = QString(res ? res : ""); QString o = QString(res ? res : "");
r_mem_free(res); r_mem_free(res);
@ -257,17 +257,16 @@ QString CutterCore::cmd(const QString &str)
QString CutterCore::cmdRaw(const QString &str) QString CutterCore::cmdRaw(const QString &str)
{ {
QString cmdStr = str; QString cmdStr = str;
cmdStr.replace('\"', "\\\""); cmdStr.replace('\"', QStringLiteral("\\\""));
return cmd("\"" + cmdStr + "\""); return cmd(cmdStr.prepend('\"').append('\"'));
} }
QJsonDocument CutterCore::cmdj(const QString &str) QJsonDocument CutterCore::cmdj(const char *str)
{ {
CORE_LOCK(); CORE_LOCK();
QByteArray cmd = str.toUtf8();
r_core_task_sync_begin(core_); r_core_task_sync_begin(core_);
char *res = r_core_cmd_str(this->core_, cmd.constData()); char *res = r_core_cmd_str(this->core_, str);
r_core_task_sync_end(core_); r_core_task_sync_end(core_);
QJsonDocument doc = parseJson(res, str); QJsonDocument doc = parseJson(res, str);
r_mem_free(res); r_mem_free(res);
@ -291,25 +290,25 @@ QJsonDocument CutterCore::cmdjTask(const QString &str)
return parseJson(task.getResultRaw(), str); return parseJson(task.getResultRaw(), str);
} }
QJsonDocument CutterCore::parseJson(const char *res, const QString &cmd) QJsonDocument CutterCore::parseJson(const char *res, const char *cmd)
{ {
QString resString = QString(res); QByteArray json(res);
if (resString.isEmpty()) { if (json.isEmpty()) {
return QJsonDocument(); return QJsonDocument();
} }
QJsonParseError jsonError; QJsonParseError jsonError;
QJsonDocument doc = res ? QJsonDocument::fromJson(resString.toUtf8(), &jsonError) : QJsonDocument(); QJsonDocument doc = QJsonDocument::fromJson(json, &jsonError);
if (jsonError.error != QJsonParseError::NoError) { if (jsonError.error != QJsonParseError::NoError) {
if (!cmd.isNull()) { if (cmd) {
eprintf("Failed to parse JSON for command \"%s\": %s\n", cmd.toLocal8Bit().constData(), eprintf("Failed to parse JSON for command \"%s\": %s\n", cmd,
jsonError.errorString().toLocal8Bit().constData()); jsonError.errorString().toLocal8Bit().constData());
} else { } else {
eprintf("Failed to parse JSON: %s\n", jsonError.errorString().toLocal8Bit().constData()); eprintf("Failed to parse JSON: %s\n", jsonError.errorString().toLocal8Bit().constData());
} }
eprintf("%s\n", resString.toLocal8Bit().constData()); eprintf("%s\n", json.constData());
} }
return doc; return doc;
@ -617,35 +616,34 @@ ut64 CutterCore::math(const QString &expr)
return r_num_math(this->core_ ? this->core_->num : NULL, expr.toUtf8().constData()); return r_num_math(this->core_ ? this->core_->num : NULL, expr.toUtf8().constData());
} }
void CutterCore::setConfig(const QString &k, const QString &v) void CutterCore::setConfig(const char *k, const QString &v)
{ {
CORE_LOCK(); CORE_LOCK();
r_config_set(core_->config, k.toUtf8().constData(), v.toUtf8().constData()); r_config_set(core_->config, k, v.toUtf8().constData());
} }
void CutterCore::setConfig(const QString &k, int v) void CutterCore::setConfig(const char *k, int v)
{ {
CORE_LOCK(); CORE_LOCK();
r_config_set_i(core_->config, k.toUtf8().constData(), static_cast<ut64>(v)); r_config_set_i(core_->config, k, static_cast<ut64>(v));
} }
void CutterCore::setConfig(const QString &k, bool v) void CutterCore::setConfig(const char *k, bool v)
{ {
CORE_LOCK(); CORE_LOCK();
r_config_set_i(core_->config, k.toUtf8().constData(), v ? 1 : 0); r_config_set_i(core_->config, k, v ? 1 : 0);
} }
int CutterCore::getConfigi(const QString &k) int CutterCore::getConfigi(const char *k)
{ {
CORE_LOCK(); CORE_LOCK();
QByteArray key = k.toUtf8(); return static_cast<int>(r_config_get_i(core_->config, k));
return static_cast<int>(r_config_get_i(core_->config, key.constData()));
} }
bool CutterCore::getConfigb(const QString &k) bool CutterCore::getConfigb(const char *k)
{ {
CORE_LOCK(); CORE_LOCK();
return r_config_get_i(core_->config, k.toUtf8().constData()) != 0; return r_config_get_i(core_->config, k) != 0;
} }
void CutterCore::triggerRefreshAll() void CutterCore::triggerRefreshAll()
@ -675,14 +673,13 @@ void CutterCore::message(const QString &msg, bool debug)
emit newMessage(msg); emit newMessage(msg);
} }
QString CutterCore::getConfig(const QString &k) QString CutterCore::getConfig(const char *k)
{ {
CORE_LOCK(); CORE_LOCK();
QByteArray key = k.toUtf8(); return QString(r_config_get(core_->config, k));
return QString(r_config_get(core_->config, key.constData()));
} }
void CutterCore::setConfig(const QString &k, const QVariant &v) void CutterCore::setConfig(const char *k, const QVariant &v)
{ {
switch (v.type()) { switch (v.type()) {
case QVariant::Type::Bool: case QVariant::Type::Bool:
@ -762,17 +759,18 @@ QString CutterCore::cmdFunctionAt(RVA addr)
return cmdFunctionAt(QString::number(addr)); return cmdFunctionAt(QString::number(addr));
} }
void CutterCore::cmdEsil(QString command) void CutterCore::cmdEsil(const char *command)
{ {
QString res = cmd(command); QString res = cmd(command);
if (res.contains("[ESIL] Stopped execution in an invalid instruction")) { if (res.contains(QStringLiteral("[ESIL] Stopped execution in an invalid instruction"))) {
msgBox.showMessage("Stopped when attempted to run an invalid instruction. You can disable this in Preferences"); msgBox.showMessage("Stopped when attempted to run an invalid instruction. You can disable this in Preferences");
} }
} }
QString CutterCore::createFunctionAt(RVA addr, QString name) QString CutterCore::createFunctionAt(RVA addr, QString name)
{ {
name.remove(QRegExp("[^a-zA-Z0-9_]")); static const QRegExp regExp("[^a-zA-Z0-9_]");
name.remove(regExp);
QString command = "af " + name + " " + RAddressString(addr); QString command = "af " + name + " " + RAddressString(addr);
QString ret = cmd(command); QString ret = cmd(command);
emit functionsChanged(); emit functionsChanged();
@ -788,7 +786,7 @@ RVA CutterCore::getOffsetJump(RVA addr)
{ {
bool ok; bool ok;
RVA value = cmdj("aoj @" + QString::number( RVA value = cmdj("aoj @" + QString::number(
addr)).array().first().toObject().value("jump").toVariant().toULongLong(&ok); addr)).array().first().toObject().value(RJsonKey::jump).toVariant().toULongLong(&ok);
if (!ok) { if (!ok) {
return RVA_INVALID; return RVA_INVALID;
@ -804,7 +802,7 @@ QString CutterCore::getDecompiledCodePDC(RVA addr)
bool CutterCore::getR2DecAvailable() bool CutterCore::getR2DecAvailable()
{ {
return cmd("e cmd.pdc=?").split('\n').contains("r2dec"); return cmd("e cmd.pdc=?").split('\n').contains(QStringLiteral("r2dec"));
} }
QString CutterCore::getDecompiledCodeR2Dec(RVA addr) QString CutterCore::getDecompiledCodeR2Dec(RVA addr)
@ -843,7 +841,7 @@ QList<RegisterRefDescription> CutterCore::getRegisterRefs()
QList<RegisterRefDescription> ret; QList<RegisterRefDescription> ret;
QJsonArray registerRefArray = cmdj("drrj").array(); QJsonArray registerRefArray = cmdj("drrj").array();
for (QJsonValue value : registerRefArray) { for (const QJsonValue &value : registerRefArray) {
QJsonObject regRefObject = value.toObject(); QJsonObject regRefObject = value.toObject();
RegisterRefDescription regRef; RegisterRefDescription regRef;
@ -862,12 +860,15 @@ QJsonObject CutterCore::getRegisterJson()
{ {
QJsonArray registerRefArray = cmdj("drrj").array(); QJsonArray registerRefArray = cmdj("drrj").array();
QJsonObject registerJson; QJsonObject registerJson;
for (QJsonValue value : registerRefArray) {
for (const QJsonValue &value : registerRefArray) {
QJsonObject regRefObject = value.toObject(); QJsonObject regRefObject = value.toObject();
QJsonObject registers; QJsonObject registers;
registers.insert(RJsonKey::value, regRefObject[RJsonKey::value]); registers.insert(RJsonKey::value, regRefObject[RJsonKey::value]);
registers.insert(RJsonKey::ref, regRefObject[RJsonKey::ref]); registers.insert(RJsonKey::ref, regRefObject[RJsonKey::ref]);
registerJson.insert(regRefObject[RJsonKey::reg].toString(), registers); registerJson.insert(regRefObject[RJsonKey::reg].toString(), registers);
} }
return registerJson; return registerJson;
@ -1067,9 +1068,11 @@ QStringList CutterCore::getDebugPlugins()
QStringList plugins; QStringList plugins;
QJsonArray pluginArray = cmdj("dLj").array(); QJsonArray pluginArray = cmdj("dLj").array();
for (QJsonValue value : pluginArray) { for (const QJsonValue &value : pluginArray) {
QJsonObject pluginObject = value.toObject(); QJsonObject pluginObject = value.toObject();
QString plugin = pluginObject[RJsonKey::name].toString(); QString plugin = pluginObject[RJsonKey::name].toString();
plugins << plugin; plugins << plugin;
} }
return plugins; return plugins;
@ -1131,13 +1134,13 @@ QList<BreakpointDescription> CutterCore::getBreakpoints()
QList<BreakpointDescription> ret; QList<BreakpointDescription> ret;
QJsonArray breakpointArray = cmdj("dbj").array(); QJsonArray breakpointArray = cmdj("dbj").array();
for (QJsonValue value : breakpointArray) { for (const QJsonValue &value : breakpointArray) {
QJsonObject bpObject = value.toObject(); QJsonObject bpObject = value.toObject();
BreakpointDescription bp; BreakpointDescription bp;
bp.addr = bpObject[RJsonKey::addr].toVariant().toULongLong(); bp.addr = bpObject[RJsonKey::addr].toVariant().toULongLong();
bp.size = bpObject[RJsonKey::size].toVariant().toInt(); bp.size = bpObject[RJsonKey::size].toInt();
bp.permission = bpObject[RJsonKey::prot].toString(); bp.permission = bpObject[RJsonKey::prot].toString();
bp.hw = bpObject[RJsonKey::hw].toBool(); bp.hw = bpObject[RJsonKey::hw].toBool();
bp.trace = bpObject[RJsonKey::trace].toBool(); bp.trace = bpObject[RJsonKey::trace].toBool();
@ -1152,17 +1155,15 @@ QList<BreakpointDescription> CutterCore::getBreakpoints()
QList<RVA> CutterCore::getBreakpointsAddresses() QList<RVA> CutterCore::getBreakpointsAddresses()
{ {
QList<BreakpointDescription> bps = getBreakpoints();
BreakpointDescription bp;
QList<RVA> bpAddresses; QList<RVA> bpAddresses;
foreach (bp, bps) { for (const BreakpointDescription &bp : getBreakpoints()) {
bpAddresses << bp.addr; bpAddresses << bp.addr;
} }
return bpAddresses; return bpAddresses;
} }
bool CutterCore::isBreakpoint(QList<RVA> breakpoints, RVA addr) bool CutterCore::isBreakpoint(const QList<RVA> &breakpoints, RVA addr)
{ {
return breakpoints.contains(addr); return breakpoints.contains(addr);
} }
@ -1175,15 +1176,15 @@ QJsonDocument CutterCore::getBacktrace()
QList<ProcessDescription> CutterCore::getAllProcesses() QList<ProcessDescription> CutterCore::getAllProcesses()
{ {
QList<ProcessDescription> ret; QList<ProcessDescription> ret;
QJsonArray ProcessArray = cmdj("dplj").array(); QJsonArray processArray = cmdj("dplj").array();
for (QJsonValue value : ProcessArray) { for (const QJsonValue &value : processArray) {
QJsonObject procObject = value.toObject(); QJsonObject procObject = value.toObject();
ProcessDescription proc; ProcessDescription proc;
proc.pid = procObject[RJsonKey::pid].toVariant().toInt(); proc.pid = procObject[RJsonKey::pid].toInt();
proc.uid = procObject[RJsonKey::uid].toVariant().toInt(); proc.uid = procObject[RJsonKey::uid].toInt();
proc.status = procObject[RJsonKey::status].toString(); proc.status = procObject[RJsonKey::status].toString();
proc.path = procObject[RJsonKey::path].toString(); proc.path = procObject[RJsonKey::path].toString();
@ -1198,7 +1199,7 @@ QList<MemoryMapDescription> CutterCore::getMemoryMap()
QList<MemoryMapDescription> ret; QList<MemoryMapDescription> ret;
QJsonArray memoryMapArray = cmdj("dmj").array(); QJsonArray memoryMapArray = cmdj("dmj").array();
for (QJsonValue value : memoryMapArray) { for (const QJsonValue &value : memoryMapArray) {
QJsonObject memMapObject = value.toObject(); QJsonObject memMapObject = value.toObject();
MemoryMapDescription memMap; MemoryMapDescription memMap;
@ -1289,7 +1290,7 @@ QList<RVA> CutterCore::getSeekHistory()
QList<RVA> ret; QList<RVA> ret;
QJsonArray jsonArray = cmdj("sj").array(); QJsonArray jsonArray = cmdj("sj").array();
for (QJsonValue value : jsonArray) for (const QJsonValue &value : jsonArray)
ret << value.toVariant().toULongLong(); ret << value.toVariant().toULongLong();
return ret; return ret;
@ -1329,7 +1330,7 @@ QStringList CutterCore::getProjectNames()
QStringList ret; QStringList ret;
QJsonArray jsonArray = cmdj("Pj").array(); QJsonArray jsonArray = cmdj("Pj").array();
for (QJsonValue value : jsonArray) for (const QJsonValue &value : jsonArray)
ret.append(value.toString()); ret.append(value.toString());
return ret; return ret;
@ -1346,13 +1347,16 @@ QList<RBinPluginDescription> CutterCore::getRBinPluginDescriptions(const QString
QJsonArray pluginArray = jsonRoot[key].toArray(); QJsonArray pluginArray = jsonRoot[key].toArray();
for (const auto &pluginValue : pluginArray) { for (const QJsonValue &pluginValue : pluginArray) {
QJsonObject pluginObject = pluginValue.toObject(); QJsonObject pluginObject = pluginValue.toObject();
RBinPluginDescription desc; RBinPluginDescription desc;
desc.name = pluginObject[RJsonKey::name].toString(); desc.name = pluginObject[RJsonKey::name].toString();
desc.description = pluginObject[RJsonKey::description].toString(); desc.description = pluginObject[RJsonKey::description].toString();
desc.license = pluginObject[RJsonKey::license].toString(); desc.license = pluginObject[RJsonKey::license].toString();
desc.type = key; desc.type = key;
ret.append(desc); ret.append(desc);
} }
} }
@ -1365,8 +1369,9 @@ QList<RIOPluginDescription> CutterCore::getRIOPluginDescriptions()
QList<RIOPluginDescription> ret; QList<RIOPluginDescription> ret;
QJsonArray plugins = cmdj("oLj").object()["IO_Plugins"].toArray(); QJsonArray plugins = cmdj("oLj").object()["IO_Plugins"].toArray();
for (QJsonValueRef pluginValue : plugins) { for (const QJsonValue &pluginValue : plugins) {
QJsonObject pluginObject = pluginValue.toObject(); QJsonObject pluginObject = pluginValue.toObject();
RIOPluginDescription plugin; RIOPluginDescription plugin;
plugin.name = pluginObject["Name"].toString(); plugin.name = pluginObject["Name"].toString();
@ -1385,8 +1390,9 @@ QList<RCorePluginDescription> CutterCore::getRCorePluginDescriptions()
QList<RCorePluginDescription> ret; QList<RCorePluginDescription> ret;
QJsonArray plugins = cmdj("Lsj").array(); QJsonArray plugins = cmdj("Lsj").array();
for (QJsonValueRef pluginValue : plugins) { for (const QJsonValue &pluginValue : plugins) {
QJsonObject pluginObject = pluginValue.toObject(); QJsonObject pluginObject = pluginValue.toObject();
RCorePluginDescription plugin; RCorePluginDescription plugin;
plugin.name = pluginObject["Name"].toString(); plugin.name = pluginObject["Name"].toString();
@ -1434,7 +1440,7 @@ QList<ImportDescription> CutterCore::getAllImports()
QJsonArray importsArray = cmdj("iij").array(); QJsonArray importsArray = cmdj("iij").array();
for (QJsonValue value : importsArray) { for (const QJsonValue &value : importsArray) {
QJsonObject importObject = value.toObject(); QJsonObject importObject = value.toObject();
ImportDescription import; ImportDescription import;
@ -1456,19 +1462,19 @@ QList<ExportDescription> CutterCore::getAllExports()
CORE_LOCK(); CORE_LOCK();
QList<ExportDescription> ret; QList<ExportDescription> ret;
QJsonArray importsArray = cmdj("iEj").array(); QJsonArray exportsArray = cmdj("iEj").array();
for (QJsonValue value : importsArray) { for (const QJsonValue &value : exportsArray) {
QJsonObject importObject = value.toObject(); QJsonObject exportObject = value.toObject();
ExportDescription exp; ExportDescription exp;
exp.vaddr = importObject[RJsonKey::vaddr].toVariant().toULongLong(); exp.vaddr = exportObject[RJsonKey::vaddr].toVariant().toULongLong();
exp.paddr = importObject[RJsonKey::paddr].toVariant().toULongLong(); exp.paddr = exportObject[RJsonKey::paddr].toVariant().toULongLong();
exp.size = importObject[RJsonKey::size].toVariant().toULongLong(); exp.size = exportObject[RJsonKey::size].toVariant().toULongLong();
exp.type = importObject[RJsonKey::type].toString(); exp.type = exportObject[RJsonKey::type].toString();
exp.name = importObject[RJsonKey::name].toString(); exp.name = exportObject[RJsonKey::name].toString();
exp.flag_name = importObject[RJsonKey::flagname].toString(); exp.flag_name = exportObject[RJsonKey::flagname].toString();
ret << exp; ret << exp;
} }
@ -1518,7 +1524,7 @@ QList<HeaderDescription> CutterCore::getAllHeaders()
QJsonArray headersArray = cmdj("ihj").array(); QJsonArray headersArray = cmdj("ihj").array();
for (QJsonValue value : headersArray) { for (const QJsonValue &value : headersArray) {
QJsonObject headerObject = value.toObject(); QJsonObject headerObject = value.toObject();
HeaderDescription header; HeaderDescription header;
@ -1541,7 +1547,7 @@ QList<ZignatureDescription> CutterCore::getAllZignatures()
QJsonArray zignaturesArray = cmdj("zj").array(); QJsonArray zignaturesArray = cmdj("zj").array();
for (QJsonValue value : zignaturesArray) { for (const QJsonValue &value : zignaturesArray) {
QJsonObject zignatureObject = value.toObject(); QJsonObject zignatureObject = value.toObject();
ZignatureDescription zignature; ZignatureDescription zignature;
@ -1549,7 +1555,7 @@ QList<ZignatureDescription> CutterCore::getAllZignatures()
zignature.name = zignatureObject[RJsonKey::name].toString(); zignature.name = zignatureObject[RJsonKey::name].toString();
zignature.bytes = zignatureObject[RJsonKey::bytes].toString(); zignature.bytes = zignatureObject[RJsonKey::bytes].toString();
zignature.offset = zignatureObject[RJsonKey::offset].toVariant().toULongLong(); zignature.offset = zignatureObject[RJsonKey::offset].toVariant().toULongLong();
for (QJsonValue ref : zignatureObject[RJsonKey::refs].toArray()) { for (const QJsonValue &ref : zignatureObject[RJsonKey::refs].toArray()) {
zignature.refs << ref.toString(); zignature.refs << ref.toString();
} }
@ -1571,7 +1577,7 @@ QList<CommentDescription> CutterCore::getAllComments(const QString &filterType)
QList<CommentDescription> ret; QList<CommentDescription> ret;
QJsonArray commentsArray = cmdj("CCj").array(); QJsonArray commentsArray = cmdj("CCj").array();
for (QJsonValue value : commentsArray) { for (const QJsonValue &value : commentsArray) {
QJsonObject commentObject = value.toObject(); QJsonObject commentObject = value.toObject();
QString type = commentObject[RJsonKey::type].toString(); QString type = commentObject[RJsonKey::type].toString();
@ -1624,10 +1630,11 @@ QList<StringDescription> CutterCore::parseStringsJson(const QJsonDocument &doc)
QList<StringDescription> ret; QList<StringDescription> ret;
QJsonArray stringsArray = doc.array(); QJsonArray stringsArray = doc.array();
for (QJsonValue value : stringsArray) { for (const QJsonValue &value : stringsArray) {
QJsonObject stringObject = value.toObject(); QJsonObject stringObject = value.toObject();
StringDescription string; StringDescription string;
string.string = QString(QByteArray::fromBase64(stringObject[RJsonKey::string].toVariant().toByteArray())); string.string = QString(QByteArray::fromBase64(stringObject[RJsonKey::string].toVariant().toByteArray()));
string.vaddr = stringObject[RJsonKey::vaddr].toVariant().toULongLong(); string.vaddr = stringObject[RJsonKey::vaddr].toVariant().toULongLong();
string.type = stringObject[RJsonKey::type].toString(); string.type = stringObject[RJsonKey::type].toString();
@ -1646,23 +1653,23 @@ QList<FunctionDescription> CutterCore::parseFunctionsJson(const QJsonDocument &d
QList<FunctionDescription> ret; QList<FunctionDescription> ret;
QJsonArray jsonArray = doc.array(); QJsonArray jsonArray = doc.array();
for (QJsonValue value : jsonArray) { for (const QJsonValue &value : jsonArray) {
QJsonObject jsonObject = value.toObject(); QJsonObject jsonObject = value.toObject();
FunctionDescription function; FunctionDescription function;
function.offset = (RVA)jsonObject[RJsonKey::offset].toVariant().toULongLong(); function.offset = jsonObject[RJsonKey::offset].toVariant().toULongLong();
function.size = (RVA)jsonObject[RJsonKey::size].toVariant().toULongLong(); function.size = jsonObject[RJsonKey::size].toVariant().toULongLong();
function.nargs = (RVA)jsonObject[RJsonKey::nargs].toVariant().toULongLong(); function.nargs = jsonObject[RJsonKey::nargs].toVariant().toULongLong();
function.nbbs = (RVA)jsonObject[RJsonKey::nbbs].toVariant().toULongLong(); function.nbbs = jsonObject[RJsonKey::nbbs].toVariant().toULongLong();
function.nlocals = (RVA)jsonObject[RJsonKey::nlocals].toVariant().toULongLong(); function.nlocals = jsonObject[RJsonKey::nlocals].toVariant().toULongLong();
function.cc = (RVA)jsonObject[RJsonKey::cc].toVariant().toULongLong(); function.cc = jsonObject[RJsonKey::cc].toVariant().toULongLong();
function.calltype = jsonObject[RJsonKey::calltype].toString(); function.calltype = jsonObject[RJsonKey::calltype].toString();
function.name = jsonObject[RJsonKey::name].toString(); function.name = jsonObject[RJsonKey::name].toString();
function.edges = (RVA)jsonObject[RJsonKey::edges].toVariant().toULongLong(); function.edges = jsonObject[RJsonKey::edges].toVariant().toULongLong();
function.cost = (RVA)jsonObject[RJsonKey::cost].toVariant().toULongLong(); function.cost = jsonObject[RJsonKey::cost].toVariant().toULongLong();
function.calls = (RVA)jsonObject[RJsonKey::outdegree].toVariant().toULongLong(); function.calls = jsonObject[RJsonKey::outdegree].toVariant().toULongLong();
function.stackframe = (RVA)jsonObject[RJsonKey::stackframe].toVariant().toULongLong(); function.stackframe = jsonObject[RJsonKey::stackframe].toVariant().toULongLong();
ret << function; ret << function;
} }
@ -1676,10 +1683,11 @@ QList<FlagspaceDescription> CutterCore::getAllFlagspaces()
QList<FlagspaceDescription> ret; QList<FlagspaceDescription> ret;
QJsonArray flagspacesArray = cmdj("fsj").array(); QJsonArray flagspacesArray = cmdj("fsj").array();
for (QJsonValue value : flagspacesArray) { for (const QJsonValue &value : flagspacesArray) {
QJsonObject flagspaceObject = value.toObject(); QJsonObject flagspaceObject = value.toObject();
FlagspaceDescription flagspace; FlagspaceDescription flagspace;
flagspace.name = flagspaceObject[RJsonKey::name].toString(); flagspace.name = flagspaceObject[RJsonKey::name].toString();
ret << flagspace; ret << flagspace;
@ -1698,10 +1706,11 @@ QList<FlagDescription> CutterCore::getAllFlags(QString flagspace)
cmd("fs *"); cmd("fs *");
QJsonArray flagsArray = cmdj("fj").array(); QJsonArray flagsArray = cmdj("fj").array();
for (QJsonValue value : flagsArray) { for (const QJsonValue &value : flagsArray) {
QJsonObject flagObject = value.toObject(); QJsonObject flagObject = value.toObject();
FlagDescription flag; FlagDescription flag;
flag.offset = flagObject[RJsonKey::offset].toVariant().toULongLong(); flag.offset = flagObject[RJsonKey::offset].toVariant().toULongLong();
flag.size = flagObject[RJsonKey::size].toVariant().toULongLong(); flag.size = flagObject[RJsonKey::size].toVariant().toULongLong();
flag.name = flagObject[RJsonKey::name].toString(); flag.name = flagObject[RJsonKey::name].toString();
@ -1720,7 +1729,7 @@ QList<SectionDescription> CutterCore::getAllSections()
QJsonObject sectionsObj = sectionsDoc.object(); QJsonObject sectionsObj = sectionsDoc.object();
QJsonArray sectionsArray = sectionsObj[RJsonKey::sections].toArray(); QJsonArray sectionsArray = sectionsObj[RJsonKey::sections].toArray();
for (QJsonValue value : sectionsArray) { for (const QJsonValue &value : sectionsArray) {
QJsonObject sectionObject = value.toObject(); QJsonObject sectionObject = value.toObject();
QString name = sectionObject[RJsonKey::name].toString(); QString name = sectionObject[RJsonKey::name].toString();
@ -1747,7 +1756,7 @@ QStringList CutterCore::getSectionList()
QStringList ret; QStringList ret;
QJsonArray sectionsArray = cmdj("iSj").array(); QJsonArray sectionsArray = cmdj("iSj").array();
for (QJsonValue value : sectionsArray) { for (const QJsonValue &value : sectionsArray) {
ret << value.toObject()[RJsonKey::name].toString(); ret << value.toObject()[RJsonKey::name].toString();
} }
return ret; return ret;
@ -1760,7 +1769,7 @@ QList<SegmentDescription> CutterCore::getAllSegments()
QJsonArray segments = cmdj("iSSj").array(); QJsonArray segments = cmdj("iSSj").array();
for (QJsonValue value : segments) { for (const QJsonValue &value : segments) {
QJsonObject segmentObject = value.toObject(); QJsonObject segmentObject = value.toObject();
QString name = segmentObject[RJsonKey::name].toString(); QString name = segmentObject[RJsonKey::name].toString();
@ -1786,10 +1795,11 @@ QList<EntrypointDescription> CutterCore::getAllEntrypoint()
QList<EntrypointDescription> ret; QList<EntrypointDescription> ret;
QJsonArray entrypointsArray = cmdj("iej").array(); QJsonArray entrypointsArray = cmdj("iej").array();
for (QJsonValue value : entrypointsArray) { for (const QJsonValue &value : entrypointsArray) {
QJsonObject entrypointObject = value.toObject(); QJsonObject entrypointObject = value.toObject();
EntrypointDescription entrypoint; EntrypointDescription entrypoint;
entrypoint.vaddr = entrypointObject[RJsonKey::vaddr].toVariant().toULongLong(); entrypoint.vaddr = entrypointObject[RJsonKey::vaddr].toVariant().toULongLong();
entrypoint.paddr = entrypointObject[RJsonKey::paddr].toVariant().toULongLong(); entrypoint.paddr = entrypointObject[RJsonKey::paddr].toVariant().toULongLong();
entrypoint.baddr = entrypointObject[RJsonKey::baddr].toVariant().toULongLong(); entrypoint.baddr = entrypointObject[RJsonKey::baddr].toVariant().toULongLong();
@ -1808,29 +1818,34 @@ QList<ClassDescription> CutterCore::getAllClassesFromBin()
QList<ClassDescription> ret; QList<ClassDescription> ret;
QJsonArray classesArray = cmdj("icj").array(); QJsonArray classesArray = cmdj("icj").array();
for (QJsonValueRef value : classesArray) { for (const QJsonValue &value : classesArray) {
QJsonObject classObject = value.toObject(); QJsonObject classObject = value.toObject();
ClassDescription cls; ClassDescription cls;
cls.name = classObject[RJsonKey::classname].toString(); cls.name = classObject[RJsonKey::classname].toString();
cls.addr = classObject[RJsonKey::addr].toVariant().toULongLong(); cls.addr = classObject[RJsonKey::addr].toVariant().toULongLong();
cls.index = classObject[RJsonKey::index].toVariant().toULongLong(); cls.index = classObject[RJsonKey::index].toVariant().toULongLong();
for (QJsonValueRef value2 : classObject[RJsonKey::methods].toArray()) { for (const QJsonValue &value2 : classObject[RJsonKey::methods].toArray()) {
QJsonObject methObject = value2.toObject(); QJsonObject methObject = value2.toObject();
ClassMethodDescription meth; ClassMethodDescription meth;
meth.name = methObject[RJsonKey::name].toString(); meth.name = methObject[RJsonKey::name].toString();
meth.addr = methObject[RJsonKey::addr].toVariant().toULongLong(); meth.addr = methObject[RJsonKey::addr].toVariant().toULongLong();
cls.methods << meth; cls.methods << meth;
} }
for (QJsonValueRef value2 : classObject[RJsonKey::fields].toArray()) { for (const QJsonValue &value2 : classObject[RJsonKey::fields].toArray()) {
QJsonObject fieldObject = value2.toObject(); QJsonObject fieldObject = value2.toObject();
ClassFieldDescription field; ClassFieldDescription field;
field.name = fieldObject[RJsonKey::name].toString(); field.name = fieldObject[RJsonKey::name].toString();
field.addr = fieldObject[RJsonKey::addr].toVariant().toULongLong(); field.addr = fieldObject[RJsonKey::addr].toVariant().toULongLong();
cls.fields << field; cls.fields << field;
} }
@ -1851,8 +1866,9 @@ QList<ClassDescription> CutterCore::getAllClassesFromFlags()
QMap<QString, ClassDescription *> classesCache; QMap<QString, ClassDescription *> classesCache;
QJsonArray flagsArray = cmdj("fj@F:classes").array(); QJsonArray flagsArray = cmdj("fj@F:classes").array();
for (QJsonValueRef value : flagsArray) { for (const QJsonValue &value : flagsArray) {
QJsonObject flagObject = value.toObject(); QJsonObject flagObject = value.toObject();
QString flagName = flagObject[RJsonKey::name].toString(); QString flagName = flagObject[RJsonKey::name].toString();
QRegularExpressionMatch match = classFlagRegExp.match(flagName); QRegularExpressionMatch match = classFlagRegExp.match(flagName);
@ -1908,10 +1924,11 @@ QList<ResourcesDescription> CutterCore::getAllResources()
QList<ResourcesDescription> ret; QList<ResourcesDescription> ret;
QJsonArray resourcesArray = cmdj("iRj").array(); QJsonArray resourcesArray = cmdj("iRj").array();
for (QJsonValueRef value : resourcesArray) { for (const QJsonValue &value : resourcesArray) {
QJsonObject resourceObject = value.toObject(); QJsonObject resourceObject = value.toObject();
ResourcesDescription res; ResourcesDescription res;
res.name = resourceObject[RJsonKey::name].toInt(); res.name = resourceObject[RJsonKey::name].toInt();
res.vaddr = resourceObject[RJsonKey::vaddr].toVariant().toULongLong(); res.vaddr = resourceObject[RJsonKey::vaddr].toVariant().toULongLong();
res.index = resourceObject[RJsonKey::index].toVariant().toULongLong(); res.index = resourceObject[RJsonKey::index].toVariant().toULongLong();
@ -1930,17 +1947,19 @@ QList<VTableDescription> CutterCore::getAllVTables()
QList<VTableDescription> ret; QList<VTableDescription> ret;
QJsonArray vTablesArray = cmdj("avj").array(); QJsonArray vTablesArray = cmdj("avj").array();
for (QJsonValueRef vTableValue : vTablesArray) { for (const QJsonValue &vTableValue : vTablesArray) {
QJsonObject vTableObject = vTableValue.toObject(); QJsonObject vTableObject = vTableValue.toObject();
VTableDescription res; VTableDescription res;
res.addr = vTableObject[RJsonKey::offset].toVariant().toULongLong(); res.addr = vTableObject[RJsonKey::offset].toVariant().toULongLong();
QJsonArray methodArray = vTableObject[RJsonKey::methods].toArray(); QJsonArray methodArray = vTableObject[RJsonKey::methods].toArray();
for (QJsonValueRef methodValue : methodArray) { for (const QJsonValue &methodValue : methodArray) {
QJsonObject methodObject = methodValue.toObject(); QJsonObject methodObject = methodValue.toObject();
ClassMethodDescription method; ClassMethodDescription method;
method.addr = methodObject[RJsonKey::offset].toVariant().toULongLong(); method.addr = methodObject[RJsonKey::offset].toVariant().toULongLong();
method.name = methodObject[RJsonKey::name].toString(); method.name = methodObject[RJsonKey::name].toString();
@ -1959,7 +1978,7 @@ QList<TypeDescription> CutterCore::getAllTypes()
QJsonArray typesArray = cmdj("tj").array(); QJsonArray typesArray = cmdj("tj").array();
for (QJsonValue value : typesArray) { for (const QJsonValue &value : typesArray) {
QJsonObject typeObject = value.toObject(); QJsonObject typeObject = value.toObject();
TypeDescription exp; TypeDescription exp;
@ -1982,11 +2001,13 @@ QList<SearchDescription> CutterCore::getAllSearch(QString search_for, QString sp
QJsonArray searchArray = cmdj(space + QString(" ") + search_for).array(); QJsonArray searchArray = cmdj(space + QString(" ") + search_for).array();
if (space == "/Rj") { if (space == "/Rj") {
for (QJsonValue value : searchArray) { for (const QJsonValue &value : searchArray) {
QJsonObject searchObject = value.toObject(); QJsonObject searchObject = value.toObject();
SearchDescription exp; SearchDescription exp;
exp.code = QString(""); exp.code = QString("");
for (QJsonValue value2 : searchObject[RJsonKey::opcodes].toArray()) { for (const QJsonValue &value2 : searchObject[RJsonKey::opcodes].toArray()) {
QJsonObject gadget = value2.toObject(); QJsonObject gadget = value2.toObject();
exp.code += gadget[RJsonKey::opcode].toString() + "; "; exp.code += gadget[RJsonKey::opcode].toString() + "; ";
} }
@ -1998,8 +2019,9 @@ QList<SearchDescription> CutterCore::getAllSearch(QString search_for, QString sp
ret << exp; ret << exp;
} }
} else { } else {
for (QJsonValue value : searchArray) { for (const QJsonValue &value : searchArray) {
QJsonObject searchObject = value.toObject(); QJsonObject searchObject = value.toObject();
SearchDescription exp; SearchDescription exp;
exp.offset = searchObject[RJsonKey::offset].toVariant().toULongLong(); exp.offset = searchObject[RJsonKey::offset].toVariant().toULongLong();
@ -2031,7 +2053,9 @@ BlockStatistics CutterCore::getBlockStatistics(unsigned int blocksCount)
for (const QJsonValue &value : blocksArray) { for (const QJsonValue &value : blocksArray) {
QJsonObject blockObj = value.toObject(); QJsonObject blockObj = value.toObject();
BlockDescription block; BlockDescription block;
block.addr = blockObj[RJsonKey::offset].toVariant().toULongLong(); block.addr = blockObj[RJsonKey::offset].toVariant().toULongLong();
block.size = blockObj[RJsonKey::size].toVariant().toULongLong(); block.size = blockObj[RJsonKey::size].toVariant().toULongLong();
block.flags = blockObj[RJsonKey::flags].toInt(0); block.flags = blockObj[RJsonKey::flags].toInt(0);
@ -2074,10 +2098,11 @@ QList<XrefDescription> CutterCore::getXRefs(RVA addr, bool to, bool whole_functi
xrefsArray = cmdj("axfj@" + QString::number(addr)).array(); xrefsArray = cmdj("axfj@" + QString::number(addr)).array();
} }
for (QJsonValue value : xrefsArray) { for (const QJsonValue &value : xrefsArray) {
QJsonObject xrefObject = value.toObject(); QJsonObject xrefObject = value.toObject();
XrefDescription xref; XrefDescription xref;
xref.type = xrefObject[RJsonKey::type].toString(); xref.type = xrefObject[RJsonKey::type].toString();
if (!filterType.isNull() && filterType != xref.type) if (!filterType.isNull() && filterType != xref.type)
@ -2151,7 +2176,7 @@ void CutterCore::saveProject(const QString &name)
{ {
const QString &rv = cmd("Ps " + name.trimmed()).trimmed(); const QString &rv = cmd("Ps " + name.trimmed()).trimmed();
const bool ok = rv == name.trimmed(); const bool ok = rv == name.trimmed();
cmd("Pnj " + notes.toUtf8().toBase64()); cmd(QString("Pnj ") + notes.toUtf8().toBase64());
emit projectSaved(ok, name); emit projectSaved(ok, name);
} }
@ -2173,10 +2198,11 @@ QList<DisassemblyLine> CutterCore::disassembleLines(RVA offset, int lines)
offset)).array(); offset)).array();
QList<DisassemblyLine> r; QList<DisassemblyLine> r;
for (QJsonValue value : array) { for (const QJsonValue &value : array) {
QJsonObject object = value.toObject(); QJsonObject object = value.toObject();
DisassemblyLine line; DisassemblyLine line;
line.offset = object[RJsonKey::offset].toVariant().toULongLong(); line.offset = object[RJsonKey::offset].toVariant().toULongLong();
line.text = object[RJsonKey::text].toString(); line.text = object[RJsonKey::text].toString();
@ -2245,7 +2271,7 @@ QList<QString> CutterCore::getColorThemes()
{ {
QList<QString> r; QList<QString> r;
QJsonDocument themes = cmdj("ecoj"); QJsonDocument themes = cmdj("ecoj");
for (auto s : themes.array()) { for (const QJsonValue &s : themes.array()) {
r << s.toString(); r << s.toString();
} }
return r; return r;

View File

@ -18,7 +18,7 @@
#include <QErrorMessage> #include <QErrorMessage>
#define CutterRListForeach(list, it, type, x) \ #define CutterRListForeach(list, it, type, x) \
if (list) for (it = list->head; it && ((x=(type*)it->data)); it = it->n) if (list) for (it = list->head; it && ((x=static_cast<type*>(it->data))); it = it->n)
#define APPNAME "Cutter" #define APPNAME "Cutter"
@ -382,21 +382,24 @@ public:
/* Core functions (commands) */ /* Core functions (commands) */
static QString sanitizeStringForCommand(QString s); static QString sanitizeStringForCommand(QString s);
QString cmd(const QString &str); QString cmd(const char *str);
QString cmd(const QString &str) { return cmd(str.toUtf8().constData()); }
QString cmdRaw(const QString &str); QString cmdRaw(const QString &str);
QJsonDocument cmdj(const QString &str); QJsonDocument cmdj(const char *str);
QStringList cmdList(const QString &str) QJsonDocument cmdj(const QString &str) { return cmdj(str.toUtf8().constData()); }
{ QStringList cmdList(const char *str) { return cmd(str).split('\n', QString::SkipEmptyParts); }
auto l = cmd(str).split("\n"); QStringList cmdList(const QString &str) { return cmdList(str.toUtf8().constData()); }
l.removeAll("");
return l;
}
QString cmdTask(const QString &str); QString cmdTask(const QString &str);
QJsonDocument cmdjTask(const QString &str); QJsonDocument cmdjTask(const QString &str);
void cmdEsil(QString command); void cmdEsil(const char *command);
void cmdEsil(const QString &command) { cmdEsil(command.toUtf8().constData()); }
QString getVersionInformation(); QString getVersionInformation();
QJsonDocument parseJson(const char *res, const QString &cmd = QString()); QJsonDocument parseJson(const char *res, const char *cmd = nullptr);
QJsonDocument parseJson(const char *res, const QString &cmd = QString())
{
return parseJson(res, cmd.isNull() ? nullptr : cmd.toLocal8Bit().constData());
}
/* Functions methods */ /* Functions methods */
void renameFunction(const QString &oldName, const QString &newName); void renameFunction(const QString &oldName, const QString &newName);
@ -436,7 +439,7 @@ public:
/* File related methods */ /* File related methods */
bool loadFile(QString path, ut64 baddr = 0LL, ut64 mapaddr = 0LL, int perms = R_PERM_R, bool loadFile(QString path, ut64 baddr = 0LL, ut64 mapaddr = 0LL, int perms = R_PERM_R,
int va = 0, bool loadbin = false, const QString &forceBinPlugin = nullptr); int va = 0, bool loadbin = false, const QString &forceBinPlugin = QString());
bool tryFile(QString path, bool rw); bool tryFile(QString path, bool rw);
void openFile(QString path, RVA mapaddr); void openFile(QString path, RVA mapaddr);
void loadScript(const QString &scriptname); void loadScript(const QString &scriptname);
@ -471,14 +474,20 @@ public:
ut64 math(const QString &expr); ut64 math(const QString &expr);
/* Config functions */ /* Config functions */
void setConfig(const QString &k, const QString &v); void setConfig(const char *k, const QString &v);
void setConfig(const QString &k, int v); void setConfig(const QString &k, const QString &v) { setConfig(k.toUtf8().constData(), v); }
void setConfig(const QString &k, bool v); void setConfig(const char *k, int v);
void setConfig(const QString &k, const char *v) { setConfig(k, QString(v)); } void setConfig(const QString &k, int v) { setConfig(k.toUtf8().constData(), v); }
void setConfig(const QString &k, const QVariant &v); void setConfig(const char *k, bool v);
int getConfigi(const QString &k); void setConfig(const QString &k, bool v) { setConfig(k.toUtf8().constData(), v); }
bool getConfigb(const QString &k); void setConfig(const char *k, const QVariant &v);
QString getConfig(const QString &k); void setConfig(const QString &k, const QVariant &v) { setConfig(k.toUtf8().constData(), v); }
int getConfigi(const char *k);
int getConfigi(const QString &k) { return getConfigi(k.toUtf8().constData()); }
bool getConfigb(const char *k);
bool getConfigb(const QString &k) { return getConfigb(k.toUtf8().constData()); }
QString getConfig(const char *k);
QString getConfig(const QString &k) { return getConfig(k.toUtf8().constData()); }
QList<QString> getColorThemes(); QList<QString> getColorThemes();
/* Assembly related methods */ /* Assembly related methods */
@ -521,7 +530,7 @@ public:
void delAllBreakpoints(); void delAllBreakpoints();
void enableBreakpoint(RVA addr); void enableBreakpoint(RVA addr);
void disableBreakpoint(RVA addr); void disableBreakpoint(RVA addr);
bool isBreakpoint(QList<RVA> breakpoints, RVA addr); bool isBreakpoint(const QList<RVA> &breakpoints, RVA addr);
QList<RVA> getBreakpointsAddresses(); QList<RVA> getBreakpointsAddresses();
QString getActiveDebugPlugin(); QString getActiveDebugPlugin();
QStringList getDebugPlugins(); QStringList getDebugPlugins();
@ -565,7 +574,7 @@ public:
static bool isProjectNameValid(const QString &name); static bool isProjectNameValid(const QString &name);
/* Widgets */ /* Widgets */
QList<RBinPluginDescription> getRBinPluginDescriptions(const QString &type = nullptr); QList<RBinPluginDescription> getRBinPluginDescriptions(const QString &type = QString());
QList<RIOPluginDescription> getRIOPluginDescriptions(); QList<RIOPluginDescription> getRIOPluginDescriptions();
QList<RCorePluginDescription> getRCorePluginDescriptions(); QList<RCorePluginDescription> getRCorePluginDescriptions();
QList<RAsmPluginDescription> getRAsmPluginDescriptions(); QList<RAsmPluginDescription> getRAsmPluginDescriptions();
@ -579,7 +588,7 @@ public:
QList<RelocDescription> getAllRelocs(); QList<RelocDescription> getAllRelocs();
QList<StringDescription> getAllStrings(); QList<StringDescription> getAllStrings();
QList<FlagspaceDescription> getAllFlagspaces(); QList<FlagspaceDescription> getAllFlagspaces();
QList<FlagDescription> getAllFlags(QString flagspace = NULL); QList<FlagDescription> getAllFlags(QString flagspace = QString());
QList<SectionDescription> getAllSections(); QList<SectionDescription> getAllSections();
QList<SegmentDescription> getAllSegments(); QList<SegmentDescription> getAllSegments();
QList<EntrypointDescription> getAllEntrypoint(); QList<EntrypointDescription> getAllEntrypoint();

View File

@ -42,7 +42,7 @@ CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc
QString langPrefix; QString langPrefix;
if (language != "en") { if (language != "en") {
for (auto &it : allLocales) { for (const QLocale &it : allLocales) {
langPrefix = it.bcp47Name(); langPrefix = it.bcp47Name();
if (langPrefix == language) { if (langPrefix == language) {
const QString &cutterTranslationPath = QCoreApplication::applicationDirPath() + QDir::separator() const QString &cutterTranslationPath = QCoreApplication::applicationDirPath() + QDir::separator()

View File

@ -39,7 +39,7 @@ ColorSchemeFileSaver::ColorSchemeFileSaver(QObject *parent) : QObject (parent)
dirs.removeOne(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); dirs.removeOne(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation));
standardR2ThemesLocationPath = ""; standardR2ThemesLocationPath = "";
for (auto &it : dirs) { for (const QString &it : dirs) {
currDir = QDir(it).filePath("radare2"); currDir = QDir(it).filePath("radare2");
if (currDir.exists()) { if (currDir.exists()) {
break; break;
@ -90,7 +90,7 @@ QFile::FileError ColorSchemeFileSaver::copy(const QString &srcThemeName,
Core()->cmd(QString("eco %1").arg(theme)); Core()->cmd(QString("eco %1").arg(theme));
QColor back = Config()->getColor(standardBackgroundOptionName); QColor back = Config()->getColor(standardBackgroundOptionName);
_obj[standardBackgroundOptionName] = QJsonArray({back.red(), back.green(), back.blue()}); _obj[standardBackgroundOptionName] = QJsonArray({back.red(), back.green(), back.blue()});
for (auto &it : _obj.keys()) { for (const QString &it : _obj.keys()) {
QJsonArray rgb = _obj[it].toArray(); QJsonArray rgb = _obj[it].toArray();
if (rgb.size() != 3) { if (rgb.size() != 3) {
continue; continue;
@ -103,7 +103,7 @@ QFile::FileError ColorSchemeFileSaver::copy(const QString &srcThemeName,
} }
QStringList tmp; QStringList tmp;
for (auto &it : src) { for (const QString &it : src) {
if (it.isEmpty()) { if (it.isEmpty()) {
continue; continue;
} }
@ -117,7 +117,7 @@ QFile::FileError ColorSchemeFileSaver::copy(const QString &srcThemeName,
} }
} }
for (auto &it : options) { for (const QString &it : options) {
if (cutterSpecificOptions.contains(it)) { if (cutterSpecificOptions.contains(it)) {
fOut.write("#~"); fOut.write("#~");
} else { } else {
@ -146,7 +146,7 @@ QFile::FileError ColorSchemeFileSaver::save(const QString &scheme, const QString
bool ColorSchemeFileSaver::isCustomScheme(const QString &schemeName) const bool ColorSchemeFileSaver::isCustomScheme(const QString &schemeName) const
{ {
for (auto &it : QDir(customR2ThemesLocationPath).entryInfoList()) for (const QFileInfo &it : QDir(customR2ThemesLocationPath).entryInfoList())
if (it.fileName() == schemeName) if (it.fileName() == schemeName)
return true; return true;
return false; return false;
@ -166,7 +166,7 @@ QMap<QString, QColor> ColorSchemeFileSaver::getCutterSpecific() const
QMap<QString, QColor> ret; QMap<QString, QColor> ret;
QStringList data = QString(f.readAll()).split('\n'); QStringList data = QString(f.readAll()).split('\n');
for (auto &it : data) { for (const QString &it : data) {
if (it.length() > 2 && it.left(2) == "#~") { if (it.length() > 2 && it.left(2) == "#~") {
QStringList currLine = it.split(' '); QStringList currLine = it.split(' ');
if (currLine.size() > 1) { if (currLine.size() > 1) {

View File

@ -322,14 +322,14 @@ void Configuration::setColorTheme(QString theme)
void Configuration::resetToDefaultAsmOptions() void Configuration::resetToDefaultAsmOptions()
{ {
for (auto it = asmOptions.begin(); it != asmOptions.end(); it++) { for (auto it = asmOptions.cbegin(); it != asmOptions.cend(); it++) {
setConfig(it.key(), it.value()); setConfig(it.key(), it.value());
} }
} }
void Configuration::applySavedAsmOptions() void Configuration::applySavedAsmOptions()
{ {
for (auto it = asmOptions.begin(); it != asmOptions.end(); it++) { for (auto it = asmOptions.cbegin(); it != asmOptions.cend(); it++) {
Core()->setConfig(it.key(), s.value(it.key(), it.value())); Core()->setConfig(it.key(), s.value(it.key(), it.value()));
} }
} }

View File

@ -76,7 +76,7 @@ JsonTreeItem *JsonTreeItem::load(const QJsonValue &value, JsonTreeItem *parent)
if ( value.isObject()) { if ( value.isObject()) {
//Get all QJsonValue childs //Get all QJsonValue childs
for (QString key : value.toObject().keys()) { for (const QString &key : value.toObject().keys()) {
QJsonValue v = value.toObject().value(key); QJsonValue v = value.toObject().value(key);
JsonTreeItem *child = load(v, rootItem); JsonTreeItem *child = load(v, rootItem);
child->setKey(key); child->setKey(key);
@ -87,7 +87,7 @@ JsonTreeItem *JsonTreeItem::load(const QJsonValue &value, JsonTreeItem *parent)
} else if ( value.isArray()) { } else if ( value.isArray()) {
//Get all QJsonValue childs //Get all QJsonValue childs
int index = 0; int index = 0;
for (QJsonValue v : value.toArray()) { for (const QJsonValue &v : value.toArray()) {
JsonTreeItem *child = load(v, rootItem); JsonTreeItem *child = load(v, rootItem);
child->setKey(QString::number(index)); child->setKey(QString::number(index));

View File

@ -6,7 +6,7 @@
TempConfig::~TempConfig() TempConfig::~TempConfig()
{ {
for (auto i = resetValues.begin(); i != resetValues.end(); i++) { for (auto i = resetValues.constBegin(); i != resetValues.constEnd(); i++) {
switch (i.value().type()) { switch (i.value().type()) {
case QVariant::String: case QVariant::String:
Core()->setConfig(i.key(), i.value().toString()); Core()->setConfig(i.key(), i.value().toString());
@ -52,4 +52,4 @@ TempConfig &TempConfig::set(const QString &key, bool value)
Core()->setConfig(key, value); Core()->setConfig(key, value);
return *this; return *this;
} }

View File

@ -24,7 +24,7 @@ InitialOptionsDialog::InitialOptionsDialog(MainWindow *main):
// Fill the plugins combo // Fill the plugins combo
asm_plugins = core->getAsmPluginNames(); asm_plugins = core->getAsmPluginNames();
for (auto plugin : asm_plugins) for (const auto &plugin : asm_plugins)
ui->archComboBox->addItem(plugin, plugin); ui->archComboBox->addItem(plugin, plugin);
ui->archComboBox->setToolTip(core->cmd("e? asm.arch").trimmed()); ui->archComboBox->setToolTip(core->cmd("e? asm.arch").trimmed());
@ -42,7 +42,7 @@ InitialOptionsDialog::InitialOptionsDialog(MainWindow *main):
ui->entry_analbb->setToolTip(core->cmd("e? anal.bb.maxsize").trimmed()); ui->entry_analbb->setToolTip(core->cmd("e? anal.bb.maxsize").trimmed());
for (auto plugin : core->getRBinPluginDescriptions("bin")) for (const auto &plugin : core->getRBinPluginDescriptions("bin"))
ui->formatComboBox->addItem(plugin.name, QVariant::fromValue(plugin)); ui->formatComboBox->addItem(plugin.name, QVariant::fromValue(plugin));
ui->hideFrame->setVisible(false); ui->hideFrame->setVisible(false);

View File

@ -323,7 +323,7 @@ void NewFileDialog::fillIOPluginsList()
int index = 1; int index = 1;
QList<RIOPluginDescription> ioPlugins = Core()->getRIOPluginDescriptions(); QList<RIOPluginDescription> ioPlugins = Core()->getRIOPluginDescriptions();
for (RIOPluginDescription plugin : ioPlugins) { for (const RIOPluginDescription &plugin : ioPlugins) {
// Hide debug plugins // Hide debug plugins
if (plugin.permissions.contains('d')) { if (plugin.permissions.contains('d')) {
continue; continue;

View File

@ -10,7 +10,7 @@ R2PluginsDialog::R2PluginsDialog(QWidget *parent) :
{ {
ui->setupUi(this); ui->setupUi(this);
for (auto plugin : Core()->getRBinPluginDescriptions()) { for (const auto &plugin : Core()->getRBinPluginDescriptions()) {
QTreeWidgetItem *item = new QTreeWidgetItem(); QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText(0, plugin.name); item->setText(0, plugin.name);
item->setText(1, plugin.description); item->setText(1, plugin.description);
@ -20,7 +20,7 @@ R2PluginsDialog::R2PluginsDialog(QWidget *parent) :
} }
qhelpers::adjustColumns(ui->RBinTreeWidget, 0); qhelpers::adjustColumns(ui->RBinTreeWidget, 0);
for (auto plugin : Core()->getRIOPluginDescriptions()) { for (const auto &plugin : Core()->getRIOPluginDescriptions()) {
QTreeWidgetItem *item = new QTreeWidgetItem(); QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText(0, plugin.name); item->setText(0, plugin.name);
item->setText(1, plugin.description); item->setText(1, plugin.description);
@ -30,7 +30,7 @@ R2PluginsDialog::R2PluginsDialog(QWidget *parent) :
} }
qhelpers::adjustColumns(ui->RIOTreeWidget, 0); qhelpers::adjustColumns(ui->RIOTreeWidget, 0);
for (auto plugin : Core()->getRCorePluginDescriptions()) { for (const auto &plugin : Core()->getRCorePluginDescriptions()) {
QTreeWidgetItem *item = new QTreeWidgetItem(); QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText(0, plugin.name); item->setText(0, plugin.name);
item->setText(1, plugin.description); item->setText(1, plugin.description);
@ -38,7 +38,7 @@ R2PluginsDialog::R2PluginsDialog(QWidget *parent) :
} }
qhelpers::adjustColumns(ui->RCoreTreeWidget, 0); qhelpers::adjustColumns(ui->RCoreTreeWidget, 0);
for (auto plugin : Core()->getRAsmPluginDescriptions()) { for (const auto &plugin : Core()->getRAsmPluginDescriptions()) {
QTreeWidgetItem *item = new QTreeWidgetItem(); QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText(0, plugin.name); item->setText(0, plugin.name);
item->setText(1, plugin.architecture); item->setText(1, plugin.architecture);

View File

@ -75,7 +75,7 @@ void SetFunctionVarTypes::on_OkPressed()
.arg(ui->selectedTypeForVar->currentText())); .arg(ui->selectedTypeForVar->currentText()));
Core()->cmd(QString("afvn %1 %2") Core()->cmd(QString("afvn %1 %2")
.arg(ui->newVarName->text().replace(" ", "_")) .arg(ui->newVarName->text().replace(' ', '_'))
.arg(ui->dropdownLocalVars->currentText())); .arg(ui->dropdownLocalVars->currentText()));
} }
@ -89,29 +89,24 @@ void SetFunctionVarTypes::populateTypesComboBox()
{ {
//gets all loaded types, structures and enums and puts them in a list //gets all loaded types, structures and enums and puts them in a list
QString res;
QStringList userStructures; QStringList userStructures;
QStringList userEnumerations; QStringList userEnumerations;
QList<TypeDescription> primitiveTypesTypeList; QList<TypeDescription> primitiveTypesTypeList;
res = Core()->cmd(QString("ts")); userStructures = Core()->cmdList("ts");
userStructures = res.split("\n");
userStructures.removeAll(QString(""));
ui->selectedTypeForVar->addItems(userStructures); ui->selectedTypeForVar->addItems(userStructures);
ui->selectedTypeForVar->insertSeparator(ui->selectedTypeForVar->count()); ui->selectedTypeForVar->insertSeparator(ui->selectedTypeForVar->count());
primitiveTypesTypeList = Core()->getAllTypes(); primitiveTypesTypeList = Core()->getAllTypes();
for (TypeDescription thisType : primitiveTypesTypeList) { for (const TypeDescription &thisType : primitiveTypesTypeList) {
ui->selectedTypeForVar->addItem(thisType.type); ui->selectedTypeForVar->addItem(thisType.type);
} }
ui->selectedTypeForVar->insertSeparator(ui->selectedTypeForVar->count()); ui->selectedTypeForVar->insertSeparator(ui->selectedTypeForVar->count());
res = Core()->cmd(QString("te")); userEnumerations = Core()->cmdList("te");
userStructures = res.split("\n"); ui->selectedTypeForVar->addItems(userEnumerations);
userStructures.removeAll(QString(""));
ui->selectedTypeForVar->addItems(userStructures);
return; return;

View File

@ -23,7 +23,7 @@ static const QHash<QString, ColorFlags> kRelevantSchemes = {
{ "onedark", DarkFlag }, { "onedark", DarkFlag },
{ "solarized", DarkFlag }, { "solarized", DarkFlag },
{ "zenburn", DarkFlag }, { "zenburn", DarkFlag },
{ "cutter", LightFlag }, { "cutter", LightFlag },
{ "dark", LightFlag }, { "dark", LightFlag },
{ "matrix", LightFlag }, { "matrix", LightFlag },
{ "tango", LightFlag }, { "tango", LightFlag },
@ -103,7 +103,7 @@ void AppearanceOptionsWidget::updateThemeFromConfig()
for (auto &it : kCutterQtThemesList) { for (auto &it : kCutterQtThemesList) {
ui->themeComboBox->addItem(it.name); ui->themeComboBox->addItem(it.name);
} }
uint curQtThemeIndex = Config()->getTheme(); int curQtThemeIndex = Config()->getTheme();
if (curQtThemeIndex >= kCutterQtThemesList.size()) { if (curQtThemeIndex >= kCutterQtThemesList.size()) {
curQtThemeIndex = 0; curQtThemeIndex = 0;
Config()->setTheme(curQtThemeIndex); Config()->setTheme(curQtThemeIndex);
@ -161,7 +161,7 @@ void AppearanceOptionsWidget::on_colorComboBox_currentIndexChanged(int index)
{ {
QString theme = ui->colorComboBox->itemText(index); QString theme = ui->colorComboBox->itemText(index);
uint curQtThemeIndex = Config()->getTheme(); int curQtThemeIndex = Config()->getTheme();
if (curQtThemeIndex >= kCutterQtThemesList.size()) { if (curQtThemeIndex >= kCutterQtThemesList.size()) {
curQtThemeIndex = 0; curQtThemeIndex = 0;
Config()->setTheme(curQtThemeIndex); Config()->setTheme(curQtThemeIndex);

View File

@ -9,10 +9,12 @@
#include "common/Helpers.h" #include "common/Helpers.h"
#include "common/Configuration.h" #include "common/Configuration.h"
AsmOptionsWidget::AsmOptionsWidget(PreferencesDialog */*dialog*/, QWidget *parent) AsmOptionsWidget::AsmOptionsWidget(PreferencesDialog *dialog, QWidget *parent)
: QDialog(parent), : QDialog(parent),
ui(new Ui::AsmOptionsWidget) ui(new Ui::AsmOptionsWidget)
{ {
Q_UNUSED(dialog)
ui->setupUi(this); ui->setupUi(this);
ui->syntaxComboBox->blockSignals(true); ui->syntaxComboBox->blockSignals(true);

View File

@ -29,7 +29,7 @@ void DebugOptionsWidget::updateDebugPlugin()
SLOT(on_pluginComboBox_currentIndexChanged(const QString &))); SLOT(on_pluginComboBox_currentIndexChanged(const QString &)));
QStringList plugins = Core()->getDebugPlugins(); QStringList plugins = Core()->getDebugPlugins();
for (QString str : plugins) for (const QString &str : plugins)
ui->pluginComboBox->addItem(str); ui->pluginComboBox->addItem(str);
QString plugin = Core()->getActiveDebugPlugin(); QString plugin = Core()->getActiveDebugPlugin();

View File

@ -9,10 +9,12 @@
#include "common/Helpers.h" #include "common/Helpers.h"
#include "common/Configuration.h" #include "common/Configuration.h"
GraphOptionsWidget::GraphOptionsWidget(PreferencesDialog */*dialog*/, QWidget *parent) GraphOptionsWidget::GraphOptionsWidget(PreferencesDialog *dialog, QWidget *parent)
: QDialog(parent), : QDialog(parent),
ui(new Ui::GraphOptionsWidget) ui(new Ui::GraphOptionsWidget)
{ {
Q_UNUSED(dialog)
ui->setupUi(this); ui->setupUi(this);
updateOptionsFromVars(); updateOptionsFromVars();

View File

@ -39,7 +39,7 @@ void BacktraceWidget::setBacktraceGrid()
{ {
QJsonArray backtraceValues = Core()->getBacktrace().array(); QJsonArray backtraceValues = Core()->getBacktrace().array();
int i = 0; int i = 0;
for (QJsonValueRef value : backtraceValues) { for (const QJsonValue &value : backtraceValues) {
QJsonObject backtraceItem = value.toObject(); QJsonObject backtraceItem = value.toObject();
QString progCounter = RAddressString(backtraceItem["pc"].toVariant().toULongLong()); QString progCounter = RAddressString(backtraceItem["pc"].toVariant().toULongLong());
QString stackPointer = RAddressString(backtraceItem["sp"].toVariant().toULongLong()); QString stackPointer = RAddressString(backtraceItem["sp"].toVariant().toULongLong());
@ -67,4 +67,4 @@ void BacktraceWidget::setBacktraceGrid()
void BacktraceWidget::fontsUpdatedSlot() void BacktraceWidget::fontsUpdatedSlot()
{ {
viewBacktrace->setFont(Config()->getFont()); viewBacktrace->setFont(Config()->getFont());
} }

View File

@ -183,8 +183,8 @@ void BreakpointWidget::addBreakpointDialog()
if (dialog->exec()) { if (dialog->exec()) {
QString bps = dialog->getBreakpoints(); QString bps = dialog->getBreakpoints();
if (!bps.isEmpty()) { if (!bps.isEmpty()) {
QStringList bpList = bps.split(" ", QString::SkipEmptyParts); QStringList bpList = bps.split(' ', QString::SkipEmptyParts);
for ( QString bp : bpList) { for (const QString &bp : bpList) {
Core()->toggleBreakpoint(bp); Core()->toggleBreakpoint(bp);
} }
} }

View File

@ -69,14 +69,17 @@ public:
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
void setColor(const QString &option, void setColor(const QString &option, const QColor &color);
const QColor &color);
QColor getBackroundColor() const; QColor getBackroundColor() const;
QColor getTextColor() const; QColor getTextColor() const;
int rowCount(const QModelIndex &parent = QModelIndex()) const override { return m_data.size(); } int rowCount(const QModelIndex &parent = QModelIndex()) const override
{
Q_UNUSED(parent)
return m_data.size();
}
void updateScheme(); void updateScheme();

View File

@ -327,7 +327,7 @@ void CommentsWidget::refreshTree()
comments = Core()->getAllComments("CCu"); comments = Core()->getAllComments("CCu");
nestedComments.clear(); nestedComments.clear();
for (CommentDescription comment : comments) { for (const CommentDescription &comment : comments) {
QString fcnName = Core()->cmdFunctionAt(comment.offset); QString fcnName = Core()->cmdFunctionAt(comment.offset);
nestedComments[fcnName].append(comment); nestedComments[fcnName].append(comment);
} }

View File

@ -136,7 +136,7 @@ void Dashboard::updateContents()
} }
} }
for (QString lib : lines) { for (const QString &lib : lines) {
QLabel *label = new QLabel(this); QLabel *label = new QLabel(this);
label->setText(lib); label->setText(lib);
label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);

View File

@ -218,8 +218,8 @@ void DisassemblerGraphView::loadCurrentGraph()
RVA entry = func["offset"].toVariant().toULongLong(); RVA entry = func["offset"].toVariant().toULongLong();
setEntry(entry); setEntry(entry);
for (QJsonValueRef blockRef : func["blocks"].toArray()) { for (const QJsonValue &value : func["blocks"].toArray()) {
QJsonObject block = blockRef.toObject(); QJsonObject block = value.toObject();
RVA block_entry = block["offset"].toVariant().toULongLong(); RVA block_entry = block["offset"].toVariant().toULongLong();
RVA block_size = block["size"].toVariant().toULongLong(); RVA block_size = block["size"].toVariant().toULongLong();
RVA block_fail = block["fail"].toVariant().toULongLong(); RVA block_fail = block["fail"].toVariant().toULongLong();
@ -450,7 +450,7 @@ void DisassemblerGraphView::drawBlock(QPainter &p, GraphView::GraphBlock &block)
// Draw different background for selected instruction // Draw different background for selected instruction
if (selected_instruction != RVA_INVALID) { if (selected_instruction != RVA_INVALID) {
int y = block.y + (2 * charWidth) + (db.header_text.lines.size() * charHeight); int y = block.y + (2 * charWidth) + (db.header_text.lines.size() * charHeight);
for (Instr &instr : db.instrs) { for (const Instr &instr : db.instrs) {
if (instr.addr > selected_instruction) { if (instr.addr > selected_instruction) {
break; break;
} }
@ -489,7 +489,7 @@ void DisassemblerGraphView::drawBlock(QPainter &p, GraphView::GraphBlock &block)
int y = block.y + (2 * charWidth) + (db.header_text.lines.size() * charHeight); int y = block.y + (2 * charWidth) + (db.header_text.lines.size() * charHeight);
int tokenWidth = mFontMetrics->width(highlight_token->content); int tokenWidth = mFontMetrics->width(highlight_token->content);
for (Instr &instr : db.instrs) { for (const Instr &instr : db.instrs) {
int pos = -1; int pos = -1;
while ((pos = instr.plainText.indexOf(highlight_token->content, pos + 1)) != -1) { while ((pos = instr.plainText.indexOf(highlight_token->content, pos + 1)) != -1) {
@ -521,7 +521,7 @@ void DisassemblerGraphView::drawBlock(QPainter &p, GraphView::GraphBlock &block)
// highlight program counter // highlight program counter
if (PCInBlock) { if (PCInBlock) {
int y = block.y + (2 * charWidth) + (db.header_text.lines.size() * charHeight); int y = block.y + (2 * charWidth) + (db.header_text.lines.size() * charHeight);
for (Instr &instr : db.instrs) { for (const Instr &instr : db.instrs) {
if (instr.addr > PCAddr) { if (instr.addr > PCAddr) {
break; break;
} }
@ -541,7 +541,7 @@ void DisassemblerGraphView::drawBlock(QPainter &p, GraphView::GraphBlock &block)
RichTextPainter::paintRichText(&p, x, y, block.width, charHeight, 0, line, mFontMetrics); RichTextPainter::paintRichText(&p, x, y, block.width, charHeight, 0, line, mFontMetrics);
y += charHeight; y += charHeight;
} }
for (Instr &instr : db.instrs) { for (const Instr &instr : db.instrs) {
if (Core()->isBreakpoint(breakpoints, instr.addr)) { if (Core()->isBreakpoint(breakpoints, instr.addr)) {
p.fillRect(QRect(block.x + charWidth, y, block.width - (10 + 2 * charWidth), p.fillRect(QRect(block.x + charWidth, y, block.width - (10 + 2 * charWidth),
int(instr.text.lines.size()) * charHeight), ConfigColor("gui.breakpoint_background")); int(instr.text.lines.size()) * charHeight), ConfigColor("gui.breakpoint_background"));
@ -663,7 +663,7 @@ DisassemblerGraphView::DisassemblyBlock *DisassemblerGraphView::blockForAddress(
{ {
for (auto &blockIt : disassembly_blocks) { for (auto &blockIt : disassembly_blocks) {
DisassemblyBlock &db = blockIt.second; DisassemblyBlock &db = blockIt.second;
for (Instr i : db.instrs) { for (const Instr &i : db.instrs) {
if (i.addr == RVA_INVALID || i.size == RVA_INVALID) { if (i.addr == RVA_INVALID || i.size == RVA_INVALID) {
continue; continue;
} }

View File

@ -46,8 +46,8 @@ class DisassemblerGraphView : public GraphView
QString ToQString() const QString ToQString() const
{ {
QString result; QString result;
for (auto &line : lines) { for (const auto &line : lines) {
for (auto &t : line) { for (const auto &t : line) {
result += t.text; result += t.text;
} }
} }

View File

@ -228,7 +228,7 @@ void DisassemblyWidget::refreshDisasm(RVA offset)
mDisasTextEdit->document()->clear(); mDisasTextEdit->document()->clear();
QTextCursor cursor(mDisasTextEdit->document()); QTextCursor cursor(mDisasTextEdit->document());
QTextBlockFormat regular = cursor.blockFormat(); QTextBlockFormat regular = cursor.blockFormat();
for (DisassemblyLine line : disassemblyLines) { for (const DisassemblyLine &line : disassemblyLines) {
if (line.offset < topOffset) { // overflow if (line.offset < topOffset) { // overflow
break; break;
} }

View File

@ -28,7 +28,7 @@ EntrypointWidget::~EntrypointWidget() {}
void EntrypointWidget::fillEntrypoint() void EntrypointWidget::fillEntrypoint()
{ {
ui->entrypointTreeWidget->clear(); ui->entrypointTreeWidget->clear();
for (auto i : Core()->getAllEntrypoint()) { for (const EntrypointDescription &i : Core()->getAllEntrypoint()) {
QTreeWidgetItem *item = new QTreeWidgetItem(); QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText(0, RAddressString(i.vaddr)); item->setText(0, RAddressString(i.vaddr));
item->setText(1, i.type); item->setText(1, i.type);

View File

@ -221,7 +221,7 @@ void FlagsWidget::refreshFlagspaces()
ui->flagspaceCombo->clear(); ui->flagspaceCombo->clear();
ui->flagspaceCombo->addItem(tr("(all)")); ui->flagspaceCombo->addItem(tr("(all)"));
for (auto i : Core()->getAllFlagspaces()) { for (const FlagspaceDescription &i : Core()->getAllFlagspaces()) {
ui->flagspaceCombo->addItem(i.name, QVariant::fromValue(i)); ui->flagspaceCombo->addItem(i.name, QVariant::fromValue(i));
} }
@ -250,7 +250,7 @@ void FlagsWidget::refreshFlags()
// TODO: this is not a very good place for the following: // TODO: this is not a very good place for the following:
QStringList flagNames; QStringList flagNames;
for (auto i : flags) for (const FlagDescription &i : flags)
flagNames.append(i.name); flagNames.append(i.name);
main->refreshOmniBar(flagNames); main->refreshOmniBar(flagNames);
} }

View File

@ -564,7 +564,7 @@ void FunctionsWidget::refreshTree()
this->functions = functions; this->functions = functions;
importAddresses.clear(); importAddresses.clear();
for (ImportDescription import : Core()->getAllImports()) { for (const ImportDescription &import : Core()->getAllImports()) {
importAddresses.insert(import.plt); importAddresses.insert(import.plt);
} }

View File

@ -33,7 +33,7 @@ void SdbDock::reload(QString _path)
QList<QString> keys; QList<QString> keys;
/* key-values */ /* key-values */
keys = Core()->sdbListKeys(path); keys = Core()->sdbListKeys(path);
for (QString key : keys) { for (const QString &key : keys) {
QTreeWidgetItem *tempItem = new QTreeWidgetItem(); QTreeWidgetItem *tempItem = new QTreeWidgetItem();
tempItem->setText(0, key); tempItem->setText(0, key);
tempItem->setText(1, Core()->sdbGet(path, key)); tempItem->setText(1, Core()->sdbGet(path, key));
@ -45,7 +45,7 @@ void SdbDock::reload(QString _path)
/* namespaces */ /* namespaces */
keys = Core()->sdbList(path); keys = Core()->sdbList(path);
keys.append(".."); keys.append("..");
for (QString key : keys) { for (const QString &key : keys) {
QTreeWidgetItem *tempItem = new QTreeWidgetItem(); QTreeWidgetItem *tempItem = new QTreeWidgetItem();
tempItem->setText(0, key + "/"); tempItem->setText(0, key + "/");
tempItem->setText(1, ""); tempItem->setText(1, "");

View File

@ -184,7 +184,7 @@ void SidebarWidget::fillOffsetInfo(QString off)
ui->offsetTreeWidget->clear(); ui->offsetTreeWidget->clear();
QString raw = Core()->cmd(QString("ao@") + off).trimmed(); QString raw = Core()->cmd(QString("ao@") + off).trimmed();
QList<QString> lines = raw.split("\n", QString::SkipEmptyParts); QList<QString> lines = raw.split("\n", QString::SkipEmptyParts);
for (QString line : lines) { for (const QString &line : lines) {
QList<QString> eles = line.split(":", QString::SkipEmptyParts); QList<QString> eles = line.split(":", QString::SkipEmptyParts);
if (eles.length() < 2) { if (eles.length() < 2) {
continue; continue;
@ -225,11 +225,11 @@ void SidebarWidget::fillRegistersInfo()
ui->regInfoTreeWidget->clear(); ui->regInfoTreeWidget->clear();
QJsonObject jsonRoot = Core()->getRegistersInfo().object(); QJsonObject jsonRoot = Core()->getRegistersInfo().object();
for (QString key : jsonRoot.keys()) { for (const QString &key : jsonRoot.keys()) {
QTreeWidgetItem *tempItem = new QTreeWidgetItem(); QTreeWidgetItem *tempItem = new QTreeWidgetItem();
QString tempString; QString tempString;
tempItem->setText(0, key.toUpper()); tempItem->setText(0, key.toUpper());
for (QJsonValue value : jsonRoot[key].toArray()) { for (const QJsonValue &value : jsonRoot[key].toArray()) {
tempString.append(value.toString() + " "); tempString.append(value.toString() + " ");
} }
tempItem->setText(1, tempString); tempItem->setText(1, tempString);

View File

@ -51,7 +51,7 @@ void StackWidget::setStackGrid()
{ {
QJsonArray stackValues = Core()->getStack().array(); QJsonArray stackValues = Core()->getStack().array();
int i = 0; int i = 0;
for (QJsonValueRef value : stackValues) { for (const QJsonValue &value : stackValues) {
QJsonObject stackItem = value.toObject(); QJsonObject stackItem = value.toObject();
QString addr = RAddressString(stackItem["addr"].toVariant().toULongLong()); QString addr = RAddressString(stackItem["addr"].toVariant().toULongLong());
QString valueStack = RAddressString(stackItem["value"].toVariant().toULongLong()); QString valueStack = RAddressString(stackItem["value"].toVariant().toULongLong());

View File

@ -223,7 +223,7 @@ void StringsWidget::refreshSectionCombo()
combo->clear(); combo->clear();
combo->addItem(tr("(all)")); combo->addItem(tr("(all)"));
for (QString &section : Core()->getSectionList()) { for (const QString &section : Core()->getSectionList()) {
combo->addItem(section, section); combo->addItem(section, section);
} }

View File

@ -241,7 +241,7 @@ void VisualNavbar::mouseMoveEvent(QMouseEvent *event)
RVA VisualNavbar::localXToAddress(double x) RVA VisualNavbar::localXToAddress(double x)
{ {
for (auto x2a : xToAddress) { for (const XToAddress &x2a : xToAddress) {
if ((x2a.x_start <= x) && (x <= x2a.x_end)) { if ((x2a.x_start <= x) && (x <= x2a.x_end)) {
double offset = (x - x2a.x_start) / (x2a.x_end - x2a.x_start); double offset = (x - x2a.x_start) / (x2a.x_end - x2a.x_start);
double size = x2a.address_to - x2a.address_from; double size = x2a.address_to - x2a.address_from;
@ -253,7 +253,7 @@ RVA VisualNavbar::localXToAddress(double x)
double VisualNavbar::addressToLocalX(RVA address) double VisualNavbar::addressToLocalX(RVA address)
{ {
for (auto x2a : xToAddress) { for (const XToAddress &x2a : xToAddress) {
if ((x2a.address_from <= address) && (address < x2a.address_to)) { if ((x2a.address_from <= address) && (address < x2a.address_to)) {
double offset = (double)(address - x2a.address_from) / (double)(x2a.address_to - x2a.address_from); double offset = (double)(address - x2a.address_from) / (double)(x2a.address_to - x2a.address_from);
double size = x2a.x_end - x2a.x_start; double size = x2a.x_end - x2a.x_start;
@ -267,7 +267,7 @@ QList<QString> VisualNavbar::sectionsForAddress(RVA address)
{ {
QList<QString> ret; QList<QString> ret;
QList<SectionDescription> sections = Core()->getAllSections(); QList<SectionDescription> sections = Core()->getAllSections();
for (const auto &section : sections) { for (const SectionDescription &section : sections) {
if (address >= section.vaddr && address < section.vaddr + section.vsize) { if (address >= section.vaddr && address < section.vaddr + section.vsize) {
ret << section.name; ret << section.name;
} }
@ -282,7 +282,7 @@ QString VisualNavbar::toolTipForAddress(RVA address)
if (sections.count()) { if (sections.count()) {
ret += "\nSections: \n"; ret += "\nSections: \n";
bool first = true; bool first = true;
for (auto section : sections) { for (const QString &section : sections) {
if (!first) { if (!first) {
ret += "\n"; ret += "\n";
} else { } else {

View File

@ -48,7 +48,7 @@ QVariant ZignaturesModel::data(const QModelIndex &index, int role) const
"\n Edges: " + RSizeString(zignature.edges) + "\n Edges: " + RSizeString(zignature.edges) +
"\n Ebbs: " + RSizeString(zignature.ebbs) + "\n Ebbs: " + RSizeString(zignature.ebbs) +
"\n\nRefs:\n"); "\n\nRefs:\n");
for (QString ref : zignature.refs) { for (const QString &ref : zignature.refs) {
tmp.append("\n " + ref); tmp.append("\n " + ref);
} }
return tmp; return tmp;