x64dbg 在任何接受字符串的地方都使用 UTF-8 编码。如果您将字符串传递给 x64dbg,请确保将其转换为 UTF-8 编码。这将有助于减少编码错误。
此函数将调试器控制权返回给用户。当您编写需要 x64dbg 支持的解包程序时(例如在开发中),您将使用此函数。调用此函数会将调试状态设置为“暂停”,并且在用户使用run命令运行调试对象之前它不会返回。
参数:这个函数没有参数。返回值:此函数不返回值。
如果调试器应该跳过第一次机会异常,则此函数返回集合。这在创建运行调试对象的解包器或其他插件时很有用。
void _plugin_debugskipexceptions (
bool skip //跳过 标志
);
参数:跳过: 标记我们是否需要跳过第一次机会异常。返回值:此函数不返回值。
此函数向日志窗口打印一条消息。
void _plugin_logprintf (
const char * format , //格式化 字符串
... //附加 参数
);
参数:格式: 与 printf 具有相同规格的格式字符串。…: 附加参数(当格式字符串需要时)。
返回值:此函数不返回值。
此函数在日志窗口中打印一行。
void _plugin_logputs ( const char * text //要打印的文本 );
参数:文本: 要放入日志窗口的文本。此文本可以包含换行符。返回值:此函数不返回值。
此功能将一个新的子菜单添加到菜单中。
int _plugin_menuadd(
int hMenu, //menu handle to add the new child menu to
const char* title //child menu title
);
参数,hMenu:来自先前添加的子菜单或主插件菜单的菜单句柄。title :菜单标题。返回值:返回子菜单句柄(唯一),失败时返回 -1。
此功能向菜单添加菜单项。
bool _plugin_menuaddentry(
int hMenu, //menu handle to add the new child menu to
int hEntry, //plugin-wide identifier for the menu entry
const char* title //menu entry title
);
参数
hMenu:来自先前添加的子菜单或主插件菜单的菜单句柄。
hEntry:菜单项的插件范围标识符。这是您将在PLUG_CB_MENUENTRY回调结构中获得的值。
hEntry:菜单项标题。
返回值:当条目添加没有问题时返回true,否则返回false。
此功能将一个新的子菜单添加到菜单中。
bool _plugin_menuaddseparator(
int hMenu //menu handle to add the separator to
);
参数:hMenu :来自先前添加的子菜单或主插件菜单的菜单句柄。
返回值:成功返回真。
此功能从菜单中删除所有条目和子菜单。它不会删除菜单本身。
bool _plugin_menuclear (
int hMenu //menu handle of the menu to clear
);
参数
hMenu :来自先前添加的子菜单或主插件菜单的菜单句柄。
返回值: 成功返回真。
此函数为菜单项设置一个图标。
void _plugin_menuentryseticon (
int pluginHandle, //plugin handle
int hEntry, //handle of the menu entry
const ICONDATA* icon //icon data
);
参数
pluginHandle:调用插件的句柄。hEntry: 来自先前添加的子菜单或主插件菜单的菜单句柄。icon : 图标数据。有关定义,请参见bridgemain.h。
返回值:此函数不返回值。
此函数设置菜单项的选中状态。请注意,此功能将菜单项设置为可检查的,因此它会在点击时默认切换。如果您想要不同的行为,请确保在每次点击时以您想要的状态调用此函数。
void _plugin_menuentrysetchecked (
int pluginHandle, //plugin handle
int hEntry, //handle of the menu entry
bool checked //new checked state
);
参数,pluginHandle: 调用插件的句柄。hEntry: 来自先前添加的子菜单或主插件菜单的菜单句柄。checked :新的检查状态。返回值:此函数不返回值。
此功能为菜单设置图标。
void _plugin_menuseticon (
int hMenu, //handle of the menu
const ICONDATA* icon //icon data
);
参数
hMenu:来自先前添加的子菜单或主插件菜单的菜单句柄。icon: 图标数据。有关定义,请参见 bridgemain.h。
返回值:此函数不返回值。
此函数为插件注册事件回调。每个插件都可以为每个事件拥有自己的回调。同一个事件不可能有多个回调。
void _plugin_registercallback (
int pluginHandle , //插件 句柄
CBTYPE cbType , //事件 类型
CBPLUGIN cbPlugin //回调 函数
);
参数
插件句柄:调用插件的句柄。
类型:事件类型。这可以是以下任何值:
CB_INITDEBUG: , //回调信息:PLUG_CB_INITDEBUG*
CB_STOPDEBUG: , //回调信息:PLUG_CB_STOPDEBUG*
CB_CREATEPROCESS: , //回调信息:PLUG_CB_CREATEPROCESS*
CB_EXITPROCESS: , //回调信息:PLUG_CB_EXITPROCESS*
CB_CREATETHREAD: , //回调信息:PLUG_CB_CREATETHREAD*
CB_EXITTHREAD: , //回调信息:PLUG_CB_EXITTHREAD*
CB_SYSTEMBREAKPOINT: , //回调信息:PLUG_CB_SYSTEMBREAKPOINT*
CB_LOADDLL: , //回调信息:PLUG_CB_LOADDLL*
CB_UNLOADDLL: , //回调信息:PLUG_CB_UNLOADDLL*
CB_OUTPUTDEBUGSTRING: , //回调信息:PLUG_CB_OUTPUTDEBUGSTRING*
CB_EXCEPTION: , //回调信息:PLUG_CB_EXCEPTION*
CB_BREAKPOINT: , //回调信息:PLUG_CB_BREAKPOINT*
CB_PAUSEDEBUG: , //回调信息:PLUG_CB_PAUSEDEBUG*
CB_RESUMEDEBUG: , //回调信息:PLUG_CB_RESUMEDEBUG*
CB_STEPPED: , //回调信息:PLUG_CB_STEPPED*
CB_ATTACH: , //回调信息:PLUG_CB_ATTACHED*
CB_DETACH: , //回调信息:PLUG_CB_DETACHED*
CB_DEBUGEVENT: , //回调信息:PLUG_CB_DEBUGEVENT*
CB_MENUENTRY: , //回调信息:PLUG_CB_MENUENTRY*
CB_WINEVENT: , //回调信息:PLUG_CB_WINEVENT*
CB_WINEVENTGLOBAL: , //回调信息:PLUG_CB_WINEVENTGLOBAL*
CB_LOADDB: , //回调信息:PLUG_CB_LOADSAVEDB*
CB_SAVEDB: , //回调信息:PLUG_CB_LOADSAVEDB*
CB_FILTERSYMBOL: , //回调信息:PLUG_CB_FILTERSYMBOL*
CB_TRACEEXECUTE: , //回调信息:PLUG_CB_TRACEEXECUTE*
此函数注册一个命令以供在脚本或命令栏内使用。
bool _plugin_registercommand(
int pluginHandle, //plugin handle
const char* command, //command name
CBPLUGINCOMMAND cbCommand, //function that is called when the command is executed
bool debugonly //restrict the command to debug-only
);
参数:pluginHandle:调用插件的句柄。command:命令名称。cbCommand:使用以下 typedef 回调:debugonly:设置后,当没有正在调试的目标时,该命令将永远不会执行。返回值:当命令成功注册时,此函数返回 true,请务必检查这一点,其他插件可能已经注册了相同的命令。
此插件取消注册先前设置的回调。只能删除之前使用 _plugin_registercallback 设置的回调。
bool _plugin_unregistercallback(
int pluginHandle, //plugin handle
CBTYPE cbType //callback type to remove
);
参数
pluginHandle: 调用插件的句柄。cbType: 事件类型。这可以是以下任何值:
CB_INITDEBUG, CB_STOPDEBUG,CB_CREATEPROCESS,CB_EXITPROCESS,CB_CREATETHREAD,CB_EXITTHREAD,CB_SYSTEMBREAKPOINT,CB_LOADDLL,CB_UNLOADDLL,CB_OUTPUTDEBUGSTRING,CB_EXCEPTION,CB_BREAKPOINT,CB_PAUSEDEBUG,CB_RESUMEDEBUG,CB_STEPPED,CB_ATTACH,CB_DETACH, CB_DEBUGEVENT, CB_MENUENTRY, CB_WINEVENT, CB_WINEVENTGLOBAL
返回值 当回调被删除没有问题时,此函数返回 true。
此函数删除由插件设置的命令。只能删除您之前使用_plugin_registercommand注册的命令。
bool _plugin_unregistercommand(
int pluginHandle, //plugin handle
const char* command //command name
);
参数,插件句柄:调用插件的句柄。命令:命令名称。返回值,当回调被删除没有问题时,此函数返回 true。
等到调试器暂停。
bool _plugin_waituntilpaused();
参数:这个函数没有任何参数。返回值:如果调试对象仍处于活动状态,则此命令返回 true,如果调试对象已停止运行,则返回 false。
这个函数允许你散列一些数据。x64dbg 在各个地方都使用它。
bool _plugin_hash(
const void* data, //data to hash
duint size //size (in bytes) of the data to hash
);
参数,数据:要散列的数据;尺寸:要散列的数据的大小(以字节为单位)。返回值:返回哈希值。
本节介绍各种插件 SDK 回调结构。这些结构在事件回调中使用(使用 _plugin_registercallback 注册)。请注意,指针 ‘void* callbackInfo’ 从不为 NULL,但各种结构的成员可以为 NULL。还请记住,您不能在回调函数范围之外使用任何提供的指针。通常避免在回调中执行耗时的操作,在单独的线程中执行这些操作。您可以使用_plugin_registercallback函数注册回调。回调的类型定义是:
void CBPLUGIN(
CBTYPE bType //event type (useful when you use the same function for multiple events
void* callbackInfo //pointer to a structure of information (see below)
);
Contents:
PLUG_CB_INITDEBUG
PLUG_CB_STOPDEBUG
PLUG_CB_CREATEPROCESS
PLUG_CB_EXITPROCESS
PLUG_CB_CREATETHREAD
PLUG_CB_EXITTHREAD
PLUG_CB_SYSTEMBREAKPOINT
PLUG_CB_LOADDLL
PLUG_CB_UNLOADDLL
PLUG_CB_OUTPUTDEBUGSTRING
PLUG_CB_EXCEPTION
PLUG_CB_BREAKPOINT
PLUG_CB_PAUSEDEBUG
PLUG_CB_RESUMEDEBUG
PLUG_CB_STEPPED
PLUG_CB_ATTACH
PLUG_CB_DETACH
PLUG_CB_DEBUGEVENT
PLUG_CB_MENUENTRY
PLUG_CB_WINEVENT
PLUG_CB_WINEVENTGLOBAL
PLUG_CB_LOADSAVEDB
PLUG_CB_FILTERSYMBOL
PLUG_CB_TRACEEXECUTE
合理的脚本代码可以有效的提高工作效率,减少重复劳动。
如有疑问,敬请留言。