898 lines
24 KiB
C++
898 lines
24 KiB
C++
#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*/)
|
|
{
|
|
}
|