C语⾔⼈造指针,易语⾔置⼊CE⾃动脚本游戏修改模块源码
模块名称:游戏修改模块 V1.0
模块 MD5:8ffd2ec390f0b7f21fef94012b4f1484
模块⼤⼩:0.07296371459961 MB(74.71484375 KB)
在AA脚本中可⽤如下⽅式加⼊⾃定义符号
registersymbol(pointer)
alloc(pointer,4)
或者也可只⽤⼀⾏
globalalloc(pointer,4)
以上两种⽅式将pointer这个符号加⼊⾃定义符号表
并且动态分配了4字节的内存空间给pointer
我们不必知道这个4字节空间的正确地址
我们只要⽤pointer这个名称就可以代表该地址了
接下来可以把pointer当做⼈造指针, 在其内放⼊游戏数据的有效地址
由于⾃定义符号表为所有使⽤AA引擎的脚本共享
包含所有其他AA脚本, 在本脚本启动以后, 都可以直接以[pointer]当做地址使⽤
由于pointer是代表着由alloc分配的动态地址
⼈造指针实际是存放在地址pointer处
因此⼀般都是以[pointer]的形式来使⽤
也可以使⽤GetAddress函数, 直接取得pointer⾃⾝的地址, 或其内⼈造指针[pointer]的地址
当不再使⽤pointer的时候, 可以如下⽅式取消pointer符号名及分配的内存空间
unregistersymbol(pointer)
dealloc(pointer)
由于使⽤了OD的汇编编译器, 其汇编代码格式较CE严格
不过我已经加⼊了汇编代码⾃动修正功能
例如原先必须写为 mov dword ptr [exa+ebx*4+0c],0c8 的代码
已经可以直接写为 mov [eax+ebx*4+c],c8
如果还是出现编译错误, 表⽰⾃动修正⽆法修正, 请依下列⽅式⾃⾏修正代码
出现"Unknown identifier"编译错误时:
可能为汇编编译器⽆法正确识别寄存器, 指令, 与数值
解决⽅法为, 所有数值, 如果是A到F等英⽂字母开头的, 前⾯加⼀个0
如c要写成0c, A8B300要写成0A8B300
出现"Command does not support given operands"
或"Unrecognized command"错误时:
可能为数据长度错误
⼀般情况, 如果没有指名长度, 则将⼀律视为4字节长度
例如 mov [esi+30],3f800000
将⾃动转换为 mov dword ptr [esi+30],3f800000 再送给编译器
若出现这个编译错误, 则请⾃⾏指定正确的数据长度
手机游戏源码论坛
数据长度的表⽰法有以下⼏种:
单字节 byte ptr
双字节 word ptr
四字节 dwrod ptr
CE的AA脚本分为三个区段: [ENABLE], [DISABLE], 外部代码(outer codes)区外部代码区指的是在[ENABLE]之前的区域, 或可称为前置区
放在这⾥的代码, 为⽆论选择[ENABLE]或[DISABLE], 都会被运⾏
会放在这⾥的⼀般是aobscan
本AA引擎专有功能:
assert2(地址,字节数组,"选填错误信息")
功能同 assert, 可选填错误信息
例: assert2(00081048,12 ff 3c 78,"Wrong Game Version!")

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。