CE ( Cheat Engine ) 插 件 开 发 文 档 [译] (2)

2: 导出的函数
本章节将介绍每一个函数或变量是什么,还将告诉你怎么用它们。

2.1: sizeofExportedFunctions
它保存着结构体的长度,用它可以校验这个长度是否为你理想的长度。

2.2: ShowMessage
一个指向 CE 的 ShowMessage 函数的指针。这个函数将会在屏幕显示出仅仅带有文本和OK按钮。只有当被主线程调用时运行。

函数定义:
void showmessage(char* message);

message 指向一个以0结尾的字符串
无返回值

2.3: RegisterFunction
一个指向 CE 的 RegisterFunction 函数的指针。这个函数功能将注册一个当某一事件发生、在某些情况下还带来额外的菜单项目的回调函数。

函数定义:
int RegisterFunction(int pluginid, int functiontype, PVOID init);

pluginid 从 InitializePlugin 得到的插件ID
functiontype 你想注册的函数类型定义
init 保存一个依赖于函数类型的结构体的指针
函数类型:
0: 关于这个插件类型,右键单击地址列表时产生一个新的插件项目。
当用户点击这个菜单项目,如果某个地址被选中,你的回调程序将会得到一些关于这个选录的信息,会给你能力去改变这个地址,还有说明。

回调定义:
typedef BOOL (__stdcall *CEP_PLUGINTYPE0)(struct PLUGINTYPE0_RECORD *SelectedRecord);

如果你编辑了这个地址的说明将返回 TRUE

PLIGINTYPE0_RECORD 的定义:
struct PLUGINTYPE0_RECORD
{
  char *interpretedaddress;
//指向一个 255 字节长的字符串 (以 0 结尾)
  ULONG address;//它是一个只读的代表性地址。如果你想改变它,请改变 interpretedaddress 。
  BOOL ispointer;
//只读
  int countoffsets; //只读
  ULONG *offsets; //陈列一些范围从0到偏移量-1的信息 (只读)
  char *description; //指向一个 255 字节长的字符串
  char valuetype; //0=byte, 1=word, 2=dword, 3=float, 4=double, 5=bit, 6=int64, 7=string
  char size; //stringlength 或 bitlength;
};

必需初始化这个结构体指针,你才能通过:
struct PLUGINTYPE0_INIT
{
  char* name;
//用来描述用户菜单项目名字的以 0 结尾的字符串
  CEP_PLUGINTYPE0 callbackroutine; //指向 0 类型插件的回调程序
};


1: 关于这个类型,在内存查看器窗口顶部创建新的插件菜单。
当用户点击这个菜单项目时,你的回调程序将会得到这个反汇编窗口地址的指针,这个地址是当前在反汇编被选中的那行,在底部会有这个地址的 16 进制查看。 你可以改变它指向任何你喜欢的地址。

回调函数:
typedef BOOL (__stdcall *CEP_PLUGINTYPE1)(ULONG *disassembleraddress, ULONG *selected_disassembler_address, ULONG *hexviewaddress);

如果你改变了任何一个指针,返回 TRUE,内存查看器还将会执行更新。

必需初始化这个结构体指针,你才能通过:
struct PLUGINTYPE1_INIT
{
  char* name; //用来描述用户菜单项目名字的以 0 结尾的字符串
  CEP_PLUGINTYPE1 callbackroutine; //指向 1 类型插件的回调程序
};


2: 关于这个插件类型,每当一个调试结果发生在默认的窗口调试器,你将会得到一个通告。你的回调程序将会在 DebugEvent结构体 的 WaitForDebugEvent 返回为 TRUE 之后调用

callback definition:
typedef int (__stdcall *CEP_PLUGINTYPE2)(LPDEBUG_EVENT DebugEvent);

如果你想让 CE 和其它插件也同样处理这个结果,返回 0
如果你不想任何东西去处理它,返回 1. 你将必需调用 ContinueDebugEvent

必需初始化这个结构体指针,你才能通过:
struct PLUGINTYPE2_INIT
{
  CEP_PLUGINTYPE2 callbackroutine;
//指向 2 类型插件的回调程序
};


3: 关于这个插件类型,当内存监视被使用,和它察觉到了一个进程被创建时,你会得到通告。你的回调程序会得到这个进程的ID,和 PEProcess 地址。

回调定义:
typedef void (__stdcall *CEP_PLUGINTYPE3)(ULONG processid, ULONG peprocess);

无返回值


必需初始化这个结构体指针,你才能通过:
struct PLUGINTYPE3_INIT
{
  CEP_PLUGINTYPE3 callbackroutine;
//指向 3 类型插件的回调程序
};


4: 关于这个插件类型,当一个或多个指针被用户的操作所改变时,你将会得到通告。(不包括其它插件改变指针) 如果你想挂上一个 api 的话,这是有利的情况。

回调定义:
typedef void (__stdcall *CEP_PLUGINTYPE4)(int reserved);

reserved: 包含变动的部分,不是有用的...


必需初始化这个结构体指针,你才能通过:
struct PLUGINTYPE4_INIT
{
  CEP_PLUGINTYPE4 callbackroutine;
//指向 4 类型插件的回调程序
};

结果:
成功时,它就会返回一个当卸载一个回调时你需要的函数 ID 。
如果由于一些问题导致失败,,那和么这个结果将会是 -1 。

2.4: UnregisterFunction
一个指向 CE 的 UnregisterFunction 的函数. 这个函数将移除一个先前注册过的回调函数

函数定义:
BOOL UnregisterFunction(int pluginid, int functionid);

pluginid: 从 InitializePlugin 中得到的插件 ID
functionid:  RegisterFunction 的结果

如果这个函数被找到,并将它从插件中移除,那么返回 TRUE 。

2.5: OpenedProcessID
指向一个已成功打开进程的进程 ID 。
仅仅是进程 ID , 不如用 ID 和 HANDLE 指向同一个进程

2.6: OpenedProcessHandle
指向一个已成功打开进程的进程 句柄 。
这个句柄在许多函数中用到. 注意使它正确, 或者至少在用到它的函数中使它有效。


2.7: GetMainWindowHandle
一个指向 CE 的 UnregisterFunction 函数指针. 这个函数将移除一个先前注册过的回调函数

函数定义:
HANDLE GetMainWindowHandle();

返回一个主窗口的窗口句柄. 被一些基窗口操作. 更多的被高级窗口操作。如果你取得了主窗口的 TFORM 对象,推荐你在 Delphi 7 企业版中编写这个 Dll 。

2.8: AutoAssemble
指向 CE 的 AutoAssemble 函数。这个函数允许你给予一段自动汇编,它将会注入到当前选中的进程。

函数定义:
BOOL AutoAssemble(char *script);

script: 指向一个以 0 结尾的包含自动汇编脚本字符串缓冲。

如果汇编和注入成功,返回 TRUE

2.9: Assembler
指向 CE 的 Assembler 函数。这个函数会允许给予可以放入地址的单一的指令,它会返回你在缓冲中产生的字节,你指定的和它产生的字节。

函数定义:
BOOL Assembler(ULONG address, char* instruction, BYTE *output, int maxlength, int *returnedsize);

address: 地址说明应该被写入。 在有利的情况下 跳转、调用...
instruction: 指向包含你想汇编的汇编指命的字符串,以 0 结尾
output: 指向将要放入缓存的汇编字节
maxlength: 从汇编字节中接收的缓存的最大长度
returnedsize: 指向一个得到使用的字节数的整数

如果这个命令有效,并且有足够的空间那么返回 TRUE。不会返回为什么失败,所以推荐你至少给它 32 个字节空间。


2.10: Disassembler
指向 CE 的 Disassembler 函数. 这个函数允许你给它一个地址,并给你返回一个反汇编的输出。

函数定义:
BOOL Disassembler(ULONG address, char* output, int maxsize);

address: 你想要反汇编的指令的地址
output: 指向将要放入汇编语句的缓存
maxsize: 允许的语句的最大长度

如果有足够的内存去存贮这个语句,那么返回 TRUE
返回的字符串是像"地址 - 字节 - 指令"一样的组合


2.11: ChangeRegistersAtAddress
指向 CE 的 ChangeRegistersAtAddress 函数. 这个函数是在您想要指定和自己更换注册的地方设下断点。

函数定义:
BOOL ChangeRegistersAtAddress(ULONG address,struct REGISTERMODIFICATIONINFO *changereg);

address: 您想下断点的指令的地址
changereg: 指向一个你想保存所有变动的结构体

REGISTERMODIFICATIONINFO 结构体的定义:
struct REGISTERMODIFICATIONINFO
{
  ULONG address;
//断点地址
  BOOL change_eax;
  BOOL change_ebx;
  BOOL change_ecx;
  BOOL change_edx;
  BOOL change_esi;
  BOOL change_edi;
  BOOL change_ebp;
  BOOL change_esp;
  BOOL change_eip;
  BOOL change_cf;
  BOOL change_pf;
  BOOL change_af;
  BOOL change_zf;
  BOOL change_sf;
  BOOL change_of;
  ULONG new_eax;
  ULONG new_ebx;
  ULONG new_ecx;
  ULONG new_edx;
  ULONG new_esi;
  ULONG new_edi;
  ULONG new_ebp;
  ULONG new_esp;
  ULONG new_eip;
  BOOL new_cf;
  BOOL new_pf;
  BOOL new_af;
  BOOL new_zf;
  BOOL new_sf;
  BOOL new_of;
};


如果和计划的一样,那么返回 TRUE


2.12: InjectDLL
指向 CE 的 InjectDLL 函数。 这个函数会允许你使用 CE 的注入引擎去注入一个 dll 。

定义:
BOOL InjectDLL(char *dllname, char *functiontocall);

dllname: 注入 dll 的名字
functiontocall: 注入后调用的函数的名字。如果你不想要它,可以设空

如果注入成功,将返回 TRUE


2.13: FreezeMem
指向 CE 的 FreezeMem 函数。 这个函数将冻结这个选中地址的内存

函数定义:
int FreezeMem(ULONG address, int size);

address: 冻结的地址
size: 冻结地址的长度

返回一个你冻结程序的 ID ,随后你可以用它来解冻这个程序
警告: 如果这个进程变为冻结,仍然是活跃的。当一个进程被选中时,在这种情况下推荐去挂钩 OpenProcess 和监视变动还有解动

2.14: UnfreezeMem
指向 CE 的 UnfreezeMem 函数。 这个函数将停止一个早期冻结操作。

函数定义:
int UnfreezeMem(int freezeID);

freezeID: FreezeMem 指令的返回 ID

如果 ID 存在,并且解冻。那么返回 TRUE


2.15: FixMem
指向 CE 的 FixMem 函数。这个函数将在内存里扫描 C 自身的变化,并可能整理它们。

函数定义:
BOOL FixMem();

如果它没有崩溃,则返回 TRUE

2.16: ProcessList
指向 CE 的 ProcessList 函数. 它个函数将返回一个进程列表在你提供的缓存当中

函数定义:
BOOL ProcessList(char *listbuffer, int listsize);

listbuffer: 指向一个接收地址列表的缓存
listsize: 缓存长度

如果有足够的空间存放这个列表,则返回 TRUE

2.17: ReloadSettings
指向 CE 的 ReloadSettings 函数. 这个函数将为 CE 的刷新注册和申请设置

函数定义:
BOOL ReloadSettings();

返回 TRUE

2.18: GetAddressFromPointer
指向 CE 的 GetAddressFromPointer 函数. 这个函数将 基址+偏移量转换为最终地址

函数定义:
DWORD GetAddressFromPointer(ULONG baseaddress, int offsetcount, int* offsets);

返回指针指向的地址. 如果部分指针路径是难以辨认的,返回结果为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值