拓冰建站拓冰建站
首页 / 资讯中心 / 正文

x64dbg 插件开发指南:GuiReferenceSetSearchStartCol 设置 Reference 视图搜索起始列

逆向工程调试器开发工具应用安全【免费下载链接】x64dbgAn open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis.项目地址https://gitcode.com/gh_mirrors/x6/x64dbg点击查看免费下载导读GuiReferenceSetSearchStartCol是 x64dbg 调试器提供给插件与调试器模块的 GUI 桥接 APIBridge API之一用于设置当前 Reference 视图Reference View即搜索结果列表视图中文本搜索/过滤所作用的起始列0 起始索引。在 x64dbg 中Reference 视图承载了字符串引用refstr、函数指针引用reffuncptr、常量引用refinit等大量搜索结果默认情况下搜索会作用于多个列通过本 API 可以精确限定搜索列例如只搜索字符串列或函数指针列避免命中地址、反汇编等无关列。读完本文你将掌握该 API 的声明与语义、从调试器到 GUI 的完整调用链、内置命令中的真实用法以及如何在自定义插件中控制 Reference 视图的搜索行为。API 原型与基本语义该函数在桥接头文件 src/bridge/bridgemain.h 中声明BRIDGE_IMPEXP void GuiReferenceSetSearchStartCol(int col);参数col整数表示用于搜索的列的索引0 起始即第 0 列是第一个列。例如传入1表示从第 1 列开始搜索传入2表示从第 2 列开始搜索。返回值该函数不返回任何值void。适用位置该函数是 GUI 桥接函数既可以被调试器src/dbg内部模块调用也可以被加载到 x64dbg 中的插件通过头文件声明直接调用。它属于GuiReference*系列 API 家族专门用于操作当前 Reference 视图实例。最小调用示例GuiReferenceSetSearchStartCol(1); // 将搜索起始列设为第 1 列0 起始源码级实现从 Bridge 到 ReferenceView 的完整调用链该 API 虽然是 GUI 函数但它的实现遵循 x64dbg 标准的调试器进程 → Bridge 消息 → GUI 进程异步消息模式通过_gui_sendmessage将请求投递给 GUI 线程处理。第一步调试器侧桥接实现在 src/bridge/bridgemain.cpp 中该函数只是把col打包成消息参数发送出去BRIDGE_IMPEXP void GuiReferenceSetSearchStartCol(int col) { _gui_sendmessage(GUI_REF_SETSEARCHSTARTCOL, (void*)(duint)col, 0); }可以看到消息类型为GUI_REF_SETSEARCHSTARTCOL第二个参数0表示该消息不使用附加的字符串/指针参数。值得注意的是这里将int强制转换为duint即 x64dbg 的duint无符号整数类型再作为指针传递这是 x64dbg Bridge 消息机制的通用约定。第二步GUI 侧消息分发GUI 进程在 src/gui/Src/Bridge/Bridge.cpp 中处理该消息case GUI_REF_SETSEARCHSTARTCOL: if(mReferenceManager-currentReferenceView()) mReferenceManager-currentReferenceView()-setSearchStartCol((duint)param1); break;这里有两个关键行为通过mReferenceManager-currentReferenceView()获取当前激活的Reference 视图实例若当前没有 Reference 视图返回空指针则直接忽略该消息将参数转换为duint后调用视图的setSearchStartCol方法。第三步视图层最终落地setSearchStartCol的最终实现在 src/gui/Src/BasicView/StdSearchListView.cppvoid StdSearchListView::setSearchStartCol(duint col) { if(col stdList()-getColumnCount()) mSearchStartCol col; }从源码可以推断一个重要的边界行为当传入的列索引大于等于当前视图的实际列数getColumnCount()时该设置会被静默忽略保持原有的搜索起始列不变。因此插件在调用前应确保列索引不超过当前 Reference 视图的列数。该搜索起始列随后被搜索/过滤逻辑使用见 src/gui/Src/BasicView/SearchListView.cppmAbstractSearchList-filter(filterText, filterType, mSearchStartCol);即用户在搜索框中输入过滤文本时会以mSearchStartCol作为起始列进行包含匹配也支持正则与大小写敏感模式取决于搜索框勾选状态。此外从 src/gui/Src/BasicView/ReferenceView.cpp 可以看到Reference 视图的构造函数中mSearchStartCol的默认值为1即默认从第 1 列通常是反汇编/内容列开始搜索GuiReferenceSetSearchStartCol正是插件/调试器模块用来覆盖这一默认值的入口。内置命令中的真实用法refstr 与 reffuncptr该 API 最典型的应用场景是 x64dbg 调试器内置的引用搜索命令。在 src/dbg/commands/cmd-searching.cpp 中字符串引用搜索refstrcbRefStr回调在初始化 Reference 视图时依次添加了 4 个列Address地址、Disassembly反汇编、String Address字符串地址、String字符串随后调用见 cmd-searching.cppGuiReferenceInitialize(refinfo-name); GuiReferenceAddColumn(2 * sizeof(duint), GuiTranslateText(QT_TRANSLATE_NOOP(DBG, Address))); GuiReferenceAddColumn(50, GuiTranslateText(QT_TRANSLATE_NOOP(DBG, Disassembly))); GuiReferenceAddColumn(2 * sizeof(duint), GuiTranslateText(QT_TRANSLATE_NOOP(DBG, String Address))); GuiReferenceAddColumn(0, GuiTranslateText(QT_TRANSLATE_NOOP(DBG, String))); GuiReferenceAddCommand(GuiTranslateText(QT_TRANSLATE_NOOP(DBG, Follow in Disassembly and Dump)), disasm $0;dump $2); GuiReferenceAddCommand(GuiTranslateText(QT_TRANSLATE_NOOP(DBG, Follow string in Dump)), dump $2); GuiReferenceSetSearchStartCol(2); //only search the strings GuiReferenceSetRowCount(0); GuiReferenceReloadData();这里将搜索起始列设为2源码注释明确写着//only search the strings——即只搜索字符串地址列第 2 列以及后续的字符串列第 3 列而不会在地址和反汇编列中误命中。这正是该 API 的核心用途把搜索范围限定在用户关心的数据列上。函数指针引用搜索reffuncptr类似的cbRefFuncPtr回调添加了Address、Disassembly、Function pointer、Label四个列并设置见 cmd-searching.cppGuiReferenceSetSearchStartCol(2); //only search the function pointers源码注释//only search the function pointers表明这里同样把搜索限定在函数指针列第 2 列与标签列第 3 列。这两个内置用例很好地演示了col参数与列布局的配合关系列索引必须与调用方此前通过GuiReferenceAddColumn添加的列顺序一一对应一般将最需要搜索的数据列排在其索引位置之后。插件中的完整使用流程对于 x64dbg 插件开发者调用GuiReferenceSetSearchStartCol的完整流程通常如下// 1. 初始化 Reference 视图并添加列 GuiReferenceInitialize(My Search Results); GuiReferenceAddColumn(2 * sizeof(duint), Address); GuiReferenceAddColumn(50, Disassembly); GuiReferenceAddColumn(2 * sizeof(duint), Value); // 2. 将搜索起始列设为 Value 列索引 2只搜索该列及之后的内容 GuiReferenceSetSearchStartCol(2); // 3. 设置行数与填充数据 GuiReferenceSetRowCount(100); for(int i 0; i 100; i) { GuiReferenceSetCellContent(i, 0, ...); GuiReferenceSetCellContent(i, 1, ...); GuiReferenceSetCellContent(i, 2, ...); } // 4. 通知视图重新加载数据 GuiReferenceReloadData();实战要点调用时机应在GuiReferenceInitialize之后、用户开始输入搜索文本之前调用确保搜索框过滤时立即生效索引边界col必须小于当前视图列数getColumnCount()否则该设置会被 StdSearchListView.cpp 中的边界检查静默忽略结合其他 API本函数通常与GuiReferenceInitialize、GuiReferenceAddColumn、GuiReferenceSetRowCount、GuiReferenceSetCellContent、GuiReferenceReloadData配套使用共同构建一个可交互、可搜索的 Reference 视图。相关 API 家族GuiReferenceSetSearchStartCol隶属于 x64dbg 的 Reference 视图桥接 API 家族相关函数的完整说明可参阅 docs/developers/functions/guiGuiReferenceAddColumn向 Reference 视图添加列决定列的数量与索引顺序GuiReferenceDeleteAllColumns删除所有列GuiReferenceGetCellContent读取指定单元格内容GuiReferenceGetRowCount获取当前行数GuiReferenceInitialize初始化 Reference 视图标题GuiReferenceReloadData重载/刷新视图数据GuiReferenceSetCellContent写入指定单元格内容GuiReferenceSetCurrentTaskProgress设置当前任务进度与标题GuiReferenceSetProgress设置总进度条GuiReferenceSetRowCount设置行数GuiReferenceSetSingleSelection设置单选选中行总结GuiReferenceSetSearchStartCol是控制 x64dbg Reference 视图搜索粒度的关键桥接 API调试器侧通过_gui_sendmessage(GUI_REF_SETSEARCHSTARTCOL, ...)投递消息GUI 侧在 Bridge.cpp 分发给当前 Reference 视图最终由 StdSearchListView.cpp 落盘为mSearchStartCol并参与 SearchListView.cpp 的过滤逻辑。x64dbg 内置的refstr与reffuncptr命令分别以col 2将搜索限定在字符串列与函数指针列是理解该 API 语义的最佳范例。开发插件时只需记住0 起始索引、不得越界、在填充数据前调用三条原则即可精准控制 Reference 视图的搜索行为。赞分享逆向工程调试器开发工具应用安全【免费下载链接】x64dbgAn open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis.项目地址https://gitcode.com/gh_mirrors/x6/x64dbg点击查看免费下载相关推荐x64dbg 插件开发GuiReferenceInitialize 函数详解——创建 Reference View 视图的入口函数x64dbg 插件开发GuiReferenceInitialize 函数详解——创建 Reference View 视图的入口函数 本文围绕 x64dbg 开逆向工程调试器开发工具应用安全x64dbg 插件 GUI APIGuiReferenceDeleteAllColumns 参考视图列重置接口全解x64dbg 插件 GUI APIGuiReferenceDeleteAllColumns 参考视图列重置接口全解 GuiReferenceDeleteAll逆向工程调试器开发工具应用安全x64dbg 插件与脚本开发指南GuiFocusView 视图切换 API 详解x64dbg 插件与脚本开发指南GuiFocusView 视图切换 API 详解 导读 GuiFocusView 是 x64dbg 桥接层Bridge提供逆向工程调试器开发工具应用安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门