1
0
Fork 0

DBG+GUI: added cocksucker option (issue #211, shit)

This commit is contained in:
Mr. eXoDia 2016-07-27 22:00:54 +02:00
parent a9d82f3fae
commit 82347cd094
9 changed files with 80 additions and 4 deletions

View File

@ -833,6 +833,7 @@ extern "C" DLL_EXPORT duint _dbg_sendmessage(DBGMSG type, void* param1, void* pa
bUndecorateSymbolNames = settingboolget("Engine", "UndecorateSymbolNames");
bEnableSourceDebugging = settingboolget("Engine", "EnableSourceDebugging");
bTraceRecordEnabledDuringTrace = settingboolget("Engine", "TraceRecordEnabledDuringTrace");
bCocksucker = settingboolget("Engine", "Cocksucker");
duint setting;
if(BridgeSettingGetUint("Engine", "BreakpointType", &setting))

View File

@ -84,6 +84,7 @@ HANDLE hProcessToken;
bool bUndecorateSymbolNames = true;
bool bEnableSourceDebugging = true;
bool bTraceRecordEnabledDuringTrace = true;
bool bCocksucker = false;
duint DbgEvents = 0;
static duint dbgcleartracecondition()

View File

@ -133,5 +133,6 @@ extern char szSymbolCachePath[MAX_PATH];
extern bool bUndecorateSymbolNames;
extern bool bEnableSourceDebugging;
extern bool bTraceRecordEnabledDuringTrace;
extern bool bCocksucker;
#endif // _DEBUGGER_H

View File

@ -1259,8 +1259,26 @@ CMDRESULT cbDebugBplist(int argc, char* argv[])
return STATUS_CONTINUE;
}
static bool cocksucker(int argc, char* argv[])
{
if(!bCocksucker)
return false;
duint cip = GetContextDataEx(hActiveThread, UE_CIP);
unsigned char ch;
MemRead(cip, &ch, sizeof(ch));
if(ch == 0xCC && getLastExceptionInfo().ExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT)
{
dputs("Cocksucker detected!");
cbDebugSkip(argc, argv);
return true;
}
return false;
}
CMDRESULT cbDebugStepInto(int argc, char* argv[])
{
if(cocksucker(argc, argv))
return STATUS_CONTINUE;
StepInto((void*)cbStep);
// History
HistoryAdd();
@ -1276,6 +1294,8 @@ CMDRESULT cbDebugeStepInto(int argc, char* argv[])
CMDRESULT cbDebugStepOver(int argc, char* argv[])
{
if(cocksucker(argc, argv))
return STATUS_CONTINUE;
StepOver((void*)cbStep);
// History
HistoryClear();

View File

@ -6,7 +6,7 @@ CapstoneTokenizer::CapstoneTokenizer(int maxModuleLength)
: _maxModuleLength(maxModuleLength),
_success(false)
{
SetConfig(false, false, false, false);
SetConfig(false, false, false, false, false);
}
std::map<CapstoneTokenizer::TokenType, CapstoneTokenizer::TokenColor> CapstoneTokenizer::colorNamesMap;
@ -138,19 +138,23 @@ bool CapstoneTokenizer::TokenizeData(const QString & datatype, const QString & d
void CapstoneTokenizer::UpdateConfig()
{
duint cocksucker;
bool bCocksucker = BridgeSettingGetUint("Engine", "Cocksucker", &cocksucker) && cocksucker;
SetConfig(ConfigBool("Disassembler", "Uppercase"),
ConfigBool("Disassembler", "TabbedMnemonic"),
ConfigBool("Disassembler", "ArgumentSpaces"),
ConfigBool("Disassembler", "MemorySpaces"));
ConfigBool("Disassembler", "MemorySpaces"),
bCocksucker);
UpdateStringPool();
}
void CapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces)
void CapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bCocksucker)
{
_bUppercase = bUppercase;
_bTabbedMnemonic = bTabbedMnemonic;
_bArgumentSpaces = bArgumentSpaces;
_bMemorySpaces = bMemorySpaces;
_bCocksucker = bCocksucker;
}
int CapstoneTokenizer::Size() const
@ -388,6 +392,9 @@ bool CapstoneTokenizer::tokenizeMnemonic()
}
QString mnemonic = QString(_cp.Mnemonic().c_str());
if(type == TokenType::MnemonicInt3 && _bCocksucker)
mnemonic = "cocksucker!";
tokenizeMnemonic(type, mnemonic);
return true;

View File

@ -139,7 +139,7 @@ public:
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 bMemorySpaces);
void SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bCocksucker);
int Size() const;
const Capstone & GetCapstone() const;
@ -163,6 +163,7 @@ private:
bool _bTabbedMnemonic;
bool _bArgumentSpaces;
bool _bMemorySpaces;
bool _bCocksucker;
void addToken(TokenType type, QString text, const TokenValue & value);
void addToken(TokenType type, const QString & text);

View File

@ -117,6 +117,7 @@ void SettingsDialog::LoadSettings()
GetSettingBool("Engine", "SaveDatabaseInProgramDirectory", &settings.engineSaveDatabaseInProgramDirectory);
GetSettingBool("Engine", "DisableDatabaseCompression", &settings.engineDisableDatabaseCompression);
GetSettingBool("Engine", "TraceRecordEnabledDuringTrace", &settings.engineEnableTraceRecordDuringTrace);
GetSettingBool("Engine", "Cocksucker", &settings.engineCocksucker);
switch(settings.engineCalcType)
{
case calc_signed:
@ -144,6 +145,7 @@ void SettingsDialog::LoadSettings()
ui->chkSaveDatabaseInProgramDirectory->setChecked(settings.engineSaveDatabaseInProgramDirectory);
ui->chkDisableDatabaseCompression->setChecked(settings.engineDisableDatabaseCompression);
ui->chkTraceRecordEnabledDuringTrace->setChecked(settings.engineEnableTraceRecordDuringTrace);
ui->chkCocksucker->setChecked(settings.engineCocksucker);
//Exceptions tab
char exceptionRange[MAX_SETTING_SIZE] = "";
@ -270,6 +272,7 @@ void SettingsDialog::SaveSettings()
BridgeSettingSetUint("Engine", "SaveDatabaseInProgramDirectory", settings.engineSaveDatabaseInProgramDirectory);
BridgeSettingSetUint("Engine", "DisableDatabaseCompression", settings.engineDisableDatabaseCompression);
BridgeSettingSetUint("Engine", "TraceRecordEnabledDuringTrace", settings.engineEnableTraceRecordDuringTrace);
BridgeSettingSetUint("Engine", "Cocksucker", settings.engineCocksucker);
//Exceptions tab
QString exceptionRange = "";
@ -691,3 +694,9 @@ void SettingsDialog::on_chkNoCloseDialog_toggled(bool checked)
{
settings.guiNoCloseDialog = checked;
}
void SettingsDialog::on_chkCocksucker_toggled(bool checked)
{
bTokenizerConfigUpdated = true;
settings.engineCocksucker = checked;
}

View File

@ -50,6 +50,7 @@ private slots:
void on_chkDisableDatabaseCompression_stateChanged(int arg1);
void on_chkSaveDatabaseInProgramDirectory_stateChanged(int arg1);
void on_chkTraceRecordEnabledDuringTrace_stateChanged(int arg1);
void on_chkCocksucker_toggled(bool checked);
//Exception tab
void on_btnAddRange_clicked();
void on_btnDeleteRange_clicked();
@ -124,6 +125,7 @@ private:
bool engineSaveDatabaseInProgramDirectory;
bool engineDisableDatabaseCompression;
bool engineEnableTraceRecordDuringTrace;
bool engineCocksucker;
//Exception Tab
QList<RangeStruct>* exceptionRanges;
//Disasm Tab

View File

@ -289,6 +289,40 @@
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QCheckBox" name="chkCocksucker">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>I'm a &lt;a href=&quot;https://github.com/x64dbg/x64dbg/issues/211#issuecomment-235569017&quot;&gt;cocksucker&lt;/a&gt;!</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">