GUI: rename CapstoneTokenizer to ZydisTokenizer
This commit is contained in:
parent
c7107374d2
commit
a3b5812908
|
@ -134,7 +134,7 @@ void Disassembly::updateColors()
|
|||
mConditionalTruePen = QPen(mConditionalJumpLineTrueColor);
|
||||
mConditionalFalsePen = QPen(mConditionalJumpLineFalseColor);
|
||||
|
||||
CapstoneTokenizer::UpdateColors();
|
||||
ZydisTokenizer::UpdateColors();
|
||||
mDisasm->UpdateConfig();
|
||||
}
|
||||
|
||||
|
@ -496,9 +496,9 @@ QString Disassembly::paintContent(QPainter* painter, dsint rowBase, int rowOffse
|
|||
RichTextPainter::List richText;
|
||||
auto & token = mInstBuffer[rowOffset].tokens;
|
||||
if(mHighlightToken.text.length())
|
||||
CapstoneTokenizer::TokenToRichText(token, richText, &mHighlightToken);
|
||||
ZydisTokenizer::TokenToRichText(token, richText, &mHighlightToken);
|
||||
else
|
||||
CapstoneTokenizer::TokenToRichText(token, richText, 0);
|
||||
ZydisTokenizer::TokenToRichText(token, richText, 0);
|
||||
int xinc = 4;
|
||||
RichTextPainter::paintRichText(painter, x + loopsize, y, getColumnWidth(col) - loopsize, getRowHeight(), xinc, richText, mFontMetrics);
|
||||
token.x = x + loopsize + xinc;
|
||||
|
@ -578,9 +578,9 @@ QString Disassembly::paintContent(QPainter* painter, dsint rowBase, int rowOffse
|
|||
{
|
||||
char brief[MAX_STRING_SIZE] = "";
|
||||
QString mnem;
|
||||
for(const CapstoneTokenizer::SingleToken & token : mInstBuffer.at(rowOffset).tokens.tokens)
|
||||
for(const ZydisTokenizer::SingleToken & token : mInstBuffer.at(rowOffset).tokens.tokens)
|
||||
{
|
||||
if(token.type != CapstoneTokenizer::TokenType::Space && token.type != CapstoneTokenizer::TokenType::Prefix)
|
||||
if(token.type != ZydisTokenizer::TokenType::Space && token.type != ZydisTokenizer::TokenType::Prefix)
|
||||
{
|
||||
mnem = token.text;
|
||||
break;
|
||||
|
@ -690,9 +690,9 @@ duint Disassembly::getDisassemblyPopupAddress(int mousex, int mousey)
|
|||
int rowOffset = getIndexOffsetFromY(transY(mousey));
|
||||
if(rowOffset < mInstBuffer.size())
|
||||
{
|
||||
CapstoneTokenizer::SingleToken token;
|
||||
ZydisTokenizer::SingleToken token;
|
||||
auto & instruction = mInstBuffer.at(rowOffset);
|
||||
if(CapstoneTokenizer::TokenFromX(instruction.tokens, token, mousex, mFontMetrics))
|
||||
if(ZydisTokenizer::TokenFromX(instruction.tokens, token, event->x(), mFontMetrics))
|
||||
{
|
||||
duint addr = token.value.value;
|
||||
bool isCodePage = DbgFunctions()->MemIsCodePage(addr, false);
|
||||
|
@ -729,30 +729,30 @@ void Disassembly::mousePressEvent(QMouseEvent* event)
|
|||
int rowOffset = getIndexOffsetFromY(transY(event->y()));
|
||||
if(rowOffset < mInstBuffer.size())
|
||||
{
|
||||
CapstoneTokenizer::SingleToken token;
|
||||
if(CapstoneTokenizer::TokenFromX(mInstBuffer.at(rowOffset).tokens, token, event->x(), mFontMetrics))
|
||||
ZydisTokenizer::SingleToken token;
|
||||
if(ZydisTokenizer::TokenFromX(mInstBuffer.at(rowOffset).tokens, token, event->x(), mFontMetrics))
|
||||
{
|
||||
if(CapstoneTokenizer::IsHighlightableToken(token))
|
||||
if(ZydisTokenizer::IsHighlightableToken(token))
|
||||
{
|
||||
if(!CapstoneTokenizer::TokenEquals(&token, &mHighlightToken) || event->button() == Qt::RightButton)
|
||||
if(!ZydisTokenizer::TokenEquals(&token, &mHighlightToken) || event->button() == Qt::RightButton)
|
||||
mHighlightToken = token;
|
||||
else
|
||||
mHighlightToken = CapstoneTokenizer::SingleToken();
|
||||
mHighlightToken = ZydisTokenizer::SingleToken();
|
||||
}
|
||||
else if(!mPermanentHighlightingMode)
|
||||
{
|
||||
mHighlightToken = CapstoneTokenizer::SingleToken();
|
||||
mHighlightToken = ZydisTokenizer::SingleToken();
|
||||
}
|
||||
}
|
||||
else if(!mPermanentHighlightingMode)
|
||||
{
|
||||
mHighlightToken = CapstoneTokenizer::SingleToken();
|
||||
mHighlightToken = ZydisTokenizer::SingleToken();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(!mPermanentHighlightingMode)
|
||||
{
|
||||
mHighlightToken = CapstoneTokenizer::SingleToken();
|
||||
mHighlightToken = ZydisTokenizer::SingleToken();
|
||||
}
|
||||
if(!mPermanentHighlightingMode)
|
||||
return;
|
||||
|
@ -1976,7 +1976,7 @@ void Disassembly::disassembleAt(dsint parVA, dsint parCIP)
|
|||
void Disassembly::disassembleClear()
|
||||
{
|
||||
mHighlightingMode = false;
|
||||
mHighlightToken = CapstoneTokenizer::SingleToken();
|
||||
mHighlightToken = ZydisTokenizer::SingleToken();
|
||||
historyClear();
|
||||
mMemPage->setAttributes(0, 0);
|
||||
mDisasm->getEncodeMap()->setMemoryRegion(0);
|
||||
|
@ -2134,7 +2134,7 @@ void Disassembly::unfold(dsint rva)
|
|||
}
|
||||
}
|
||||
|
||||
bool Disassembly::hightlightToken(const CapstoneTokenizer::SingleToken & token)
|
||||
bool Disassembly::hightlightToken(const ZydisTokenizer::SingleToken & token)
|
||||
{
|
||||
mHighlightToken = token;
|
||||
mHighlightingMode = false;
|
||||
|
|
|
@ -103,7 +103,7 @@ public:
|
|||
void setCodeFoldingManager(CodeFoldingHelper* CodeFoldingManager);
|
||||
duint getDisassemblyPopupAddress(int mousex, int mousey) override;
|
||||
void unfold(dsint rva);
|
||||
bool hightlightToken(const CapstoneTokenizer::SingleToken & token);
|
||||
bool hightlightToken(const ZydisTokenizer::SingleToken & token);
|
||||
bool isHighlightMode() const;
|
||||
|
||||
signals:
|
||||
|
@ -247,7 +247,7 @@ protected:
|
|||
bool mShowMnemonicBrief;
|
||||
XREF_INFO mXrefInfo;
|
||||
CodeFoldingHelper* mCodeFoldingManager;
|
||||
CapstoneTokenizer::SingleToken mHighlightToken;
|
||||
ZydisTokenizer::SingleToken mHighlightToken;
|
||||
bool mPermanentHighlightingMode;
|
||||
bool mNoCurrentModuleText;
|
||||
};
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
QBeaEngine::QBeaEngine(int maxModuleSize)
|
||||
: _tokenizer(maxModuleSize), mCodeFoldingManager(nullptr), _bLongDataInst(false)
|
||||
{
|
||||
CapstoneTokenizer::UpdateColors();
|
||||
ZydisTokenizer::UpdateColors();
|
||||
UpdateDataInstructionMap();
|
||||
this->mEncodeMap = new EncodeMap();
|
||||
}
|
||||
|
@ -190,11 +190,11 @@ Instruction_t QBeaEngine::DisassembleAt(byte_t* data, duint size, duint origBase
|
|||
return DecodeDataAt(data, size, origBase, origInstRVA, type);
|
||||
}
|
||||
//tokenize
|
||||
CapstoneTokenizer::InstructionToken cap;
|
||||
ZydisTokenizer::InstructionToken cap;
|
||||
_tokenizer.Tokenize(origBase + origInstRVA, data, size, cap);
|
||||
int len = _tokenizer.Size();
|
||||
|
||||
const auto & cp = _tokenizer.GetCapstone();
|
||||
const auto & cp = _tokenizer.GetZydis();
|
||||
bool success = cp.Success();
|
||||
|
||||
|
||||
|
@ -270,7 +270,7 @@ Instruction_t QBeaEngine::DisassembleAt(byte_t* data, duint size, duint origBase
|
|||
Instruction_t QBeaEngine::DecodeDataAt(byte_t* data, duint size, duint origBase, duint origInstRVA, ENCODETYPE type)
|
||||
{
|
||||
//tokenize
|
||||
CapstoneTokenizer::InstructionToken cap;
|
||||
ZydisTokenizer::InstructionToken cap;
|
||||
|
||||
auto infoIter = dataInstMap.find(type);
|
||||
if(infoIter == dataInstMap.end())
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include <QString>
|
||||
#include <vector>
|
||||
#include "capstone_gui.h"
|
||||
#include "ZydisTokenizer.h"
|
||||
|
||||
class EncodeMap;
|
||||
class CodeFoldingHelper;
|
||||
|
@ -33,7 +33,7 @@ struct Instruction_t
|
|||
int length;
|
||||
duint branchDestination;
|
||||
BranchType branchType;
|
||||
CapstoneTokenizer::InstructionToken tokens;
|
||||
ZydisTokenizer::InstructionToken tokens;
|
||||
std::vector<std::pair<const char*, uint8_t>> regsReferenced;
|
||||
};
|
||||
|
||||
|
@ -63,7 +63,7 @@ private:
|
|||
};
|
||||
|
||||
void UpdateDataInstructionMap();
|
||||
CapstoneTokenizer _tokenizer;
|
||||
ZydisTokenizer _tokenizer;
|
||||
QHash<ENCODETYPE, DataInstructionInfo> dataInstMap;
|
||||
bool _bLongDataInst;
|
||||
EncodeMap* mEncodeMap;
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#include "capstone_gui.h"
|
||||
#include "ZydisTokenizer.h"
|
||||
#include "Configuration.h"
|
||||
#include "StringUtil.h"
|
||||
#include "CachedFontMetrics.h"
|
||||
|
||||
CapstoneTokenizer::CapstoneTokenizer(int maxModuleLength)
|
||||
ZydisTokenizer::ZydisTokenizer(int maxModuleLength)
|
||||
: _maxModuleLength(maxModuleLength),
|
||||
_success(false),
|
||||
isNop(false),
|
||||
|
@ -12,16 +12,16 @@ CapstoneTokenizer::CapstoneTokenizer(int maxModuleLength)
|
|||
SetConfig(false, false, false, false, false, false, false, false, false);
|
||||
}
|
||||
|
||||
static CapstoneTokenizer::TokenColor colorNamesMap[CapstoneTokenizer::TokenType::Last];
|
||||
QHash<QString, int> CapstoneTokenizer::stringPoolMap;
|
||||
int CapstoneTokenizer::poolId = 0;
|
||||
static ZydisTokenizer::TokenColor colorNamesMap[ZydisTokenizer::TokenType::Last];
|
||||
QHash<QString, int> ZydisTokenizer::stringPoolMap;
|
||||
int ZydisTokenizer::poolId = 0;
|
||||
|
||||
void CapstoneTokenizer::addColorName(TokenType type, QString color, QString backgroundColor)
|
||||
void ZydisTokenizer::addColorName(TokenType type, QString color, QString backgroundColor)
|
||||
{
|
||||
colorNamesMap[int(type)] = TokenColor(color, backgroundColor);
|
||||
}
|
||||
|
||||
void CapstoneTokenizer::addStringsToPool(const QString & strings)
|
||||
void ZydisTokenizer::addStringsToPool(const QString & strings)
|
||||
{
|
||||
QStringList stringList = strings.split(' ', QString::SkipEmptyParts);
|
||||
for(const QString & string : stringList)
|
||||
|
@ -29,7 +29,7 @@ void CapstoneTokenizer::addStringsToPool(const QString & strings)
|
|||
poolId++;
|
||||
}
|
||||
|
||||
void CapstoneTokenizer::UpdateColors()
|
||||
void ZydisTokenizer::UpdateColors()
|
||||
{
|
||||
//filling
|
||||
addColorName(TokenType::Comma, "InstructionCommaColor", "InstructionCommaBackgroundColor");
|
||||
|
@ -70,7 +70,7 @@ void CapstoneTokenizer::UpdateColors()
|
|||
addColorName(TokenType::ZmmRegister, "InstructionZmmRegisterColor", "InstructionZmmRegisterBackgroundColor");
|
||||
}
|
||||
|
||||
void CapstoneTokenizer::UpdateStringPool()
|
||||
void ZydisTokenizer::UpdateStringPool()
|
||||
{
|
||||
poolId = 0;
|
||||
stringPoolMap.clear();
|
||||
|
@ -109,7 +109,7 @@ void CapstoneTokenizer::UpdateStringPool()
|
|||
addStringsToPool("xmm15 ymm15");
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::Tokenize(duint addr, const unsigned char* data, int datasize, InstructionToken & instruction)
|
||||
bool ZydisTokenizer::Tokenize(duint addr, const unsigned char* data, int datasize, InstructionToken & instruction)
|
||||
{
|
||||
_inst = InstructionToken();
|
||||
|
||||
|
@ -154,7 +154,7 @@ bool CapstoneTokenizer::Tokenize(duint addr, const unsigned char* data, int data
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::TokenizeData(const QString & datatype, const QString & data, InstructionToken & instruction)
|
||||
bool ZydisTokenizer::TokenizeData(const QString & datatype, const QString & data, InstructionToken & instruction)
|
||||
{
|
||||
_inst = InstructionToken();
|
||||
isNop = false;
|
||||
|
@ -169,7 +169,7 @@ bool CapstoneTokenizer::TokenizeData(const QString & datatype, const QString & d
|
|||
return true;
|
||||
}
|
||||
|
||||
void CapstoneTokenizer::UpdateConfig()
|
||||
void ZydisTokenizer::UpdateConfig()
|
||||
{
|
||||
SetConfig(ConfigBool("Disassembler", "Uppercase"),
|
||||
ConfigBool("Disassembler", "TabbedMnemonic"),
|
||||
|
@ -184,7 +184,7 @@ void CapstoneTokenizer::UpdateConfig()
|
|||
UpdateStringPool();
|
||||
}
|
||||
|
||||
void CapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bHidePointerSizes, bool bHideNormalSegments, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues)
|
||||
void ZydisTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bHidePointerSizes, bool bHideNormalSegments, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues)
|
||||
{
|
||||
_bUppercase = bUppercase;
|
||||
_bTabbedMnemonic = bTabbedMnemonic;
|
||||
|
@ -197,17 +197,17 @@ void CapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bA
|
|||
_b0xPrefixValues = b0xPrefixValues;
|
||||
}
|
||||
|
||||
int CapstoneTokenizer::Size() const
|
||||
int ZydisTokenizer::Size() const
|
||||
{
|
||||
return _success ? _cp.Size() : 1;
|
||||
}
|
||||
|
||||
const Zydis & CapstoneTokenizer::GetCapstone() const
|
||||
const Zydis & ZydisTokenizer::GetZydis() const
|
||||
{
|
||||
return _cp;
|
||||
}
|
||||
|
||||
void CapstoneTokenizer::TokenToRichText(const InstructionToken & instr, RichTextPainter::List & richTextList, const SingleToken* highlightToken)
|
||||
void ZydisTokenizer::TokenToRichText(const InstructionToken & instr, RichTextPainter::List & richTextList, const SingleToken* highlightToken)
|
||||
{
|
||||
QColor highlightColor = ConfigColor("InstructionHighlightColor");
|
||||
for(const auto & token : instr.tokens)
|
||||
|
@ -228,7 +228,7 @@ void CapstoneTokenizer::TokenToRichText(const InstructionToken & instr, RichText
|
|||
}
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::TokenFromX(const InstructionToken & instr, SingleToken & token, int x, CachedFontMetrics* fontMetrics)
|
||||
bool ZydisTokenizer::TokenFromX(const InstructionToken & instr, SingleToken & token, int x, CachedFontMetrics* fontMetrics)
|
||||
{
|
||||
if(x < instr.x) //before the first token
|
||||
return false;
|
||||
|
@ -248,7 +248,7 @@ bool CapstoneTokenizer::TokenFromX(const InstructionToken & instr, SingleToken &
|
|||
return false; //not found
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::IsHighlightableToken(const SingleToken & token)
|
||||
bool ZydisTokenizer::IsHighlightableToken(const SingleToken & token)
|
||||
{
|
||||
switch(token.type)
|
||||
{
|
||||
|
@ -266,7 +266,7 @@ bool CapstoneTokenizer::IsHighlightableToken(const SingleToken & token)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::tokenTextPoolEquals(const QString & a, const QString & b)
|
||||
bool ZydisTokenizer::tokenTextPoolEquals(const QString & a, const QString & b)
|
||||
{
|
||||
if(a.compare(b, Qt::CaseInsensitive) == 0)
|
||||
return true;
|
||||
|
@ -277,7 +277,7 @@ bool CapstoneTokenizer::tokenTextPoolEquals(const QString & a, const QString & b
|
|||
return found1.value() == found2.value();
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::TokenEquals(const SingleToken* a, const SingleToken* b, bool ignoreSize)
|
||||
bool ZydisTokenizer::TokenEquals(const SingleToken* a, const SingleToken* b, bool ignoreSize)
|
||||
{
|
||||
if(!a || !b)
|
||||
return false;
|
||||
|
@ -291,7 +291,7 @@ bool CapstoneTokenizer::TokenEquals(const SingleToken* a, const SingleToken* b,
|
|||
return tokenTextPoolEquals(a->text, b->text);
|
||||
}
|
||||
|
||||
void CapstoneTokenizer::addToken(TokenType type, QString text, const TokenValue & value)
|
||||
void ZydisTokenizer::addToken(TokenType type, QString text, const TokenValue & value)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
|
@ -308,12 +308,12 @@ void CapstoneTokenizer::addToken(TokenType type, QString text, const TokenValue
|
|||
_inst.tokens.push_back(SingleToken(isNop ? TokenType::MnemonicNop : type, text, value));
|
||||
}
|
||||
|
||||
void CapstoneTokenizer::addToken(TokenType type, const QString & text)
|
||||
void ZydisTokenizer::addToken(TokenType type, const QString & text)
|
||||
{
|
||||
addToken(type, text, TokenValue());
|
||||
}
|
||||
|
||||
void CapstoneTokenizer::addMemoryOperator(char operatorText)
|
||||
void ZydisTokenizer::addMemoryOperator(char operatorText)
|
||||
{
|
||||
if(_bMemorySpaces)
|
||||
addToken(TokenType::MemoryOperatorSpace, " ");
|
||||
|
@ -324,7 +324,7 @@ void CapstoneTokenizer::addMemoryOperator(char operatorText)
|
|||
addToken(TokenType::MemoryOperatorSpace, " ");
|
||||
}
|
||||
|
||||
QString CapstoneTokenizer::printValue(const TokenValue & value, bool expandModule, int maxModuleLength) const
|
||||
QString ZydisTokenizer::printValue(const TokenValue & value, bool expandModule, int maxModuleLength) const
|
||||
{
|
||||
QString labelText;
|
||||
char label_[MAX_LABEL_SIZE] = "";
|
||||
|
@ -337,7 +337,7 @@ QString CapstoneTokenizer::printValue(const TokenValue & value, bool expandModul
|
|||
if(_bNoCurrentModuleText)
|
||||
{
|
||||
duint size, base;
|
||||
base = DbgMemFindBaseAddr(this->GetCapstone().Address(), &size);
|
||||
base = DbgMemFindBaseAddr(this->GetZydis().Address(), &size);
|
||||
if(addr >= base && addr < base + size)
|
||||
bHasModule = false;
|
||||
else
|
||||
|
@ -365,7 +365,7 @@ QString CapstoneTokenizer::printValue(const TokenValue & value, bool expandModul
|
|||
return finalText;
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::tokenizePrefix()
|
||||
bool ZydisTokenizer::tokenizePrefix()
|
||||
{
|
||||
//TODO: what happens with multiple prefixes?
|
||||
bool hasPrefix = true;
|
||||
|
@ -399,7 +399,7 @@ bool CapstoneTokenizer::tokenizePrefix()
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::tokenizeMnemonic()
|
||||
bool ZydisTokenizer::tokenizeMnemonic()
|
||||
{
|
||||
QString mnemonic = QString(_cp.Mnemonic().c_str());
|
||||
_mnemonicType = TokenType::MnemonicNormal;
|
||||
|
@ -427,7 +427,7 @@ bool CapstoneTokenizer::tokenizeMnemonic()
|
|||
return tokenizeMnemonic(_mnemonicType, mnemonic);
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::tokenizeMnemonic(TokenType type, const QString & mnemonic)
|
||||
bool ZydisTokenizer::tokenizeMnemonic(TokenType type, const QString & mnemonic)
|
||||
{
|
||||
addToken(type, mnemonic);
|
||||
if(_bTabbedMnemonic)
|
||||
|
@ -443,7 +443,7 @@ bool CapstoneTokenizer::tokenizeMnemonic(TokenType type, const QString & mnemoni
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::tokenizeOperand(const ZydisDecodedOperand & op)
|
||||
bool ZydisTokenizer::tokenizeOperand(const ZydisDecodedOperand & op)
|
||||
{
|
||||
switch(op.type)
|
||||
{
|
||||
|
@ -460,7 +460,7 @@ bool CapstoneTokenizer::tokenizeOperand(const ZydisDecodedOperand & op)
|
|||
}
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::tokenizeRegOperand(const ZydisDecodedOperand & op)
|
||||
bool ZydisTokenizer::tokenizeRegOperand(const ZydisDecodedOperand & op)
|
||||
{
|
||||
auto registerType = TokenType::GeneralRegister;
|
||||
auto reg = op.reg;
|
||||
|
@ -492,7 +492,7 @@ bool CapstoneTokenizer::tokenizeRegOperand(const ZydisDecodedOperand & op)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::tokenizeImmOperand(const ZydisDecodedOperand & op)
|
||||
bool ZydisTokenizer::tokenizeImmOperand(const ZydisDecodedOperand & op)
|
||||
{
|
||||
duint value;
|
||||
TokenType valueType;
|
||||
|
@ -513,7 +513,7 @@ bool CapstoneTokenizer::tokenizeImmOperand(const ZydisDecodedOperand & op)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::tokenizeMemOperand(const ZydisDecodedOperand & op)
|
||||
bool ZydisTokenizer::tokenizeMemOperand(const ZydisDecodedOperand & op)
|
||||
{
|
||||
auto opsize = op.size / 8;
|
||||
|
||||
|
@ -608,7 +608,7 @@ bool CapstoneTokenizer::tokenizeMemOperand(const ZydisDecodedOperand & op)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::tokenizePtrOperand(const ZydisDecodedOperand & op)
|
||||
bool ZydisTokenizer::tokenizePtrOperand(const ZydisDecodedOperand & op)
|
||||
{
|
||||
auto segValue = TokenValue(2, op.ptr.segment);
|
||||
addToken(TokenType::MemorySegment, printValue(segValue, true, _maxModuleLength), segValue);
|
||||
|
@ -621,7 +621,7 @@ bool CapstoneTokenizer::tokenizePtrOperand(const ZydisDecodedOperand & op)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CapstoneTokenizer::tokenizeInvalidOperand(const ZydisDecodedOperand & op)
|
||||
bool ZydisTokenizer::tokenizeInvalidOperand(const ZydisDecodedOperand & op)
|
||||
{
|
||||
addToken(TokenType::MnemonicUnusual, "???");
|
||||
return true;
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef _CAPSTONE_GUI_H
|
||||
#define _CAPSTONE_GUI_H
|
||||
#ifndef ZYDISTOKENIZER_H
|
||||
#define ZYDISTOKENIZER_H
|
||||
|
||||
#include <zydis_wrapper.h>
|
||||
#include "RichTextPainter.h"
|
||||
|
@ -8,7 +8,7 @@
|
|||
#include <QHash>
|
||||
#include <QtCore>
|
||||
|
||||
class CapstoneTokenizer
|
||||
class ZydisTokenizer
|
||||
{
|
||||
public:
|
||||
enum class TokenType
|
||||
|
@ -153,13 +153,13 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
CapstoneTokenizer(int maxModuleLength);
|
||||
ZydisTokenizer(int maxModuleLength);
|
||||
bool Tokenize(duint addr, const unsigned char* data, int datasize, InstructionToken & instruction);
|
||||
bool TokenizeData(const QString & datatype, const QString & data, InstructionToken & instruction);
|
||||
void UpdateConfig();
|
||||
void SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bHidePointerSizes, bool bHideNormalSegments, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues);
|
||||
int Size() const;
|
||||
const Zydis & GetCapstone() const;
|
||||
const Zydis & GetZydis() const;
|
||||
|
||||
static void UpdateColors();
|
||||
static void UpdateStringPool();
|
||||
|
@ -207,4 +207,4 @@ private:
|
|||
bool tokenizeInvalidOperand(const ZydisDecodedOperand & op);
|
||||
};
|
||||
|
||||
#endif //_CAPSTONE_GUI_H
|
||||
#endif // ZYDISTOKENIZER_H
|
|
@ -282,7 +282,7 @@ void BreakpointsView::updateBreakpointsSlot()
|
|||
if(DbgMemRead(bp.addr, data, sizeof(data)))
|
||||
{
|
||||
auto instr = mDisasm->DisassembleAt(data, sizeof(data), 0, bp.addr);
|
||||
CapstoneTokenizer::TokenToRichText(instr.tokens, richDisasm, 0);
|
||||
ZydisTokenizer::TokenToRichText(instr.tokens, richDisasm, 0);
|
||||
for(auto & token : richDisasm)
|
||||
result += token.text;
|
||||
}
|
||||
|
|
|
@ -1507,9 +1507,9 @@ void CPUDisassembly::pushSelectionInto(bool copyBytes, QTextStream & stream, QTe
|
|||
{
|
||||
RichTextPainter::List richText;
|
||||
if(mHighlightToken.text.length())
|
||||
CapstoneTokenizer::TokenToRichText(inst.tokens, richText, &mHighlightToken);
|
||||
ZydisTokenizer::TokenToRichText(inst.tokens, richText, &mHighlightToken);
|
||||
else
|
||||
CapstoneTokenizer::TokenToRichText(inst.tokens, richText, 0);
|
||||
ZydisTokenizer::TokenToRichText(inst.tokens, richText, 0);
|
||||
RichTextPainter::htmlRichText(richText, htmlDisassembly, disassembly);
|
||||
}
|
||||
else
|
||||
|
@ -1678,9 +1678,9 @@ void CPUDisassembly::copyDisassemblySlot()
|
|||
}
|
||||
RichTextPainter::List richText;
|
||||
if(mHighlightToken.text.length())
|
||||
CapstoneTokenizer::TokenToRichText(inst.tokens, richText, &mHighlightToken);
|
||||
ZydisTokenizer::TokenToRichText(inst.tokens, richText, &mHighlightToken);
|
||||
else
|
||||
CapstoneTokenizer::TokenToRichText(inst.tokens, richText, 0);
|
||||
ZydisTokenizer::TokenToRichText(inst.tokens, richText, 0);
|
||||
RichTextPainter::htmlRichText(richText, clipboardHtml, clipboard);
|
||||
return true;
|
||||
});
|
||||
|
@ -2031,7 +2031,7 @@ void CPUDisassembly::copyTokenValueSlot()
|
|||
|
||||
bool CPUDisassembly::getTokenValueText(QString & text)
|
||||
{
|
||||
if(mHighlightToken.type <= CapstoneTokenizer::TokenType::MnemonicUnusual)
|
||||
if(mHighlightToken.type <= ZydisTokenizer::TokenType::MnemonicUnusual)
|
||||
return false;
|
||||
duint value = mHighlightToken.value.value;
|
||||
if(!mHighlightToken.value.size && !DbgFunctions()->ValFromString(mHighlightToken.text.toUtf8().constData(), &value))
|
||||
|
|
|
@ -1529,7 +1529,7 @@ void DisassemblerGraphView::loadCurrentGraph()
|
|||
currentBlockMap[addr] = block.entry;
|
||||
Instruction_t instrTok = disasm.DisassembleAt((byte_t*)nodeInstr.data, sizeof(nodeInstr.data), 0, addr, false);
|
||||
RichTextPainter::List richText;
|
||||
CapstoneTokenizer::TokenToRichText(instrTok.tokens, richText, 0);
|
||||
ZydisTokenizer::TokenToRichText(instrTok.tokens, richText, 0);
|
||||
|
||||
// add rva to node instruction text
|
||||
if(showGraphRva)
|
||||
|
|
|
@ -143,7 +143,7 @@ void DisassemblyPopup::setAddress(duint Address)
|
|||
for(auto & instruction : instBuffer)
|
||||
{
|
||||
RichTextPainter::List richText;
|
||||
CapstoneTokenizer::TokenToRichText(instruction.tokens, richText, nullptr);
|
||||
ZydisTokenizer::TokenToRichText(instruction.tokens, richText, nullptr);
|
||||
// Calculate width
|
||||
int currentInstructionWidth = 0;
|
||||
for(auto & token : richText)
|
||||
|
|
|
@ -1455,15 +1455,15 @@ void RegistersView::mousePressEvent(QMouseEvent* event)
|
|||
if(CPUDisassemblyView->isHighlightMode())
|
||||
{
|
||||
if(mGPR.contains(r) && r != REGISTER_NAME::EFLAGS)
|
||||
CPUDisassemblyView->hightlightToken(CapstoneTokenizer::SingleToken(CapstoneTokenizer::TokenType::GeneralRegister, mRegisterMapping.constFind(r).value()));
|
||||
CPUDisassemblyView->hightlightToken(ZydisTokenizer::SingleToken(ZydisTokenizer::TokenType::GeneralRegister, mRegisterMapping.constFind(r).value()));
|
||||
else if(mFPUMMX.contains(r))
|
||||
CPUDisassemblyView->hightlightToken(CapstoneTokenizer::SingleToken(CapstoneTokenizer::TokenType::MmxRegister, mRegisterMapping.constFind(r).value()));
|
||||
CPUDisassemblyView->hightlightToken(ZydisTokenizer::SingleToken(ZydisTokenizer::TokenType::MmxRegister, mRegisterMapping.constFind(r).value()));
|
||||
else if(mFPUXMM.contains(r))
|
||||
CPUDisassemblyView->hightlightToken(CapstoneTokenizer::SingleToken(CapstoneTokenizer::TokenType::XmmRegister, mRegisterMapping.constFind(r).value()));
|
||||
CPUDisassemblyView->hightlightToken(ZydisTokenizer::SingleToken(ZydisTokenizer::TokenType::XmmRegister, mRegisterMapping.constFind(r).value()));
|
||||
else if(mFPUYMM.contains(r))
|
||||
CPUDisassemblyView->hightlightToken(CapstoneTokenizer::SingleToken(CapstoneTokenizer::TokenType::YmmRegister, mRegisterMapping.constFind(r).value()));
|
||||
CPUDisassemblyView->hightlightToken(ZydisTokenizer::SingleToken(ZydisTokenizer::TokenType::YmmRegister, mRegisterMapping.constFind(r).value()));
|
||||
else if(mSEGMENTREGISTER.contains(r))
|
||||
CPUDisassemblyView->hightlightToken(CapstoneTokenizer::SingleToken(CapstoneTokenizer::TokenType::MemorySegment, mRegisterMapping.constFind(r).value()));
|
||||
CPUDisassemblyView->hightlightToken(ZydisTokenizer::SingleToken(ZydisTokenizer::TokenType::MemorySegment, mRegisterMapping.constFind(r).value()));
|
||||
else
|
||||
mSelected = r;
|
||||
}
|
||||
|
@ -2135,7 +2135,7 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value)
|
|||
uint8_t highlight = 0;
|
||||
for(const auto & reg : mHighlightRegs)
|
||||
{
|
||||
if(!CapstoneTokenizer::tokenTextPoolEquals(regName, reg.first))
|
||||
if(!ZydisTokenizer::tokenTextPoolEquals(regName, reg.first))
|
||||
continue;
|
||||
highlight = reg.second;
|
||||
break;
|
||||
|
@ -2631,15 +2631,15 @@ void RegistersView::onHighlightSlot()
|
|||
{
|
||||
Disassembly* CPUDisassemblyView = mParent->getDisasmWidget();
|
||||
if(mGPR.contains(mSelected) && mSelected != REGISTER_NAME::EFLAGS)
|
||||
CPUDisassemblyView->hightlightToken(CapstoneTokenizer::SingleToken(CapstoneTokenizer::TokenType::GeneralRegister, mRegisterMapping.constFind(mSelected).value()));
|
||||
CPUDisassemblyView->hightlightToken(ZydisTokenizer::SingleToken(ZydisTokenizer::TokenType::GeneralRegister, mRegisterMapping.constFind(mSelected).value()));
|
||||
else if(mSEGMENTREGISTER.contains(mSelected))
|
||||
CPUDisassemblyView->hightlightToken(CapstoneTokenizer::SingleToken(CapstoneTokenizer::TokenType::MemorySegment, mRegisterMapping.constFind(mSelected).value()));
|
||||
CPUDisassemblyView->hightlightToken(ZydisTokenizer::SingleToken(ZydisTokenizer::TokenType::MemorySegment, mRegisterMapping.constFind(mSelected).value()));
|
||||
else if(mFPUMMX.contains(mSelected))
|
||||
CPUDisassemblyView->hightlightToken(CapstoneTokenizer::SingleToken(CapstoneTokenizer::TokenType::MmxRegister, mRegisterMapping.constFind(mSelected).value()));
|
||||
CPUDisassemblyView->hightlightToken(ZydisTokenizer::SingleToken(ZydisTokenizer::TokenType::MmxRegister, mRegisterMapping.constFind(mSelected).value()));
|
||||
else if(mFPUXMM.contains(mSelected))
|
||||
CPUDisassemblyView->hightlightToken(CapstoneTokenizer::SingleToken(CapstoneTokenizer::TokenType::XmmRegister, mRegisterMapping.constFind(mSelected).value()));
|
||||
CPUDisassemblyView->hightlightToken(ZydisTokenizer::SingleToken(ZydisTokenizer::TokenType::XmmRegister, mRegisterMapping.constFind(mSelected).value()));
|
||||
else if(mFPUYMM.contains(mSelected))
|
||||
CPUDisassemblyView->hightlightToken(CapstoneTokenizer::SingleToken(CapstoneTokenizer::TokenType::YmmRegister, mRegisterMapping.constFind(mSelected).value()));
|
||||
CPUDisassemblyView->hightlightToken(ZydisTokenizer::SingleToken(ZydisTokenizer::TokenType::YmmRegister, mRegisterMapping.constFind(mSelected).value()));
|
||||
CPUDisassemblyView->reloadData();
|
||||
}
|
||||
|
||||
|
|
|
@ -339,9 +339,9 @@ NotDebuggingLabel:
|
|||
Instruction_t inst = mDisasm->DisassembleAt(opcodes, opcodeSize, 0, mTraceFile->Registers(index).regcontext.cip, false);
|
||||
|
||||
if(mHighlightToken.text.length())
|
||||
CapstoneTokenizer::TokenToRichText(inst.tokens, richText, &mHighlightToken);
|
||||
ZydisTokenizer::TokenToRichText(inst.tokens, richText, &mHighlightToken);
|
||||
else
|
||||
CapstoneTokenizer::TokenToRichText(inst.tokens, richText, 0);
|
||||
ZydisTokenizer::TokenToRichText(inst.tokens, richText, 0);
|
||||
RichTextPainter::paintRichText(painter, x + 0, y, getColumnWidth(col) - 0, getRowHeight(), 4, richText, mFontMetrics);
|
||||
return "";
|
||||
}
|
||||
|
@ -608,29 +608,29 @@ void TraceBrowser::mousePressEvent(QMouseEvent* event)
|
|||
int opcodeSize;
|
||||
mTraceFile->OpCode(index, opcode, &opcodeSize);
|
||||
inst = mDisasm->DisassembleAt(opcode, opcodeSize, mTraceFile->Registers(index).regcontext.cip, 0);
|
||||
CapstoneTokenizer::SingleToken token;
|
||||
if(CapstoneTokenizer::TokenFromX(inst.tokens, token, event->x() - getColumnPosition(3), mFontMetrics))
|
||||
ZydisTokenizer::SingleToken token;
|
||||
if(ZydisTokenizer::TokenFromX(inst.tokens, token, event->x() - getColumnPosition(3), mFontMetrics))
|
||||
{
|
||||
if(CapstoneTokenizer::IsHighlightableToken(token))
|
||||
if(ZydisTokenizer::IsHighlightableToken(token))
|
||||
{
|
||||
if(!CapstoneTokenizer::TokenEquals(&token, &mHighlightToken) || event->button() == Qt::RightButton)
|
||||
if(!ZydisTokenizer::TokenEquals(&token, &mHighlightToken) || event->button() == Qt::RightButton)
|
||||
mHighlightToken = token;
|
||||
else
|
||||
mHighlightToken = CapstoneTokenizer::SingleToken();
|
||||
mHighlightToken = ZydisTokenizer::SingleToken();
|
||||
}
|
||||
else if(!mPermanentHighlightingMode)
|
||||
{
|
||||
mHighlightToken = CapstoneTokenizer::SingleToken();
|
||||
mHighlightToken = ZydisTokenizer::SingleToken();
|
||||
}
|
||||
}
|
||||
else if(!mPermanentHighlightingMode)
|
||||
{
|
||||
mHighlightToken = CapstoneTokenizer::SingleToken();
|
||||
mHighlightToken = ZydisTokenizer::SingleToken();
|
||||
}
|
||||
}
|
||||
else if(!mPermanentHighlightingMode)
|
||||
{
|
||||
mHighlightToken = CapstoneTokenizer::SingleToken();
|
||||
mHighlightToken = ZydisTokenizer::SingleToken();
|
||||
}
|
||||
if(mHighlightingMode) //disable highlighting mode after clicked
|
||||
{
|
||||
|
@ -861,7 +861,7 @@ QString TraceBrowser::getIndexText(duint index)
|
|||
void TraceBrowser::updateColors()
|
||||
{
|
||||
AbstractTableView::updateColors();
|
||||
//CapstoneTokenizer::UpdateColors(); //Already called in disassembly
|
||||
//ZydisTokenizer::UpdateColors(); //Already called in disassembly
|
||||
mDisasm->UpdateConfig();
|
||||
mBackgroundColor = ConfigColor("DisassemblyBackgroundColor");
|
||||
|
||||
|
@ -1086,9 +1086,9 @@ void TraceBrowser::pushSelectionInto(bool copyBytes, QTextStream & stream, QText
|
|||
{
|
||||
RichTextPainter::List richText;
|
||||
if(mHighlightToken.text.length())
|
||||
CapstoneTokenizer::TokenToRichText(inst.tokens, richText, &mHighlightToken);
|
||||
ZydisTokenizer::TokenToRichText(inst.tokens, richText, &mHighlightToken);
|
||||
else
|
||||
CapstoneTokenizer::TokenToRichText(inst.tokens, richText, 0);
|
||||
ZydisTokenizer::TokenToRichText(inst.tokens, richText, 0);
|
||||
RichTextPainter::htmlRichText(richText, htmlDisassembly, disassembly);
|
||||
}
|
||||
else
|
||||
|
@ -1217,7 +1217,7 @@ void TraceBrowser::copyDisassemblySlot()
|
|||
int opcodeSize;
|
||||
mTraceFile->OpCode(i, opcode, &opcodeSize);
|
||||
Instruction_t inst = mDisasm->DisassembleAt(opcode, opcodeSize, mTraceFile->Registers(i).regcontext.cip, 0);
|
||||
CapstoneTokenizer::TokenToRichText(inst.tokens, richText, 0);
|
||||
ZydisTokenizer::TokenToRichText(inst.tokens, richText, 0);
|
||||
RichTextPainter::htmlRichText(richText, clipboardHtml, clipboard);
|
||||
}
|
||||
clipboardHtml += QString("</div>");
|
||||
|
|
|
@ -56,7 +56,7 @@ private:
|
|||
};
|
||||
|
||||
SelectionData mSelection;
|
||||
CapstoneTokenizer::SingleToken mHighlightToken;
|
||||
ZydisTokenizer::SingleToken mHighlightToken;
|
||||
bool mHighlightingMode;
|
||||
bool mPermanentHighlightingMode;
|
||||
bool mAutoDisassemblyFollowSelection;
|
||||
|
|
|
@ -107,7 +107,7 @@ int main(int argc, char* argv[])
|
|||
|
||||
TLS_TranslatedStringMap = new std::map<DWORD, TranslatedStringStorage>();
|
||||
|
||||
// initialize capstone
|
||||
// initialize Zydis
|
||||
Zydis::GlobalInitialize();
|
||||
|
||||
// load config file + set config font
|
||||
|
@ -165,7 +165,7 @@ int main(int argc, char* argv[])
|
|||
delete temp;
|
||||
}
|
||||
|
||||
//TODO free capstone/config/bridge and prevent use after free.
|
||||
//TODO free Zydis/config/bridge and prevent use after free.
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -83,7 +83,7 @@ SOURCES += \
|
|||
Src/BasicView/HexDump.cpp \
|
||||
Src/BasicView/AbstractTableView.cpp \
|
||||
Src/Disassembler/QBeaEngine.cpp \
|
||||
Src/Disassembler/capstone_gui.cpp \
|
||||
Src/Disassembler/ZydisTokenizer.cpp \
|
||||
Src/Memory/MemoryPage.cpp \
|
||||
Src/Bridge/Bridge.cpp \
|
||||
Src/BasicView/StdTable.cpp \
|
||||
|
@ -198,7 +198,7 @@ HEADERS += \
|
|||
Src/BasicView/HexDump.h \
|
||||
Src/BasicView/AbstractTableView.h \
|
||||
Src/Disassembler/QBeaEngine.h \
|
||||
Src/Disassembler/capstone_gui.h \
|
||||
Src/Disassembler/ZydisTokenizer.h \
|
||||
Src/Memory/MemoryPage.h \
|
||||
Src/Bridge/Bridge.h \
|
||||
Src/Exports.h \
|
||||
|
|
|
@ -67,7 +67,7 @@ SOURCES += \
|
|||
gui/Src/Gui/XrefBrowseDialog.cpp \
|
||||
gui/Src/Gui/YaraRuleSelectionDialog.cpp \
|
||||
gui/Src/main.cpp \
|
||||
gui/Src/Disassembler/capstone_gui.cpp \
|
||||
gui/Src/Disassembler/ZydisTokenizer.cpp \
|
||||
gui/Src/Disassembler/QBeaEngine.cpp \
|
||||
dbg/_dbgfunctions.cpp \
|
||||
dbg/_exports.cpp \
|
||||
|
@ -293,7 +293,7 @@ HEADERS += \
|
|||
gui/Src/Gui/WordEditDialog.h \
|
||||
gui/Src/Gui/XrefBrowseDialog.h \
|
||||
gui/Src/Gui/YaraRuleSelectionDialog.h \
|
||||
gui/Src/Disassembler/capstone_gui.h \
|
||||
gui/Src/Disassembler/ZydisTokenizer.h \
|
||||
gui/Src/Disassembler/QBeaEngine.h \
|
||||
gui/Src/Gui/StructWidget.h \
|
||||
dbg/_dbgfunctions.h \
|
||||
|
|
Loading…
Reference in New Issue