From 5f6a151d32814da3caa6a72bcb0ffd68dcefe303 Mon Sep 17 00:00:00 2001 From: "Mr. eXoDia" Date: Fri, 20 Jun 2014 22:55:11 +0200 Subject: [PATCH] DBG: added various API functions --- x64_dbg_bridge/bridgemain.cpp | 48 ++++++++++++++++++ x64_dbg_bridge/bridgemain.h | 18 ++++++- x64_dbg_dbg/_exports.cpp | 48 ++++++++++++++++++ x64_dbg_dbg/addrinfo.cpp | 92 +++++++++++++++++++++++++++++++++++ x64_dbg_dbg/addrinfo.h | 4 ++ 5 files changed, 209 insertions(+), 1 deletion(-) diff --git a/x64_dbg_bridge/bridgemain.cpp b/x64_dbg_bridge/bridgemain.cpp index 76b53425..7189706f 100644 --- a/x64_dbg_bridge/bridgemain.cpp +++ b/x64_dbg_bridge/bridgemain.cpp @@ -654,6 +654,54 @@ BRIDGE_IMPEXP bool DbgIsBpDisabled(duint addr) return false; } +BRIDGE_IMPEXP bool DbgSetAutoCommentAt(duint addr, const char* text) +{ + if(_dbg_sendmessage(DBG_SET_AUTO_COMMENT_AT, (void*)addr, (void*)text)) + return true; + return false; +} + +BRIDGE_IMPEXP void DbgClearAutoCommentRange(duint start, duint end) +{ + _dbg_sendmessage(DBG_DELETE_AUTO_COMMENT_RANGE, (void*)start, (void*)end); +} + +BRIDGE_IMPEXP bool DbgSetAutoLabelAt(duint addr, const char* text) +{ + if(_dbg_sendmessage(DBG_SET_AUTO_LABEL_AT, (void*)addr, (void*)text)) + return true; + return false; +} + +BRIDGE_IMPEXP void DbgClearAutoLabelRange(duint start, duint end) +{ + _dbg_sendmessage(DBG_DELETE_AUTO_LABEL_RANGE, (void*)start, (void*)end); +} + +BRIDGE_IMPEXP bool DbgSetAutoBookmarkAt(duint addr) +{ + if(_dbg_sendmessage(DBG_SET_AUTO_BOOKMARK_AT, (void*)addr, 0)) + return true; + return false; +} + +BRIDGE_IMPEXP void DbgClearAutoBookmarkRange(duint start, duint end) +{ + _dbg_sendmessage(DBG_DELETE_AUTO_BOOKMARK_RANGE, (void*)start, (void*)end); +} + +BRIDGE_IMPEXP bool DbgSetAutoFunctionAt(duint start, duint end) +{ + if(_dbg_sendmessage(DBG_SET_AUTO_FUNCTION_AT, (void*)start, (void*)end)) + return true; + return false; +} + +BRIDGE_IMPEXP void DbgClearAutoFunctionRange(duint start, duint end) +{ + _dbg_sendmessage(DBG_DELETE_AUTO_FUNCTION_RANGE, (void*)start, (void*)end); +} + //GUI BRIDGE_IMPEXP void GuiDisasmAt(duint addr, duint cip) { diff --git a/x64_dbg_bridge/bridgemain.h b/x64_dbg_bridge/bridgemain.h index 1ac42efc..281521f5 100644 --- a/x64_dbg_bridge/bridgemain.h +++ b/x64_dbg_bridge/bridgemain.h @@ -145,7 +145,15 @@ enum DBGMSG DBG_LOOP_ADD, // param1=FUNCTION_LOOP_INFO* info, param2=unused DBG_LOOP_DEL, // param1=FUNCTION_LOOP_INFO* info, param2=unused DBG_IS_RUN_LOCKED, // param1=unused, param2=unused - DBG_IS_BP_DISABLED // param1=duint addr, param2=unused + DBG_IS_BP_DISABLED, // param1=duint addr, param2=unused + DBG_SET_AUTO_COMMENT_AT, // param1=duint addr, param2=const char* text + DBG_DELETE_AUTO_COMMENT_RANGE, // param1=duint start, param2=duint end + DBG_SET_AUTO_LABEL_AT, // param1=duint addr, param2=const char* text + DBG_DELETE_AUTO_LABEL_RANGE, // param1=duint start, param2=duint end + DBG_SET_AUTO_BOOKMARK_AT, // param1=duint addr, param2=const char* text + DBG_DELETE_AUTO_BOOKMARK_RANGE, // param1=duint start, param2=duint end + DBG_SET_AUTO_FUNCTION_AT, // param1=duint addr, param2=const char* text + DBG_DELETE_AUTO_FUNCTION_RANGE, // param1=duint start, param2=duint end }; enum SCRIPTLINETYPE @@ -530,6 +538,14 @@ BRIDGE_IMPEXP bool DbgLoopAdd(duint start, duint end); BRIDGE_IMPEXP bool DbgLoopDel(int depth, duint addr); BRIDGE_IMPEXP bool DbgIsRunLocked(); BRIDGE_IMPEXP bool DbgIsBpDisabled(duint addr); +BRIDGE_IMPEXP bool DbgSetAutoCommentAt(duint addr, const char* text); +BRIDGE_IMPEXP void DbgClearAutoCommentRange(duint start, duint end); +BRIDGE_IMPEXP bool DbgSetAutoLabelAt(duint addr, const char* text); +BRIDGE_IMPEXP void DbgClearAutoLabelRange(duint start, duint end); +BRIDGE_IMPEXP bool DbgSetAutoBookmarkAt(duint addr); +BRIDGE_IMPEXP void DbgClearAutoBookmarkRange(duint start, duint end); +BRIDGE_IMPEXP bool DbgSetAutoFunctionAt(duint start, duint end); +BRIDGE_IMPEXP void DbgClearAutoFunctionRange(duint start, duint end); //Gui defines #define GUI_PLUGIN_MENU 0 diff --git a/x64_dbg_dbg/_exports.cpp b/x64_dbg_dbg/_exports.cpp index 87de0309..71eb5a4a 100644 --- a/x64_dbg_dbg/_exports.cpp +++ b/x64_dbg_dbg/_exports.cpp @@ -934,6 +934,54 @@ extern "C" DLL_EXPORT uint _dbg_sendmessage(DBGMSG type, void* param1, void* par return (uint)false; } break; + + case DBG_SET_AUTO_COMMENT_AT: + { + return (uint)commentset((uint)param1, (const char*)param2, false); + } + break; + + case DBG_DELETE_AUTO_COMMENT_RANGE: + { + commentdelrange((uint)param1, (uint)param2); + } + break; + + case DBG_SET_AUTO_LABEL_AT: + { + return (uint)labelset((uint)param1, (const char*)param2, false); + } + break; + + case DBG_DELETE_AUTO_LABEL_RANGE: + { + labeldelrange((uint)param1, (uint)param2); + } + break; + + case DBG_SET_AUTO_BOOKMARK_AT: + { + return (uint)bookmarkset((uint)param1, false); + } + break; + + case DBG_DELETE_AUTO_BOOKMARK_RANGE: + { + bookmarkdelrange((uint)param1, (uint)param2); + } + break; + + case DBG_SET_AUTO_FUNCTION_AT: + { + return (uint)functionadd((uint)param1, (uint)param2, false); + } + break; + + case DBG_DELETE_AUTO_FUNCTION_RANGE: + { + functiondelrange((uint)param1, (uint)param2); + } + break; } return 0; diff --git a/x64_dbg_dbg/addrinfo.cpp b/x64_dbg_dbg/addrinfo.cpp index 3f8e0095..f99ae6f8 100644 --- a/x64_dbg_dbg/addrinfo.cpp +++ b/x64_dbg_dbg/addrinfo.cpp @@ -290,6 +290,29 @@ bool commentdel(uint addr) return (comments.erase(modhashfromva(addr))==1); } +void commentdelrange(uint start, uint end) +{ + bool bDelAll=(start==0 && end==~0); //0x00000000-0xFFFFFFFF + uint modbase=modbasefromaddr(start); + if(modbase!=modbasefromaddr(end)) + return; + start-=modbase; + end-=modbase; + CommentsInfo::iterator i=comments.begin(); + while(i!=comments.end()) + { + if(i->second.manual) //ignore manual + { + i++; + continue; + } + if(bDelAll || (i->second.addr>=start && i->second.addr0); } +void labeldelrange(uint start, uint end) +{ + bool bDelAll=(start==0 && end==~0); //0x00000000-0xFFFFFFFF + uint modbase=modbasefromaddr(start); + if(modbase!=modbasefromaddr(end)) + return; + start-=modbase; + end-=modbase; + LabelsInfo::iterator i=labels.begin(); + while(i!=labels.end()) + { + if(i->second.manual) //ignore manual + { + i++; + continue; + } + if(bDelAll || (i->second.addr>=start && i->second.addr0); } +void bookmarkdelrange(uint start, uint end) +{ + bool bDelAll=(start==0 && end==~0); //0x00000000-0xFFFFFFFF + uint modbase=modbasefromaddr(start); + if(modbase!=modbasefromaddr(end)) + return; + start-=modbase; + end-=modbase; + BookmarksInfo::iterator i=bookmarks.begin(); + while(i!=bookmarks.end()) + { + if(i->second.manual) //ignore manual + { + i++; + continue; + } + if(bDelAll || (i->second.addr>=start && i->second.addr0); } +void functiondelrange(uint start, uint end) +{ + bool bDelAll=(start==0 && end==~0); //0x00000000-0xFFFFFFFF + uint modbase=modbasefromaddr(start); + if(modbase!=modbasefromaddr(end)) + return; + start-=modbase; + end-=modbase; + FunctionsInfo::iterator i=functions.begin(); + while(i!=functions.end()) + { + if(i->second.manual) //ignore manual + { + i++; + continue; + } + if(bDelAll or !(i->second.start<=end and i->second.end>=start)) + functions.erase(i++); + else + i++; + } +} + void functioncachesave(JSON root) { const JSON jsonfunctions=json_array(); diff --git a/x64_dbg_dbg/addrinfo.h b/x64_dbg_dbg/addrinfo.h index a38b87ac..01d27c73 100644 --- a/x64_dbg_dbg/addrinfo.h +++ b/x64_dbg_dbg/addrinfo.h @@ -130,6 +130,7 @@ bool apienumexports(uint base, EXPORTENUMCALLBACK cbEnum); bool commentset(uint addr, const char* text, bool manual); bool commentget(uint addr, char* text); bool commentdel(uint addr); +void commentdelrange(uint start, uint end); void commentcachesave(JSON root); void commentcacheload(JSON root); @@ -137,12 +138,14 @@ bool labelset(uint addr, const char* text, bool manual); bool labelfromstring(const char* text, uint* addr); bool labelget(uint addr, char* text); bool labeldel(uint addr); +void labeldelrange(uint start, uint end); void labelcachesave(JSON root); void labelcacheload(JSON root); bool bookmarkset(uint addr, bool manual); bool bookmarkget(uint addr); bool bookmarkdel(uint addr); +void bookmarkdelrange(uint start, uint end); void bookmarkcachesave(JSON root); void bookmarkcacheload(JSON root); @@ -150,6 +153,7 @@ bool functionadd(uint start, uint end, bool manual); bool functionget(uint addr, uint* start, uint* end); bool functionoverlaps(uint start, uint end); bool functiondel(uint addr); +void functiondelrange(uint start, uint end); void functioncachesave(JSON root); void functioncacheload(JSON root);