DBG: small cleanup in scriptapi and added 'scriptdll' command
This commit is contained in:
parent
45899f70d2
commit
f9e5d54346
|
@ -5,7 +5,7 @@ typedef struct
|
|||
{
|
||||
int count; //Number of element in the list.
|
||||
size_t size; //Size of list in bytes (used for type checking).
|
||||
void* data; //Pointer to the list contents. Must be deleted by the caller using BridgeFree (or List::Free).
|
||||
void* data; //Pointer to the list contents. Must be deleted by the caller using BridgeFree (or BridgeList::Free).
|
||||
} ListInfo;
|
||||
|
||||
#define ListOf(Type) ListInfo*
|
||||
|
@ -16,25 +16,25 @@ typedef struct
|
|||
|
||||
/**
|
||||
\brief A list object. This object is NOT thread safe.
|
||||
\tparam Type List contents type.
|
||||
\tparam Type BridgeList contents type.
|
||||
*/
|
||||
template<typename Type>
|
||||
class List
|
||||
class BridgeList
|
||||
{
|
||||
public:
|
||||
/**
|
||||
\brief List constructor.
|
||||
\brief BridgeList constructor.
|
||||
\param _freeData (Optional) the free function.
|
||||
*/
|
||||
explicit List()
|
||||
explicit BridgeList()
|
||||
{
|
||||
memset(&_listInfo, 0, sizeof(_listInfo));
|
||||
}
|
||||
|
||||
/**
|
||||
\brief List destructor.
|
||||
\brief BridgeList destructor.
|
||||
*/
|
||||
~List()
|
||||
~BridgeList()
|
||||
{
|
||||
Cleanup();
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ SCRIPT_EXPORT void Script::Bookmark::Clear()
|
|||
BookmarkClear();
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Bookmark::GetList(ListOf(CommentInfo) listInfo)
|
||||
SCRIPT_EXPORT bool Script::Bookmark::GetList(ListOf(BookmarkInfo) list)
|
||||
{
|
||||
std::vector<BOOKMARKSINFO> bookmarkList;
|
||||
BookmarkGetList(bookmarkList);
|
||||
|
@ -65,5 +65,5 @@ SCRIPT_EXPORT bool Script::Bookmark::GetList(ListOf(CommentInfo) listInfo)
|
|||
scriptComment.manual = bookmark.manual;
|
||||
bookmarkScriptList.push_back(scriptComment);
|
||||
}
|
||||
return List<BookmarkInfo>::CopyData(listInfo, bookmarkScriptList);
|
||||
return BridgeList<BookmarkInfo>::CopyData(list, bookmarkScriptList);
|
||||
}
|
|
@ -21,7 +21,7 @@ namespace Script
|
|||
SCRIPT_EXPORT bool Delete(duint addr);
|
||||
SCRIPT_EXPORT void DeleteRange(duint start, duint end);
|
||||
SCRIPT_EXPORT void Clear();
|
||||
SCRIPT_EXPORT bool GetList(ListOf(BookmarkInfo) listInfo); //caller has the responsibility to free the list
|
||||
SCRIPT_EXPORT bool GetList(ListOf(BookmarkInfo) list); //caller has the responsibility to free the list
|
||||
}; //Bookmark
|
||||
}; //Script
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ SCRIPT_EXPORT void Script::Comment::Clear()
|
|||
CommentClear();
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Comment::GetList(ListOf(CommentInfo) listInfo)
|
||||
SCRIPT_EXPORT bool Script::Comment::GetList(ListOf(CommentInfo) list)
|
||||
{
|
||||
std::vector<COMMENTSINFO> commentList;
|
||||
CommentGetList(commentList);
|
||||
|
@ -67,5 +67,5 @@ SCRIPT_EXPORT bool Script::Comment::GetList(ListOf(CommentInfo) listInfo)
|
|||
scriptComment.manual = comment.manual;
|
||||
commentScriptList.push_back(scriptComment);
|
||||
}
|
||||
return List<CommentInfo>::CopyData(listInfo, commentScriptList);
|
||||
return BridgeList<CommentInfo>::CopyData(list, commentScriptList);
|
||||
}
|
|
@ -22,7 +22,7 @@ namespace Script
|
|||
SCRIPT_EXPORT bool Delete(duint addr);
|
||||
SCRIPT_EXPORT void DeleteRange(duint start, duint end);
|
||||
SCRIPT_EXPORT void Clear();
|
||||
SCRIPT_EXPORT bool GetList(ListOf(CommentInfo) listInfo); //caller has the responsibility to free the list
|
||||
SCRIPT_EXPORT bool GetList(ListOf(CommentInfo) list); //caller has the responsibility to free the list
|
||||
}; //Comment
|
||||
}; //Script
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ SCRIPT_EXPORT void Script::Function::Clear()
|
|||
FunctionClear();
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Function::GetList(ListOf(FunctionInfo) listInfo)
|
||||
SCRIPT_EXPORT bool Script::Function::GetList(ListOf(FunctionInfo) list)
|
||||
{
|
||||
std::vector<FUNCTIONSINFO> functionList;
|
||||
FunctionGetList(functionList);
|
||||
|
@ -74,5 +74,5 @@ SCRIPT_EXPORT bool Script::Function::GetList(ListOf(FunctionInfo) listInfo)
|
|||
scriptFunction.instructioncount = function.instructioncount;
|
||||
functionScriptList.push_back(scriptFunction);
|
||||
}
|
||||
return List<FunctionInfo>::CopyData(listInfo, functionScriptList);
|
||||
return BridgeList<FunctionInfo>::CopyData(list, functionScriptList);
|
||||
}
|
|
@ -24,7 +24,7 @@ namespace Script
|
|||
SCRIPT_EXPORT bool Delete(duint address);
|
||||
SCRIPT_EXPORT void DeleteRange(duint start, duint end);
|
||||
SCRIPT_EXPORT void Clear();
|
||||
SCRIPT_EXPORT bool GetList(ListOf(FunctionInfo) listInfo); //caller has the responsibility to free the list
|
||||
SCRIPT_EXPORT bool GetList(ListOf(FunctionInfo) list); //caller has the responsibility to free the list
|
||||
}; //Function
|
||||
}; //Script
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ SCRIPT_EXPORT void Script::Label::Clear()
|
|||
LabelClear();
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Label::GetList(ListOf(LabelInfo) listInfo)
|
||||
SCRIPT_EXPORT bool Script::Label::GetList(ListOf(LabelInfo) list)
|
||||
{
|
||||
std::vector<LABELSINFO> labelList;
|
||||
LabelGetList(labelList);
|
||||
|
@ -72,5 +72,5 @@ SCRIPT_EXPORT bool Script::Label::GetList(ListOf(LabelInfo) listInfo)
|
|||
scriptLabel.manual = label.manual;
|
||||
labelScriptList.push_back(scriptLabel);
|
||||
}
|
||||
return List<LabelInfo>::CopyData(listInfo, labelScriptList);
|
||||
return BridgeList<LabelInfo>::CopyData(list, labelScriptList);
|
||||
}
|
|
@ -23,7 +23,7 @@ namespace Script
|
|||
SCRIPT_EXPORT bool Delete(duint addr);
|
||||
SCRIPT_EXPORT void DeleteRange(duint start, duint end);
|
||||
SCRIPT_EXPORT void Clear();
|
||||
SCRIPT_EXPORT bool GetList(ListOf(LabelInfo) listInfo); //caller has the responsibility to free the list
|
||||
SCRIPT_EXPORT bool GetList(ListOf(LabelInfo) list); //caller has the responsibility to free the list
|
||||
}; //Label
|
||||
}; //Script
|
||||
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
#include "module.h"
|
||||
#include "debugger.h"
|
||||
|
||||
SCRIPT_EXPORT bool Script::Module::InfoFromAddr(duint addr, Script::Module::ModuleInfo* info)
|
||||
SCRIPT_EXPORT bool Script::Module::InfoFromAddr(duint addr, ModuleInfo* info)
|
||||
{
|
||||
SHARED_ACQUIRE(LockModules);
|
||||
MODINFO* modInfo = ModInfoFromAddr(addr);
|
||||
auto modInfo = ModInfoFromAddr(addr);
|
||||
if(!info || !modInfo)
|
||||
return false;
|
||||
info->base = modInfo->base;
|
||||
|
@ -19,9 +19,9 @@ SCRIPT_EXPORT bool Script::Module::InfoFromAddr(duint addr, Script::Module::Modu
|
|||
return true;
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Module::InfoFromName(const char* name, Script::Module::ModuleInfo* info)
|
||||
SCRIPT_EXPORT bool Script::Module::InfoFromName(const char* name, ModuleInfo* info)
|
||||
{
|
||||
return Module::InfoFromAddr(Module::BaseFromName(name), info);
|
||||
return InfoFromAddr(BaseFromName(name), info);
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT duint Script::Module::BaseFromAddr(duint addr)
|
||||
|
@ -41,7 +41,7 @@ SCRIPT_EXPORT duint Script::Module::SizeFromAddr(duint addr)
|
|||
|
||||
SCRIPT_EXPORT duint Script::Module::SizeFromName(const char* name)
|
||||
{
|
||||
return Module::SizeFromAddr(Module::BaseFromName(name));
|
||||
return SizeFromAddr(BaseFromName(name));
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Module::NameFromAddr(duint addr, char* name)
|
||||
|
@ -56,7 +56,7 @@ SCRIPT_EXPORT bool Script::Module::PathFromAddr(duint addr, char* path)
|
|||
|
||||
SCRIPT_EXPORT bool Script::Module::PathFromName(const char* name, char* path)
|
||||
{
|
||||
return Module::PathFromAddr(Module::BaseFromName(name), path);
|
||||
return PathFromAddr(BaseFromName(name), path);
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT duint Script::Module::EntryFromAddr(duint addr)
|
||||
|
@ -66,28 +66,28 @@ SCRIPT_EXPORT duint Script::Module::EntryFromAddr(duint addr)
|
|||
|
||||
SCRIPT_EXPORT duint Script::Module::EntryFromName(const char* name)
|
||||
{
|
||||
return Module::EntryFromAddr(Module::BaseFromName(name));
|
||||
return EntryFromAddr(BaseFromName(name));
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT int Script::Module::SectionCountFromAddr(duint addr)
|
||||
{
|
||||
SHARED_ACQUIRE(LockModules);
|
||||
MODINFO* modInfo = ModInfoFromAddr(addr);
|
||||
auto modInfo = ModInfoFromAddr(addr);
|
||||
return modInfo ? int(modInfo->sections.size()) : 0;
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT int Script::Module::SectionCountFromName(const char* name)
|
||||
{
|
||||
return Module::SectionCountFromAddr(Module::BaseFromName(name));
|
||||
return SectionCountFromAddr(BaseFromName(name));
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Module::SectionFromAddr(duint addr, int number, ModuleSectionInfo* section)
|
||||
{
|
||||
SHARED_ACQUIRE(LockModules);
|
||||
MODINFO* modInfo = ModInfoFromAddr(addr);
|
||||
auto modInfo = ModInfoFromAddr(addr);
|
||||
if(!section || !modInfo || number < 0 || number >= int(modInfo->sections.size()))
|
||||
return false;
|
||||
const MODSECTIONINFO & secInfo = modInfo->sections.at(number);
|
||||
const auto & secInfo = modInfo->sections.at(number);
|
||||
section->addr = secInfo.addr;
|
||||
section->size = secInfo.size;
|
||||
strcpy_s(section->name, secInfo.name);
|
||||
|
@ -96,13 +96,13 @@ SCRIPT_EXPORT bool Script::Module::SectionFromAddr(duint addr, int number, Modul
|
|||
|
||||
SCRIPT_EXPORT bool Script::Module::SectionFromName(const char* name, int number, ModuleSectionInfo* section)
|
||||
{
|
||||
return Module::SectionFromAddr(Module::BaseFromName(name), number, section);
|
||||
return SectionFromAddr(BaseFromName(name), number, section);
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Module::SectionListFromAddr(duint addr, ListOf(ModuleSectionInfo) listInfo)
|
||||
SCRIPT_EXPORT bool Script::Module::SectionListFromAddr(duint addr, ListOf(ModuleSectionInfo) list)
|
||||
{
|
||||
SHARED_ACQUIRE(LockModules);
|
||||
MODINFO* modInfo = ModInfoFromAddr(addr);
|
||||
auto modInfo = ModInfoFromAddr(addr);
|
||||
if(!modInfo)
|
||||
return false;
|
||||
std::vector<ModuleSectionInfo> scriptSectionList;
|
||||
|
@ -115,17 +115,17 @@ SCRIPT_EXPORT bool Script::Module::SectionListFromAddr(duint addr, ListOf(Module
|
|||
strcpy_s(scriptSection.name, section.name);
|
||||
scriptSectionList.push_back(scriptSection);
|
||||
}
|
||||
return List<ModuleSectionInfo>::CopyData(listInfo, scriptSectionList);
|
||||
return BridgeList<ModuleSectionInfo>::CopyData(list, scriptSectionList);
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Module::SectionListFromName(const char* name, ListOf(ModuleSectionInfo) listInfo)
|
||||
SCRIPT_EXPORT bool Script::Module::SectionListFromName(const char* name, ListOf(ModuleSectionInfo) list)
|
||||
{
|
||||
return Module::SectionListFromAddr(Module::BaseFromName(name), listInfo);
|
||||
return SectionListFromAddr(BaseFromName(name), list);
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Module::GetMainModuleInfo(ModuleInfo* info)
|
||||
{
|
||||
return Module::InfoFromAddr(Module::GetMainModuleBase(), info);
|
||||
return InfoFromAddr(GetMainModuleBase(), info);
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT duint Script::Module::GetMainModuleBase()
|
||||
|
@ -135,35 +135,35 @@ SCRIPT_EXPORT duint Script::Module::GetMainModuleBase()
|
|||
|
||||
SCRIPT_EXPORT duint Script::Module::GetMainModuleSize()
|
||||
{
|
||||
return Module::SizeFromAddr(Module::GetMainModuleBase());
|
||||
return SizeFromAddr(GetMainModuleBase());
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT duint Script::Module::GetMainModuleEntry()
|
||||
{
|
||||
return Module::EntryFromAddr(Module::GetMainModuleBase());
|
||||
return EntryFromAddr(GetMainModuleBase());
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT int Script::Module::GetMainModuleSectionCount()
|
||||
{
|
||||
return Module::SectionCountFromAddr(Module::GetMainModuleBase());
|
||||
return SectionCountFromAddr(GetMainModuleBase());
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Module::GetMainModuleName(char* name)
|
||||
{
|
||||
return Module::NameFromAddr(Module::GetMainModuleBase(), name);
|
||||
return NameFromAddr(GetMainModuleBase(), name);
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Module::GetMainModulePath(char* path)
|
||||
{
|
||||
return Module::PathFromAddr(Module::GetMainModuleBase(), path);
|
||||
return PathFromAddr(GetMainModuleBase(), path);
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Module::GetMainModuleSectionList(ListOf(ModuleSectionInfo) listInfo)
|
||||
SCRIPT_EXPORT bool Script::Module::GetMainModuleSectionList(ListOf(ModuleSectionInfo) list)
|
||||
{
|
||||
return Module::SectionListFromAddr(Module::GetMainModuleBase(), listInfo);
|
||||
return SectionListFromAddr(GetMainModuleBase(), list);
|
||||
}
|
||||
|
||||
SCRIPT_EXPORT bool Script::Module::GetList(ListOf(ModuleInfo) listInfo)
|
||||
SCRIPT_EXPORT bool Script::Module::GetList(ListOf(ModuleInfo) list)
|
||||
{
|
||||
std::vector<MODINFO> modList;
|
||||
ModGetList(modList);
|
||||
|
@ -181,5 +181,5 @@ SCRIPT_EXPORT bool Script::Module::GetList(ListOf(ModuleInfo) listInfo)
|
|||
strcpy_s(scriptMod.path, mod.path);
|
||||
modScriptList.push_back(scriptMod);
|
||||
}
|
||||
return List<ModuleInfo>::CopyData(listInfo, modScriptList);
|
||||
return BridgeList<ModuleInfo>::CopyData(list, modScriptList);
|
||||
}
|
|
@ -31,7 +31,7 @@ namespace Script
|
|||
SCRIPT_EXPORT duint SizeFromAddr(duint addr);
|
||||
SCRIPT_EXPORT duint SizeFromName(const char* name);
|
||||
SCRIPT_EXPORT bool NameFromAddr(duint addr, char* name); //name[MAX_MODULE_SIZE]
|
||||
SCRIPT_EXPORT bool PathFromAddr(duint addr, char* path); //path[MAX_MODULE_PATH_SIZE]
|
||||
SCRIPT_EXPORT bool PathFromAddr(duint addr, char* path); //path[MAX_PATH]
|
||||
SCRIPT_EXPORT bool PathFromName(const char* name, char* path); //path[MAX_PATH]
|
||||
SCRIPT_EXPORT duint EntryFromAddr(duint addr);
|
||||
SCRIPT_EXPORT duint EntryFromName(const char* name);
|
||||
|
@ -39,8 +39,8 @@ namespace Script
|
|||
SCRIPT_EXPORT int SectionCountFromName(const char* name);
|
||||
SCRIPT_EXPORT bool SectionFromAddr(duint addr, int number, ModuleSectionInfo* section);
|
||||
SCRIPT_EXPORT bool SectionFromName(const char* name, int number, ModuleSectionInfo* section);
|
||||
SCRIPT_EXPORT bool SectionListFromAddr(duint addr, ListOf(ModuleSectionInfo) listInfo);
|
||||
SCRIPT_EXPORT bool SectionListFromName(const char* name, ListOf(ModuleSectionInfo) listInfo);
|
||||
SCRIPT_EXPORT bool SectionListFromAddr(duint addr, ListOf(ModuleSectionInfo) list);
|
||||
SCRIPT_EXPORT bool SectionListFromName(const char* name, ListOf(ModuleSectionInfo) list);
|
||||
SCRIPT_EXPORT bool GetMainModuleInfo(ModuleInfo* info);
|
||||
SCRIPT_EXPORT duint GetMainModuleBase();
|
||||
SCRIPT_EXPORT duint GetMainModuleSize();
|
||||
|
@ -48,8 +48,8 @@ namespace Script
|
|||
SCRIPT_EXPORT int GetMainModuleSectionCount();
|
||||
SCRIPT_EXPORT bool GetMainModuleName(char* name); //name[MAX_MODULE_SIZE]
|
||||
SCRIPT_EXPORT bool GetMainModulePath(char* path); //path[MAX_PATH]
|
||||
SCRIPT_EXPORT bool GetMainModuleSectionList(ListOf(ModuleSectionInfo) listInfo); //caller has the responsibility to free the list
|
||||
SCRIPT_EXPORT bool GetList(ListOf(ModuleInfo) listInfo); //caller has the responsibility to free the list
|
||||
SCRIPT_EXPORT bool GetMainModuleSectionList(ListOf(ModuleSectionInfo) list); //caller has the responsibility to free the list
|
||||
SCRIPT_EXPORT bool GetList(ListOf(ModuleInfo) list); //caller has the responsibility to free the list
|
||||
}; //Module
|
||||
}; //Script
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
bool Script::Symbol::GetList(ListOf(SymbolInfo) list)
|
||||
{
|
||||
List<Label::LabelInfo> labels;
|
||||
BridgeList<Label::LabelInfo> labels;
|
||||
if(!Label::GetList(&labels))
|
||||
return false;
|
||||
std::vector<SymbolInfo> symbols;
|
||||
|
@ -20,5 +20,5 @@ bool Script::Symbol::GetList(ListOf(SymbolInfo) list)
|
|||
symbols.push_back(symbol);
|
||||
}
|
||||
//TODO: enumerate actual symbols + virtual symbols (sub_XXXXXX) + imports + exports in addition to user-defined labels.
|
||||
return List<SymbolInfo>::CopyData(list, symbols);
|
||||
return BridgeList<SymbolInfo>::CopyData(list, symbols);
|
||||
}
|
||||
|
|
|
@ -56,6 +56,18 @@ static CMDRESULT cbPrintf(int argc, char* argv[])
|
|||
return STATUS_CONTINUE;
|
||||
}
|
||||
|
||||
static bool DbgScriptDllExec(const char* dll);
|
||||
|
||||
static CMDRESULT cbScriptDll(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs("not enough arguments!");
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
return DbgScriptDllExec(argv[1]) ? STATUS_CONTINUE : STATUS_ERROR;
|
||||
}
|
||||
|
||||
static void registercommands()
|
||||
{
|
||||
cmdinit();
|
||||
|
@ -215,6 +227,7 @@ static void registercommands()
|
|||
dbgcmdnew("findallmem\1findmemall", cbInstrFindMemAll, true); //memory map pattern find
|
||||
dbgcmdnew("setmaxfindresult\1findsetmaxresult", cbInstrSetMaxFindResult, false); //set the maximum number of occurences found
|
||||
dbgcmdnew("savedata", cbInstrSavedata, true); //save data to disk
|
||||
dbgcmdnew("scriptdll\1dllscript", cbScriptDll, false); //execute a script DLL
|
||||
}
|
||||
|
||||
static bool cbCommandProvider(char* cmd, int maxlen)
|
||||
|
|
Loading…
Reference in New Issue