1
0
Fork 0

DBG: added support for basic Windows constants (currently only window messages)

This commit is contained in:
mrexodia 2017-04-23 22:12:50 +02:00
parent 33d482e74c
commit 90070ef1b3
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
8 changed files with 335 additions and 2 deletions

258
bin/winconstants.txt Normal file
View File

@ -0,0 +1,258 @@
0x0000 WM_NULL
0x0001 WM_CREATE
0x0002 WM_DESTROY
0x0003 WM_MOVE
0x0005 WM_SIZE
0x0006 WM_ACTIVATE
0x0007 WM_SETFOCUS
0x0008 WM_KILLFOCUS
0x000A WM_ENABLE
0x000B WM_SETREDRAW
0x000C WM_SETTEXT
0x000D WM_GETTEXT
0x000E WM_GETTEXTLENGTH
0x000F WM_PAINT
0x0010 WM_CLOSE
0x0011 WM_QUERYENDSESSION
0x0012 WM_QUIT
0x0013 WM_QUERYOPEN
0x0014 WM_ERASEBKGND
0x0015 WM_SYSCOLORCHANGE
0x0016 WM_ENDSESSION
0x0018 WM_SHOWWINDOW
0x001A WM_SETTINGCHANGE
0x001A WM_WININICHANGE
0x001B WM_DEVMODECHANGE
0x001C WM_ACTIVATEAPP
0x001D WM_FONTCHANGE
0x001E WM_TIMECHANGE
0x001F WM_CANCELMODE
0x0020 WM_SETCURSOR
0x0021 WM_MOUSEACTIVATE
0x0022 WM_CHILDACTIVATE
0x0023 WM_QUEUESYNC
0x0024 WM_GETMINMAXINFO
0x0026 WM_PAINTICON
0x0027 WM_ICONERASEBKGND
0x0028 WM_NEXTDLGCTL
0x002A WM_SPOOLERSTATUS
0x002B WM_DRAWITEM
0x002C WM_MEASUREITEM
0x002D WM_DELETEITEM
0x002E WM_VKEYTOITEM
0x002F WM_CHARTOITEM
0x0030 WM_SETFONT
0x0031 WM_GETFONT
0x0032 WM_SETHOTKEY
0x0033 WM_GETHOTKEY
0x0037 WM_QUERYDRAGICON
0x0039 WM_COMPAREITEM
0x003D WM_GETOBJECT
0x0041 WM_COMPACTING
0x0044 WM_COMMNOTIFY
0x0046 WM_WINDOWPOSCHANGING
0x0047 WM_WINDOWPOSCHANGED
0x0048 WM_POWER
0x004A WM_COPYDATA
0x004B WM_CANCELJOURNAL
0x004E WM_NOTIFY
0x0050 WM_INPUTLANGCHANGEREQUEST
0x0051 WM_INPUTLANGCHANGE
0x0052 WM_TCARD
0x0053 WM_HELP
0x0054 WM_USERCHANGED
0x0055 WM_NOTIFYFORMAT
0x007B WM_CONTEXTMENU
0x007C WM_STYLECHANGING
0x007D WM_STYLECHANGED
0x007E WM_DISPLAYCHANGE
0x007F WM_GETICON
0x0080 WM_SETICON
0x0081 WM_NCCREATE
0x0082 WM_NCDESTROY
0x0083 WM_NCCALCSIZE
0x0084 WM_NCHITTEST
0x0085 WM_NCPAINT
0x0086 WM_NCACTIVATE
0x0087 WM_GETDLGCODE
0x0088 WM_SYNCPAINT
0x00A0 WM_NCMOUSEMOVE
0x00A1 WM_NCLBUTTONDOWN
0x00A2 WM_NCLBUTTONUP
0x00A3 WM_NCLBUTTONDBLCLK
0x00A4 WM_NCRBUTTONDOWN
0x00A5 WM_NCRBUTTONUP
0x00A6 WM_NCRBUTTONDBLCLK
0x00A7 WM_NCMBUTTONDOWN
0x00A8 WM_NCMBUTTONUP
0x00A9 WM_NCMBUTTONDBLCLK
0x00AB WM_NCXBUTTONDOWN
0x00AC WM_NCXBUTTONUP
0x00AD WM_NCXBUTTONDBLCLK
0x00FE WM_INPUT_DEVICE_CHANGE
0x00FF WM_INPUT
0x0100 WM_KEYDOWN
0x0100 WM_KEYFIRST
0x0101 WM_KEYUP
0x0102 WM_CHAR
0x0103 WM_DEADCHAR
0x0104 WM_SYSKEYDOWN
0x0105 WM_SYSKEYUP
0x0106 WM_SYSCHAR
0x0107 WM_SYSDEADCHAR
0x0108 WM_KEYLAST
0x0109 WM_KEYLAST
0x0109 WM_UNICHAR
0x010D WM_IME_STARTCOMPOSITION
0x010E WM_IME_ENDCOMPOSITION
0x010F WM_IME_COMPOSITION
0x010F WM_IME_KEYLAST
0x0110 WM_INITDIALOG
0x0111 WM_COMMAND
0x0112 WM_SYSCOMMAND
0x0113 WM_TIMER
0x0114 WM_HSCROLL
0x0115 WM_VSCROLL
0x0116 WM_INITMENU
0x0117 WM_INITMENUPOPUP
0x0119 WM_GESTURE
0x011A WM_GESTURENOTIFY
0x011F WM_MENUSELECT
0x0120 WM_MENUCHAR
0x0121 WM_ENTERIDLE
0x0122 WM_MENURBUTTONUP
0x0123 WM_MENUDRAG
0x0124 WM_MENUGETOBJECT
0x0125 WM_UNINITMENUPOPUP
0x0126 WM_MENUCOMMAND
0x0127 WM_CHANGEUISTATE
0x0128 WM_UPDATEUISTATE
0x0129 WM_QUERYUISTATE
0x0132 WM_CTLCOLORMSGBOX
0x0133 WM_CTLCOLOREDIT
0x0134 WM_CTLCOLORLISTBOX
0x0135 WM_CTLCOLORBTN
0x0136 WM_CTLCOLORDLG
0x0137 WM_CTLCOLORSCROLLBAR
0x0138 WM_CTLCOLORSTATIC
0x0200 WM_MOUSEFIRST
0x0200 WM_MOUSEMOVE
0x0201 WM_LBUTTONDOWN
0x0202 WM_LBUTTONUP
0x0203 WM_LBUTTONDBLCLK
0x0204 WM_RBUTTONDOWN
0x0205 WM_RBUTTONUP
0x0206 WM_RBUTTONDBLCLK
0x0207 WM_MBUTTONDOWN
0x0208 WM_MBUTTONUP
0x0209 WM_MBUTTONDBLCLK
0x0209 WM_MOUSELAST
0x020A WM_MOUSELAST
0x020A WM_MOUSEWHEEL
0x020B WM_XBUTTONDOWN
0x020C WM_XBUTTONUP
0x020D WM_MOUSELAST
0x020D WM_XBUTTONDBLCLK
0x020E WM_MOUSEHWHEEL
0x020E WM_MOUSELAST
0x0210 WM_PARENTNOTIFY
0x0211 WM_ENTERMENULOOP
0x0212 WM_EXITMENULOOP
0x0213 WM_NEXTMENU
0x0214 WM_SIZING
0x0215 WM_CAPTURECHANGED
0x0216 WM_MOVING
0x0218 WM_POWERBROADCAST
0x0219 WM_DEVICECHANGE
0x0220 WM_MDICREATE
0x0221 WM_MDIDESTROY
0x0222 WM_MDIACTIVATE
0x0223 WM_MDIRESTORE
0x0224 WM_MDINEXT
0x0225 WM_MDIMAXIMIZE
0x0226 WM_MDITILE
0x0227 WM_MDICASCADE
0x0228 WM_MDIICONARRANGE
0x0229 WM_MDIGETACTIVE
0x0230 WM_MDISETMENU
0x0231 WM_ENTERSIZEMOVE
0x0232 WM_EXITSIZEMOVE
0x0233 WM_DROPFILES
0x0234 WM_MDIREFRESHMENU
0x0238 WM_POINTERDEVICECHANGE
0x0239 WM_POINTERDEVICEINRANGE
0x023A WM_POINTERDEVICEOUTOFRANGE
0x0240 WM_TOUCH
0x0241 WM_NCPOINTERUPDATE
0x0242 WM_NCPOINTERDOWN
0x0243 WM_NCPOINTERUP
0x0245 WM_POINTERUPDATE
0x0246 WM_POINTERDOWN
0x0247 WM_POINTERUP
0x0249 WM_POINTERENTER
0x024A WM_POINTERLEAVE
0x024B WM_POINTERACTIVATE
0x024C WM_POINTERCAPTURECHANGED
0x024D WM_TOUCHHITTESTING
0x024E WM_POINTERWHEEL
0x024F WM_POINTERHWHEEL
0x0251 WM_POINTERROUTEDTO
0x0252 WM_POINTERROUTEDAWAY
0x0253 WM_POINTERROUTEDRELEASED
0x0281 WM_IME_SETCONTEXT
0x0282 WM_IME_NOTIFY
0x0283 WM_IME_CONTROL
0x0284 WM_IME_COMPOSITIONFULL
0x0285 WM_IME_SELECT
0x0286 WM_IME_CHAR
0x0288 WM_IME_REQUEST
0x0290 WM_IME_KEYDOWN
0x0291 WM_IME_KEYUP
0x02A0 WM_NCMOUSEHOVER
0x02A1 WM_MOUSEHOVER
0x02A2 WM_NCMOUSELEAVE
0x02A3 WM_MOUSELEAVE
0x02B1 WM_WTSSESSION_CHANGE
0x02c0 WM_TABLET_FIRST
0x02df WM_TABLET_LAST
0x02E0 WM_DPICHANGED
0x0300 WM_CUT
0x0301 WM_COPY
0x0302 WM_PASTE
0x0303 WM_CLEAR
0x80085 BOOBS
0x0304 WM_UNDO
0x0305 WM_RENDERFORMAT
0x0306 WM_RENDERALLFORMATS
0x0307 WM_DESTROYCLIPBOARD
0x0308 WM_DRAWCLIPBOARD
0x0309 WM_PAINTCLIPBOARD
0x030A WM_VSCROLLCLIPBOARD
0x030B WM_SIZECLIPBOARD
0x030C WM_ASKCBFORMATNAME
0x030D WM_CHANGECBCHAIN
0x030E WM_HSCROLLCLIPBOARD
0x030F WM_QUERYNEWPALETTE
0x0310 WM_PALETTEISCHANGING
0x0311 WM_PALETTECHANGED
0x0312 WM_HOTKEY
0x0317 WM_PRINT
0x0318 WM_PRINTCLIENT
0x0319 WM_APPCOMMAND
0x031A WM_THEMECHANGED
0x031D WM_CLIPBOARDUPDATE
0x031E WM_DWMCOMPOSITIONCHANGED
0x031F WM_DWMNCRENDERINGCHANGED
0x0320 WM_DWMCOLORIZATIONCOLORCHANGED
0x0321 WM_DWMWINDOWMAXIMIZEDCHANGE
0x0323 WM_DWMSENDICONICTHUMBNAIL
0x0326 WM_DWMSENDICONICLIVEPREVIEWBITMAP
0x033F WM_GETTITLEBARINFOEX
0x0358 WM_HANDHELDFIRST
0x035F WM_HANDHELDLAST
0x0360 WM_AFXFIRST
0x037F WM_AFXLAST
0x0380 WM_PENWINFIRST
0x038F WM_PENWINLAST
0x0400 WM_USER
0x8000 WM_APP

View File

@ -28,6 +28,7 @@
#include "animate.h"
#include "thread.h"
#include "comment.h"
#include "exception.h"
static DBGFUNCTIONS _dbgfunctions;
@ -321,6 +322,18 @@ static void _getcallstackex(DBGCALLSTACK* callstack, bool cache)
stackgetcallstack(csp, (CALLSTACK*)callstack);
}
static void _enumconstants(ListOf(CONSTANTINFO) constants)
{
auto constantsV = ConstantList();
BridgeList<CONSTANTINFO>::CopyData(constants, constantsV);
}
static void _enumerrorcodes(ListOf(CONSTANTINFO) errorcodes)
{
auto errorcodesV = ErrorCodeList();
BridgeList<CONSTANTINFO>::CopyData(errorcodes, errorcodesV);
}
void dbgfunctionsinit()
{
_dbgfunctions.AssembleAtEx = _assembleatex;
@ -384,4 +397,6 @@ void dbgfunctionsinit()
_dbgfunctions.IsDepEnabled = dbgisdepenabled;
_dbgfunctions.GetCallStackEx = _getcallstackex;
_dbgfunctions.GetUserComment = CommentGet;
_dbgfunctions.EnumConstants = _enumconstants;
_dbgfunctions.EnumErrorCodes = _enumerrorcodes;
}

View File

@ -115,6 +115,12 @@ typedef struct
duint flags;
} HEAPINFO;
typedef struct
{
const char* name;
duint value;
} CONSTANTINFO;
typedef bool (*ASSEMBLEATEX)(duint addr, const char* instruction, char* error, bool fillnop);
typedef bool (*SECTIONFROMADDR)(duint addr, char* section);
typedef bool (*MODNAMEFROMADDR)(duint addr, char* modname, bool extension);
@ -176,6 +182,7 @@ typedef bool(*THREADGETNAME)(DWORD tid, char* name);
typedef bool(*ISDEPENABLED)();
typedef void(*GETCALLSTACKEX)(DBGCALLSTACK* callstack, bool cache);
typedef bool(*GETUSERCOMMENT)(duint addr, char* comment);
typedef void(*ENUMCONSTANTS)(ListOf(CONSTANTINFO) constants);
//The list of all the DbgFunctions() return value.
//WARNING: This list is append only. Do not insert things in the middle or plugins would break.
@ -242,6 +249,8 @@ typedef struct DBGFUNCTIONS_
ISDEPENABLED IsDepEnabled;
GETCALLSTACKEX GetCallStackEx;
GETUSERCOMMENT GetUserComment;
ENUMCONSTANTS EnumConstants;
ENUMCONSTANTS EnumErrorCodes;
} DBGFUNCTIONS;
#ifdef BUILD_DBG

View File

@ -7,6 +7,7 @@
static std::unordered_map<unsigned int, String> ExceptionNames;
static std::unordered_map<unsigned int, String> NtStatusNames;
static std::unordered_map<unsigned int, String> ErrorNames;
static std::unordered_map<String, unsigned int> Constants;
static bool UniversalCodeInit(const String & file, std::unordered_map<unsigned int, String> & names, unsigned char radix)
{
@ -35,6 +36,7 @@ static bool UniversalCodeInit(const String & file, std::unordered_map<unsigned i
}
return result;
}
bool ErrorCodeInit(const String & errorFile)
{
return UniversalCodeInit(errorFile, ErrorNames, 10);
@ -45,6 +47,33 @@ bool ExceptionCodeInit(const String & exceptionFile)
return UniversalCodeInit(exceptionFile, ExceptionNames, 16);
}
bool ConstantCodeInit(const String & constantFile)
{
std::unordered_map<unsigned int, String> names;
if(!UniversalCodeInit(constantFile, names, 0))
return false;
for(auto it : names)
Constants.insert({ it.second, it.first });
return true;
}
bool ConstantFromName(const String & name, duint & value)
{
auto found = Constants.find(name);
if(found == Constants.end())
return false;
value = found->second;
return true;
}
std::vector<CONSTANTINFO> ConstantList()
{
std::vector<CONSTANTINFO> result;
for(auto it : Constants)
result.push_back({ it.first.c_str(), it.second });
return result;
}
static bool ExceptionDatabaseNameToCode(const std::unordered_map<unsigned int, String>* db, const char* Name, unsigned int* ErrorCode)
{
for(const auto & i : *db)
@ -104,4 +133,12 @@ const String & ErrorCodeToName(unsigned int ErrorCode)
{
bool success;
return ExceptionDatabaseCodeToName(&ErrorNames, ErrorCode, &success);
}
}
std::vector<CONSTANTINFO> ErrorCodeList()
{
std::vector<CONSTANTINFO> result;
for(auto it : ErrorNames)
result.push_back({ it.second.c_str(), it.first });
return result;
}

View File

@ -4,6 +4,7 @@
#define MS_VC_EXCEPTION 0x406D1388
#include "_global.h"
#include "_dbgfunctions.h"
#include "stringutils.h"
bool ExceptionCodeInit(const String & exceptionFile);
@ -12,6 +13,10 @@ bool NtStatusCodeInit(const String & ntStatusFile);
const String & NtStatusCodeToName(unsigned int NtStatusCode);
bool ErrorCodeInit(const String & errorFile);
const String & ErrorCodeToName(unsigned int ErrorCode);
std::vector<CONSTANTINFO> ErrorCodeList();
bool ExceptionNameToCode(const char* Name, unsigned int* ErrorCode);
bool ConstantCodeInit(const String & constantFile);
bool ConstantFromName(const String & name, duint & value);
std::vector<CONSTANTINFO> ConstantList();
#endif // _EXCEPTION_H

View File

@ -17,6 +17,7 @@
#include "threading.h"
#include "TraceRecord.h"
#include "plugin_loader.h"
#include "exception.h"
static bool dosignedcalc = false;
@ -1814,6 +1815,9 @@ bool valfromstring_noexpr(const char* string, duint* value, bool silent, bool ba
if(value_size)
*value_size = sizeof(duint);
if(ConstantFromName(string, *value))
return true;
PLUG_CB_VALFROMSTRING info;
info.string = string;
info.value = 0;

View File

@ -580,6 +580,12 @@ static DWORD WINAPI loadDbThread(LPVOID)
else
dputs(QT_TRANSLATE_NOOP("DBG", "Failed to load NTSTATUS codes..."));
// Load Windows constants
if(ConstantCodeInit(StringUtils::sprintf("%s\\..\\winconstants.txt", szProgramDir)))
dputs(QT_TRANSLATE_NOOP("DBG", "Windows constant database loaded!"));
else
dputs(QT_TRANSLATE_NOOP("DBG", "Failed to load Windows constants..."));
// Load global notes
dputs(QT_TRANSLATE_NOOP("DBG", "Reading notes file..."));
notesFile = String(szProgramDir) + "\\notes.txt";

View File

@ -2630,7 +2630,6 @@ void RegistersView::displayEditDialog()
else
setRegister(mSelected, fpuvalue);
}
}
while(errorinput);
}