cutter/src/utils/Colors.cpp
2018-03-21 21:33:40 +01:00

105 lines
2.7 KiB
C++

#include "Colors.h"
#include "utils/Configuration.h"
Colors::Colors()
{
}
void Colors::colorizeAssembly(RichTextPainter::List &list, QString opcode, ut64 type_num)
{
RichTextPainter::CustomRichText_t assembly;
assembly.highlight = false;
assembly.flags = RichTextPainter::FlagColor;
// TODO cut opcode and use op["ptr"] to colorate registers and immediate values
assembly.text = opcode;
QString colorName = Colors::getColor(type_num);
assembly.textColor = ConfigColor(colorName);
list.push_back(assembly);
}
// Temporary solution
// Copied from R_API const char* r_print_color_op_type(RPrint *p, ut64 anal_type) {
QString Colors::getColor(ut64 type)
{
switch (type & R_ANAL_OP_TYPE_MASK) {
case R_ANAL_OP_TYPE_NOP:
return "nop";
case R_ANAL_OP_TYPE_ADD:
case R_ANAL_OP_TYPE_SUB:
case R_ANAL_OP_TYPE_MUL:
case R_ANAL_OP_TYPE_DIV:
case R_ANAL_OP_TYPE_MOD:
case R_ANAL_OP_TYPE_LENGTH:
return "math";
case R_ANAL_OP_TYPE_AND:
case R_ANAL_OP_TYPE_OR:
case R_ANAL_OP_TYPE_XOR:
case R_ANAL_OP_TYPE_NOT:
case R_ANAL_OP_TYPE_SHL:
case R_ANAL_OP_TYPE_SAL:
case R_ANAL_OP_TYPE_SAR:
case R_ANAL_OP_TYPE_SHR:
case R_ANAL_OP_TYPE_ROL:
case R_ANAL_OP_TYPE_ROR:
case R_ANAL_OP_TYPE_CPL:
return "bin";
case R_ANAL_OP_TYPE_IO:
return "swi";
case R_ANAL_OP_TYPE_JMP:
case R_ANAL_OP_TYPE_UJMP:
case R_ANAL_OP_TYPE_IJMP:
case R_ANAL_OP_TYPE_RJMP:
case R_ANAL_OP_TYPE_IRJMP:
case R_ANAL_OP_TYPE_MJMP:
return "jmp";
case R_ANAL_OP_TYPE_CJMP:
case R_ANAL_OP_TYPE_UCJMP:
case R_ANAL_OP_TYPE_SWITCH:
return "cjmp";
case R_ANAL_OP_TYPE_CMP:
case R_ANAL_OP_TYPE_ACMP:
return "cmp";
case R_ANAL_OP_TYPE_UCALL:
case R_ANAL_OP_TYPE_ICALL:
case R_ANAL_OP_TYPE_RCALL:
case R_ANAL_OP_TYPE_IRCALL:
case R_ANAL_OP_TYPE_UCCALL:
case R_ANAL_OP_TYPE_CALL:
case R_ANAL_OP_TYPE_CCALL:
return "call";
case R_ANAL_OP_TYPE_NEW:
case R_ANAL_OP_TYPE_SWI:
return "swi";
case R_ANAL_OP_TYPE_ILL:
case R_ANAL_OP_TYPE_TRAP:
return "trap";
case R_ANAL_OP_TYPE_CRET:
case R_ANAL_OP_TYPE_RET:
return "ret";
case R_ANAL_OP_TYPE_CAST:
case R_ANAL_OP_TYPE_MOV:
case R_ANAL_OP_TYPE_LEA:
case R_ANAL_OP_TYPE_CMOV: // TODO: add cmov cathegory?
return "mov";
case R_ANAL_OP_TYPE_PUSH:
case R_ANAL_OP_TYPE_UPUSH:
case R_ANAL_OP_TYPE_LOAD:
return "push";
case R_ANAL_OP_TYPE_POP:
case R_ANAL_OP_TYPE_STORE:
return "pop";
case R_ANAL_OP_TYPE_CRYPTO:
return "crypto";
case R_ANAL_OP_TYPE_NULL:
return "other";
case R_ANAL_OP_TYPE_UNK:
default:
return "invalid";
}
}