Initial
This commit is contained in:
897
hookproc/EXCPTDLG.CPP
Normal file
897
hookproc/EXCPTDLG.CPP
Normal file
@@ -0,0 +1,897 @@
|
||||
#include <hookproc/excptdlg.hpp>
|
||||
#include <hookproc/excpthk.hpp>
|
||||
#include <common/font.hpp>
|
||||
|
||||
WORD ExceptDlg::performDialog(const ExceptionRecord &exceptionRecord,const Context &exceptionContext)
|
||||
{
|
||||
String staticControl("STATIC");
|
||||
String editControl("EDIT");
|
||||
DialogTemplate dlgTemplate;
|
||||
DialogItemTemplate argEdit;
|
||||
DialogItemTemplate argStatic;
|
||||
DialogItemTemplate argButton;
|
||||
DialogItemTemplate staticEAX;
|
||||
DialogItemTemplate staticEBX;
|
||||
DialogItemTemplate staticECX;
|
||||
DialogItemTemplate staticEDX;
|
||||
DialogItemTemplate staticESI;
|
||||
DialogItemTemplate staticEDI;
|
||||
DialogItemTemplate staticESP;
|
||||
DialogItemTemplate staticEBP;
|
||||
DialogItemTemplate staticDS;
|
||||
DialogItemTemplate staticES;
|
||||
DialogItemTemplate staticFS;
|
||||
DialogItemTemplate staticGS;
|
||||
DialogItemTemplate staticCS;
|
||||
DialogItemTemplate staticSS;
|
||||
DialogItemTemplate staticEIP;
|
||||
DialogItemTemplate staticFlagsCarry;
|
||||
DialogItemTemplate staticFlagsZero;
|
||||
DialogItemTemplate staticFlagsOverflow;
|
||||
DialogItemTemplate staticFlagsSign;
|
||||
DialogItemTemplate staticFlagsAuxiliary;
|
||||
DialogItemTemplate staticFlagsParity;
|
||||
DialogItemTemplate staticFlagsDirection;
|
||||
DialogItemTemplate staticFlagsInterrupt;
|
||||
DialogItemTemplate registerEAX;
|
||||
DialogItemTemplate registerEBX;
|
||||
DialogItemTemplate registerECX;
|
||||
DialogItemTemplate registerEDX;
|
||||
DialogItemTemplate registerESI;
|
||||
DialogItemTemplate registerEDI;
|
||||
DialogItemTemplate registerESP;
|
||||
DialogItemTemplate registerEBP;
|
||||
DialogItemTemplate registerDS;
|
||||
DialogItemTemplate registerES;
|
||||
DialogItemTemplate registerFS;
|
||||
DialogItemTemplate registerGS;
|
||||
DialogItemTemplate registerCS;
|
||||
DialogItemTemplate registerSS;
|
||||
DialogItemTemplate registerEIP;
|
||||
DialogItemTemplate registerFlagsSign;
|
||||
DialogItemTemplate registerFlagsCarry;
|
||||
DialogItemTemplate registerFlagsOverflow;
|
||||
DialogItemTemplate registerFlagsZero;
|
||||
DialogItemTemplate registerFlagsParity;
|
||||
DialogItemTemplate registerFlagsAuxiliary;
|
||||
DialogItemTemplate registerFlagsDirection;
|
||||
DialogItemTemplate registerFlagsInterrupt;
|
||||
DialogItemTemplate staticFlagsLabel;
|
||||
|
||||
mExceptionRecord=exceptionRecord;
|
||||
mExceptionContext=exceptionContext;
|
||||
dlgTemplate.titleText(exceptionRecord.exceptionCodeString().isNull()?"Exception Handler":(LPSTR)(String&)exceptionRecord.exceptionCodeString());
|
||||
dlgTemplate.posRect(Rect(8,19,345,225));
|
||||
dlgTemplate.pointSize(6);
|
||||
dlgTemplate.typeFace("Helv");
|
||||
dlgTemplate.style(DS_MODALFRAME|WS_TABSTOP|WS_VISIBLE|WS_CAPTION|DS_3DLOOK|DS_SETFONT|WS_POPUP|WS_SYSMENU);
|
||||
|
||||
argEdit.className(editControl);
|
||||
argEdit.titleText("");
|
||||
argEdit.style(WS_BORDER|WS_TABSTOP|WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_MULTILINE|ES_WANTRETURN|ES_READONLY);
|
||||
argEdit.posRect(Rect(2,60,340,140));
|
||||
argEdit.itemID(EditControlID);
|
||||
|
||||
argButton.className("BUTTON");
|
||||
argButton.titleText("Ok");
|
||||
argButton.style(WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON);
|
||||
argButton.posRect(Rect(145,205,50,14));
|
||||
argButton.itemID(IDOK);
|
||||
|
||||
staticEAX.className(staticControl);
|
||||
staticEAX.titleText("eax:");
|
||||
staticEAX.style(WS_CHILD|WS_VISIBLE);
|
||||
staticEAX.posRect(Rect(2,9,19,8));
|
||||
staticEAX.itemID(-1);
|
||||
|
||||
staticEBX.className(staticControl);
|
||||
staticEBX.titleText("ebx:");
|
||||
staticEBX.style(WS_CHILD|WS_VISIBLE);
|
||||
staticEBX.posRect(Rect(72,9,17,8));
|
||||
staticEBX.itemID(-1);
|
||||
|
||||
staticECX.className(staticControl);
|
||||
staticECX.titleText("ecx:");
|
||||
staticECX.style(WS_CHILD|WS_VISIBLE);
|
||||
staticECX.posRect(Rect(143,9,16,8));
|
||||
staticECX.itemID(-1);
|
||||
|
||||
staticEDX.className(staticControl);
|
||||
staticEDX.titleText("edx:");
|
||||
staticEDX.style(WS_CHILD|WS_VISIBLE);
|
||||
staticEDX.posRect(Rect(213,9,16,8));
|
||||
staticEDX.itemID(-1);
|
||||
|
||||
staticESI.className(staticControl);
|
||||
staticESI.titleText("esi:");
|
||||
staticESI.style(WS_CHILD|WS_VISIBLE);
|
||||
staticESI.posRect(Rect(2,23,19,8));
|
||||
staticESI.itemID(-1);
|
||||
|
||||
staticEDI.className(staticControl);
|
||||
staticEDI.titleText("edi:");
|
||||
staticEDI.style(WS_CHILD|WS_VISIBLE);
|
||||
staticEDI.posRect(Rect(72,23,14,8));
|
||||
staticEDI.itemID(-1);
|
||||
|
||||
staticESP.className(staticControl);
|
||||
staticESP.titleText("esp:");
|
||||
staticESP.style(WS_CHILD|WS_VISIBLE);
|
||||
staticESP.posRect(Rect(143,23,16,8));
|
||||
staticESP.itemID(-1);
|
||||
|
||||
staticEBP.className(staticControl);
|
||||
staticEBP.titleText("ebp:");
|
||||
staticEBP.style(WS_CHILD|WS_VISIBLE);
|
||||
staticEBP.posRect(Rect(213,23,17,8));
|
||||
staticEBP.itemID(-1);
|
||||
|
||||
staticDS.className(staticControl);
|
||||
staticDS.titleText("ds:");
|
||||
staticDS.style(WS_CHILD|WS_VISIBLE);
|
||||
staticDS.posRect(Rect(2,37,13,8));
|
||||
staticDS.itemID(-1);
|
||||
|
||||
registerDS.className(editControl);
|
||||
registerDS.titleText("");
|
||||
registerDS.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerDS.posRect(Rect(17,36,26,12));
|
||||
registerDS.itemID(DebugDS);
|
||||
|
||||
staticES.className(staticControl);
|
||||
staticES.titleText("es:");
|
||||
staticES.style(WS_CHILD|WS_VISIBLE);
|
||||
staticES.posRect(Rect(45,37,13,8));
|
||||
staticES.itemID(-1);
|
||||
|
||||
registerES.className(editControl);
|
||||
registerES.titleText("");
|
||||
registerES.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerES.posRect(Rect(59,36,26,12));
|
||||
registerES.itemID(DebugES);
|
||||
|
||||
staticFS.className(staticControl);
|
||||
staticFS.titleText("fs:");
|
||||
staticFS.style(WS_CHILD|WS_VISIBLE);
|
||||
staticFS.posRect(Rect(87,37,13,8));
|
||||
staticFS.itemID(-1);
|
||||
|
||||
registerFS.className(editControl);
|
||||
registerFS.titleText("");
|
||||
registerFS.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerFS.posRect(Rect(101,36,26,12));
|
||||
registerFS.itemID(DebugFS);
|
||||
|
||||
staticGS.className(staticControl);
|
||||
staticGS.titleText("gs:");
|
||||
staticGS.style(WS_CHILD|WS_VISIBLE);
|
||||
staticGS.posRect(Rect(128,37,13,8));
|
||||
staticGS.itemID(-1);
|
||||
|
||||
registerGS.className(editControl);
|
||||
registerGS.titleText("");
|
||||
registerGS.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerGS.posRect(Rect(142,36,26,12));
|
||||
registerGS.itemID(DebugGS);
|
||||
|
||||
staticCS.className(staticControl);
|
||||
staticCS.titleText("cs:");
|
||||
staticCS.style(WS_CHILD|WS_VISIBLE);
|
||||
staticCS.posRect(Rect(169,37,13,8));
|
||||
staticCS.itemID(-1);
|
||||
|
||||
registerCS.className(editControl);
|
||||
registerCS.titleText("");
|
||||
registerCS.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerCS.posRect(Rect(183,36,26,12));
|
||||
registerCS.itemID(DebugCS);
|
||||
|
||||
staticSS.className(staticControl);
|
||||
staticSS.titleText("ss:");
|
||||
staticSS.style(WS_CHILD|WS_VISIBLE);
|
||||
staticSS.posRect(Rect(210,37,13,8));
|
||||
staticSS.itemID(-1);
|
||||
|
||||
registerSS.className(editControl);
|
||||
registerSS.titleText("");
|
||||
registerSS.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerSS.posRect(Rect(224,36,26,12));
|
||||
registerSS.itemID(DebugSS);
|
||||
|
||||
staticEIP.className(staticControl);
|
||||
staticEIP.titleText("eip:");
|
||||
staticEIP.style(WS_CHILD|WS_VISIBLE);
|
||||
staticEIP.posRect(Rect(281,9,13,8));
|
||||
staticEIP.itemID(-1);
|
||||
|
||||
registerEAX.className(editControl);
|
||||
registerEAX.titleText("");
|
||||
registerEAX.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerEAX.posRect(Rect(22,7,48,12));
|
||||
registerEAX.itemID(DebugEAX);
|
||||
|
||||
registerEBX.className(editControl);
|
||||
registerEBX.titleText("");
|
||||
registerEBX.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerEBX.posRect(Rect(92,7,48,12));
|
||||
registerEBX.itemID(DebugEBX);
|
||||
|
||||
registerECX.className(editControl);
|
||||
registerECX.titleText("");
|
||||
registerECX.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerECX.posRect(Rect(162,7,48,12));
|
||||
registerECX.itemID(DebugECX);
|
||||
|
||||
registerEDX.className(editControl);
|
||||
registerEDX.titleText("");
|
||||
registerEDX.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerEDX.posRect(Rect(231,7,48,12));
|
||||
registerEDX.itemID(DebugEDX);
|
||||
|
||||
registerESI.className(editControl);
|
||||
registerESI.titleText("");
|
||||
registerESI.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerESI.posRect(Rect(22,21,48,12));
|
||||
registerESI.itemID(DebugESI);
|
||||
|
||||
registerEDI.className(editControl);
|
||||
registerEDI.titleText("");
|
||||
registerEDI.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerEDI.posRect(Rect(92,21,48,12));
|
||||
registerEDI.itemID(DebugEDI);
|
||||
|
||||
registerESP.className(editControl);
|
||||
registerESP.titleText("");
|
||||
registerESP.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerESP.posRect(Rect(162,21,48,12));
|
||||
registerESP.itemID(DebugESP);
|
||||
|
||||
registerEBP.className(editControl);
|
||||
registerEBP.titleText("");
|
||||
registerEBP.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerEBP.posRect(Rect(231,21,48,12));
|
||||
registerEBP.itemID(DebugEBP);
|
||||
|
||||
registerEIP.className(editControl);
|
||||
registerEIP.titleText("");
|
||||
registerEIP.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerEIP.posRect(Rect(295,7,48,12));
|
||||
registerEIP.itemID(DebugEIP);
|
||||
|
||||
registerFlagsCarry.className(editControl);
|
||||
registerFlagsCarry.titleText("");
|
||||
registerFlagsCarry.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerFlagsCarry.posRect(Rect(257,36,10,12));
|
||||
registerFlagsCarry.itemID(DebugFlagsCarry);
|
||||
|
||||
registerFlagsZero.className(editControl);
|
||||
registerFlagsZero.titleText("");
|
||||
registerFlagsZero.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerFlagsZero.posRect(Rect(268,36,10,12));
|
||||
registerFlagsZero.itemID(DebugFlagsZero);
|
||||
|
||||
registerFlagsSign.className(editControl);
|
||||
registerFlagsSign.titleText("");
|
||||
registerFlagsSign.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerFlagsSign.posRect(Rect(279,36,10,12));
|
||||
registerFlagsSign.itemID(DebugFlagsSign);
|
||||
|
||||
registerFlagsOverflow.className(editControl);
|
||||
registerFlagsOverflow.titleText("");
|
||||
registerFlagsOverflow.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerFlagsOverflow.posRect(Rect(290,36,10,12));
|
||||
registerFlagsOverflow.itemID(DebugFlagsOverflow);
|
||||
|
||||
registerFlagsParity.className(editControl);
|
||||
registerFlagsParity.titleText("");
|
||||
registerFlagsParity.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerFlagsParity.posRect(Rect(301,36,10,12));
|
||||
registerFlagsParity.itemID(DebugFlagsParity);
|
||||
|
||||
registerFlagsAuxiliary.className(editControl);
|
||||
registerFlagsAuxiliary.titleText("");
|
||||
registerFlagsAuxiliary.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerFlagsAuxiliary.posRect(Rect(312,36,10,12));
|
||||
registerFlagsAuxiliary.itemID(DebugFlagsAuxiliary);
|
||||
|
||||
registerFlagsDirection.className(editControl);
|
||||
registerFlagsDirection.titleText("");
|
||||
registerFlagsDirection.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerFlagsDirection.posRect(Rect(323,36,10,12));
|
||||
registerFlagsDirection.itemID(DebugFlagsDirection);
|
||||
|
||||
registerFlagsInterrupt.className(editControl);
|
||||
registerFlagsInterrupt.titleText("");
|
||||
registerFlagsInterrupt.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY);
|
||||
registerFlagsInterrupt.posRect(Rect(334,36,10,12));
|
||||
registerFlagsInterrupt.itemID(DebugFlagsInterrupt);
|
||||
|
||||
staticFlagsLabel.className(staticControl);
|
||||
staticFlagsLabel.titleText("Flags");
|
||||
staticFlagsLabel.style(WS_CHILD|WS_VISIBLE);
|
||||
staticFlagsLabel.posRect(Rect(293,25,24,8));
|
||||
staticFlagsLabel.itemID(-1);
|
||||
|
||||
staticFlagsCarry.className(staticControl);
|
||||
staticFlagsCarry.titleText("cf:");
|
||||
staticFlagsCarry.style(WS_CHILD|WS_VISIBLE);
|
||||
staticFlagsCarry.posRect(Rect(259,50,8,8));
|
||||
staticFlagsCarry.itemID(-1);
|
||||
|
||||
staticFlagsZero.className(staticControl);
|
||||
staticFlagsZero.titleText("zf:");
|
||||
staticFlagsZero.style(WS_CHILD|WS_VISIBLE);
|
||||
staticFlagsZero.posRect(Rect(270,50,8,8));
|
||||
staticFlagsZero.itemID(-1);
|
||||
|
||||
staticFlagsSign.className(staticControl);
|
||||
staticFlagsSign.titleText("sf:");
|
||||
staticFlagsSign.style(WS_CHILD|WS_VISIBLE);
|
||||
staticFlagsSign.posRect(Rect(281,50,8,8));
|
||||
staticFlagsSign.itemID(-1);
|
||||
|
||||
staticFlagsOverflow.className(staticControl);
|
||||
staticFlagsOverflow.titleText("ov:");
|
||||
staticFlagsOverflow.style(WS_CHILD|WS_VISIBLE);
|
||||
staticFlagsOverflow.posRect(Rect(292,50,8,8));
|
||||
staticFlagsOverflow.itemID(-1);
|
||||
|
||||
staticFlagsParity.className(staticControl);
|
||||
staticFlagsParity.titleText("pf:");
|
||||
staticFlagsParity.style(WS_CHILD|WS_VISIBLE);
|
||||
staticFlagsParity.posRect(Rect(303,50,8,8));
|
||||
staticFlagsParity.itemID(-1);
|
||||
|
||||
staticFlagsAuxiliary.className(staticControl);
|
||||
staticFlagsAuxiliary.titleText("af:");
|
||||
staticFlagsAuxiliary.style(WS_CHILD|WS_VISIBLE);
|
||||
staticFlagsAuxiliary.posRect(Rect(314,50,8,8));
|
||||
staticFlagsAuxiliary.itemID(-1);
|
||||
|
||||
staticFlagsInterrupt.className(staticControl);
|
||||
staticFlagsInterrupt.titleText("if:");
|
||||
staticFlagsInterrupt.style(WS_CHILD|WS_VISIBLE);
|
||||
staticFlagsInterrupt.posRect(Rect(336,50,8,8));
|
||||
staticFlagsInterrupt.itemID(-1);
|
||||
|
||||
staticFlagsDirection.className(staticControl);
|
||||
staticFlagsDirection.titleText("df:");
|
||||
staticFlagsDirection.style(WS_CHILD|WS_VISIBLE);
|
||||
staticFlagsDirection.posRect(Rect(325,50,8,8));
|
||||
staticFlagsDirection.itemID(-1);
|
||||
|
||||
dlgTemplate+=argEdit;
|
||||
dlgTemplate+=argButton;
|
||||
dlgTemplate+=staticEAX;
|
||||
dlgTemplate+=staticEBX;
|
||||
dlgTemplate+=staticECX;
|
||||
dlgTemplate+=staticEDX;
|
||||
dlgTemplate+=staticESI;
|
||||
dlgTemplate+=staticEDI;
|
||||
dlgTemplate+=staticESP;
|
||||
dlgTemplate+=staticEBP;
|
||||
dlgTemplate+=staticDS;
|
||||
dlgTemplate+=staticES;
|
||||
dlgTemplate+=staticFS;
|
||||
dlgTemplate+=staticGS;
|
||||
dlgTemplate+=staticCS;
|
||||
dlgTemplate+=staticSS;
|
||||
dlgTemplate+=staticEIP;
|
||||
dlgTemplate+=staticFlagsCarry;
|
||||
dlgTemplate+=staticFlagsZero;
|
||||
dlgTemplate+=staticFlagsOverflow;
|
||||
dlgTemplate+=staticFlagsSign;
|
||||
dlgTemplate+=staticFlagsAuxiliary;
|
||||
dlgTemplate+=staticFlagsParity;
|
||||
dlgTemplate+=staticFlagsDirection;
|
||||
dlgTemplate+=staticFlagsInterrupt;
|
||||
dlgTemplate+=registerEAX;
|
||||
dlgTemplate+=registerEBX;
|
||||
dlgTemplate+=registerECX;
|
||||
dlgTemplate+=registerEDX;
|
||||
dlgTemplate+=registerESI;
|
||||
dlgTemplate+=registerEDI;
|
||||
dlgTemplate+=registerESP;
|
||||
dlgTemplate+=registerEBP;
|
||||
dlgTemplate+=registerDS;
|
||||
dlgTemplate+=registerES;
|
||||
dlgTemplate+=registerFS;
|
||||
dlgTemplate+=registerGS;
|
||||
dlgTemplate+=registerCS;
|
||||
dlgTemplate+=registerSS;
|
||||
dlgTemplate+=registerEIP;
|
||||
dlgTemplate+=registerFlagsSign;
|
||||
dlgTemplate+=registerFlagsCarry;
|
||||
dlgTemplate+=registerFlagsOverflow;
|
||||
dlgTemplate+=registerFlagsZero;
|
||||
dlgTemplate+=registerFlagsParity;
|
||||
dlgTemplate+=registerFlagsAuxiliary;
|
||||
dlgTemplate+=registerFlagsDirection;
|
||||
dlgTemplate+=registerFlagsInterrupt;
|
||||
dlgTemplate+=staticFlagsLabel;
|
||||
|
||||
createDialog(dlgTemplate);
|
||||
clear();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
DWORD ExceptDlg::eax(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugEAX,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::eax(DWORD eax)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%08lx",eax);
|
||||
strString.upper();
|
||||
sendMessage(DebugEAX,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
DWORD ExceptDlg::ebx(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugEBX,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::ebx(DWORD ebx)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%08lx",ebx);
|
||||
strString.upper();
|
||||
sendMessage(DebugEBX,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
DWORD ExceptDlg::ecx(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugECX,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::ecx(DWORD ecx)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%08lx",ecx);
|
||||
strString.upper();
|
||||
sendMessage(DebugECX,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
DWORD ExceptDlg::edx(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugEDX,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::edx(DWORD edx)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%08lx",edx);
|
||||
strString.upper();
|
||||
sendMessage(DebugEDX,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
DWORD ExceptDlg::esi(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugESI,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::esi(DWORD esi)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%08lx",esi);
|
||||
strString.upper();
|
||||
sendMessage(DebugESI,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
DWORD ExceptDlg::edi(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugEDI,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::edi(DWORD edi)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%08lx",edi);
|
||||
strString.upper();
|
||||
sendMessage(DebugEDI,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
DWORD ExceptDlg::esp(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugESP,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::esp(DWORD esp)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%08lx",esp);
|
||||
strString.upper();
|
||||
sendMessage(DebugESP,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
DWORD ExceptDlg::ebp(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugEBP,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::ebp(DWORD ebp)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%08lx",ebp);
|
||||
strString.upper();
|
||||
sendMessage(DebugEBP,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
DWORD ExceptDlg::eip(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugEIP,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::eip(DWORD eip)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%08lx",eip);
|
||||
strString.upper();
|
||||
sendMessage(DebugEIP,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
WORD ExceptDlg::ds(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugDS,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::ds(WORD ds)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%04lx",ds);
|
||||
strString.upper();
|
||||
sendMessage(DebugDS,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
WORD ExceptDlg::es(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugES,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::es(WORD es)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%04lx",es);
|
||||
strString.upper();
|
||||
sendMessage(DebugES,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
WORD ExceptDlg::fs(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugFS,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::fs(WORD fs)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%04lx",fs);
|
||||
strString.upper();
|
||||
sendMessage(DebugFS,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
WORD ExceptDlg::gs(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugGS,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::gs(WORD gs)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%04lx",gs);
|
||||
strString.upper();
|
||||
sendMessage(DebugGS,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
WORD ExceptDlg::cs(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugCS,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::cs(WORD cs)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%04lx",cs);
|
||||
strString.upper();
|
||||
sendMessage(DebugCS,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
WORD ExceptDlg::ss(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugSS,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::ss(WORD ss)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%04lx",ss);
|
||||
strString.upper();
|
||||
sendMessage(DebugSS,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
BOOL ExceptDlg::signFlag(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugFlagsSign,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::signFlag(BOOL signFlag)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%01lx",signFlag);
|
||||
strString.upper();
|
||||
sendMessage(DebugFlagsSign,WM_SETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
BOOL ExceptDlg::carryFlag(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugFlagsCarry,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::carryFlag(BOOL carryFlag)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%01lx",carryFlag);
|
||||
strString.upper();
|
||||
sendMessage(DebugFlagsCarry,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
BOOL ExceptDlg::overflowFlag(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugFlagsOverflow,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::overflowFlag(BOOL overflowFlag)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%01lx",overflowFlag);
|
||||
strString.upper();
|
||||
sendMessage(DebugFlagsOverflow,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
BOOL ExceptDlg::zeroFlag(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugFlagsZero,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::zeroFlag(BOOL zeroFlag)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%01lx",zeroFlag);
|
||||
strString.upper();
|
||||
sendMessage(DebugFlagsZero,WM_SETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
BOOL ExceptDlg::parityFlag(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugFlagsParity,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::parityFlag(BOOL parityFlag)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%01lx",parityFlag);
|
||||
strString.upper();
|
||||
sendMessage(DebugFlagsParity,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
BOOL ExceptDlg::auxiliaryFlag(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugFlagsAuxiliary,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::auxiliaryFlag(BOOL auxiliaryFlag)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%01lx",auxiliaryFlag);
|
||||
strString.upper();
|
||||
sendMessage(DebugFlagsAuxiliary,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
BOOL ExceptDlg::directionFlag(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugFlagsDirection,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::directionFlag(BOOL directionFlag)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%01lx",directionFlag);
|
||||
strString.upper();
|
||||
sendMessage(DebugFlagsDirection,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
BOOL ExceptDlg::interruptFlag(void)const
|
||||
{
|
||||
String strString;
|
||||
|
||||
sendMessage(DebugFlagsInterrupt,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString);
|
||||
return strString.hex();
|
||||
}
|
||||
|
||||
void ExceptDlg::interruptFlag(BOOL interruptFlag)
|
||||
{
|
||||
String strString;
|
||||
|
||||
::sprintf(strString,"%01lx",interruptFlag);
|
||||
strString.upper();
|
||||
sendMessage(DebugFlagsInterrupt,WM_SETTEXT,0,(LPARAM)(LPSTR)strString);
|
||||
}
|
||||
|
||||
void ExceptDlg::clear(void)
|
||||
{
|
||||
eax(0);ebx(0);ecx(0);edx(0);esi(0);edi(0);esp(0);ebp(0);eip(0);ds(0);es(0);fs(0);gs(0);cs(0);ss(0);
|
||||
signFlag(FALSE);
|
||||
carryFlag(FALSE);
|
||||
overflowFlag(FALSE);
|
||||
zeroFlag(FALSE);
|
||||
parityFlag(FALSE);
|
||||
auxiliaryFlag(FALSE);
|
||||
directionFlag(FALSE);
|
||||
interruptFlag(FALSE);
|
||||
}
|
||||
|
||||
void ExceptDlg::showException(DWORD exceptionAddress)
|
||||
{
|
||||
Block<String> codeLines;
|
||||
PureViewOfFile codeView;
|
||||
String codeLine;
|
||||
|
||||
codeView.createView(MaxDecodeBytes,exceptionAddress);
|
||||
mDisAssembler.setBaseAddress(exceptionAddress);
|
||||
mDisAssembler.displayLines(FALSE);
|
||||
mDisAssembler.disassemble(codeLines,codeView);
|
||||
for(int lineIndex=0;lineIndex<codeLines.size();lineIndex++)
|
||||
{
|
||||
codeLine+=codeLines[lineIndex];
|
||||
codeLine+="\r\n";
|
||||
}
|
||||
sendMessage(EditControlID,WM_SETTEXT,0,(LONG)(LPSTR)codeLine);
|
||||
}
|
||||
|
||||
void ExceptDlg::showContext(void)
|
||||
{
|
||||
eax(mExceptionContext.eax());
|
||||
ebx(mExceptionContext.ebx());
|
||||
ecx(mExceptionContext.ecx());
|
||||
edx(mExceptionContext.edx());
|
||||
esi(mExceptionContext.esi());
|
||||
edi(mExceptionContext.edi());
|
||||
esp(mExceptionContext.esp());
|
||||
ebp(mExceptionContext.ebp());
|
||||
eip(mExceptionContext.eip());
|
||||
ds(mExceptionContext.segDS());
|
||||
es(mExceptionContext.segES());
|
||||
fs(mExceptionContext.segFS());
|
||||
gs(mExceptionContext.segGS());
|
||||
cs(mExceptionContext.segCS());
|
||||
ss(mExceptionContext.segSS());
|
||||
signFlag((mExceptionContext.eFlags()&0x00000080?TRUE:FALSE));
|
||||
carryFlag((mExceptionContext.eFlags()&0x00000001?TRUE:FALSE));
|
||||
overflowFlag((mExceptionContext.eFlags()&0xFFFFF800?TRUE:FALSE));
|
||||
zeroFlag((mExceptionContext.eFlags()&0x00000040?TRUE:FALSE));
|
||||
parityFlag((mExceptionContext.eFlags()&0x00000004?TRUE:FALSE));
|
||||
auxiliaryFlag((mExceptionContext.eFlags()&0x00000010?TRUE:FALSE));
|
||||
directionFlag((mExceptionContext.eFlags()&0x00000400?TRUE:FALSE));
|
||||
interruptFlag((mExceptionContext.eFlags()&0x00000200?TRUE:FALSE));
|
||||
}
|
||||
|
||||
// virtuals
|
||||
|
||||
WORD ExceptDlg::dlgCommand(DWORD commandID,CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
switch(commandID)
|
||||
{
|
||||
case IDOK :
|
||||
break;
|
||||
case IDCANCEL :
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
WORD ExceptDlg::dlgCode(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
return DLGC_WANTALLKEYS;
|
||||
}
|
||||
|
||||
BOOL ExceptDlg::dlgInitDialog(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
sendMessage(EditControlID,WM_SETFONT,(WPARAM)(HFONT)mEditFont,MAKELPARAM(TRUE,0));
|
||||
showException((DWORD)mExceptionRecord.exceptionAddress());
|
||||
showContext();
|
||||
::SetFocus(getItem(IDOK));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void ExceptDlg::dlgDestroyDialog(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
}
|
||||
Reference in New Issue
Block a user