您的位置:首页 > 其它

自动汇编(Auto Assemble)官方帮助文件翻译

2015-04-07 20:00 996 查看
转自:http://www.cr173.com/html/14254_1.html

原文:摘自CheatEngine Help (v6.1)

翻译:axdx

自动汇编可以让你用写脚本的方式,在不同的地址写入汇编代码。自动汇编可以在”内存浏览”(Memory View)的”工具”(Tools)中找到。

有三个特殊命令可以使用:ALLOC,LABEL,以及FULLACCESS。使用LABEL,你可以事先宣告一个名子, 并把它附给一个地址,接下来,你就可以用这个名子代替地址来使用。基本上,ALLOC也是相同的功用,只不过ALLOC还可以分配内存给你。

使用方式:

LABEL(标签名):让标签名可以被当作一个地址使用。

ALLOC(分配的内存标签名, 字节数):使用方式同LABEL,同时分配内存,指向被分配的内存地址。

ALLOC(分配的内存标签名, 字节数, 优先考虑的内存区域):同上。

DEALLOC(分配的内存标签名):释放使用ALLOC分配的内存空间。不管DEALLOC被放在脚本的什么地方,它永远是最后才被运行,且只在所有脚本分配的空间都被释放的时候,它才会真正地释放内存。只适用在添加到作弊列表中的脚本〈使用在作弊取消时〉。

FULLACCESS(地址, 字节数): 使指定的地址,至少所需的字节数,拥有可读、可写、可运行的属性。

REGISTERSYMBOL(符号名):将符号名加入到使用者自定义的符号表中。该符号名可以在作弊列表以及内存浏览中,被视为一个地址使用。符号名被使用前必须在脚本中先宣告。

UNREGISTERSYMBOL(符号名):从使用者自定义符号表中,删除此符号名。即使符号名不存在,也不会产生错误信息。

DEFINE(名子, 任意字符串):将指定的名子取代为任意字符串。

INCLUDE(档案名):在此命令的所处位置,包含进另一个自动汇编的脚本档案。

LOADBINARY(地址, 档案名):在指定的地址载入一个二进制档案。

CREATETHREAD(地址):于目标进程中,在指定的地址创建线程。

LOADLIBRARY(档案名):注入指定的DLL到目标进程中。

READMEM(地址, 字节数):在此命令的所处位置,复制写入指定的地址的资料。相当于内存复制。

GLOBALALLOC(名子, 字节数):分配内存空间,并且注册一个符号名到使用者自定义符号表中。因此可以在作弊列表的另一个脚本中使用该名子。在另一个脚本中,对同一个名子使用GLOBALALLOC,将不会再次分配新的内存,而是使用已经分配过的内存〈或者,如果不存在已经分配的内存,则会分配新的内存〉。

ASSERT(地址, 字节数组):检查指定地址的字节数组,是否与给定的字节数组相同。如果不相同,自动汇编脚本将不会运行。

AOBSCAN(名子, 字节数组):在内存中搜寻给定的字节数组〈支援通配符〉,并将找到的地址附给指定的名子。如果没有找到地址,自动汇编脚本不会运行。通配符:使用??或*代表未知字节。

数值表达方式:

一般来说,在自动汇编脚本中,所有的数值都是以十六进制来表示的,不过也有方法可以取代,你可以输入十进制数值,甚至也可以是浮点数值。

举例来说,一个十进制数值100可以写成十六进制的64,不过你也可以写成 #100,或是 (int)100。

对于浮点数值像是100.1,你可以写成 (float)100.1。

对于double双浮点数,你可以写成 (double)100.1。

基本示例:

00451029:

jmp 00410000

nop

nop

nop

00410000:

mov [00580120],esi

mov [esi+80],ebx

xor eax,eax

jmp 00451031

LABEL示例:

label(mylabel)

00451029:

jmp 00410000

nop

nop

nop

mylabel:

00410000:

mov [00580120],esi

mov [esi+80],ebx

xor eax,eax

jmp mylabel

ALLOC示例:

alloc(alloc1,4)

00451029:

jmp 00410000

nop

nop

nop

00410000:

mov [alloc1],esi

mov [esi+80],ebx

xor eax,eax

jmp 00451031

ALLOC以及LABEL示例:

alloc(alloc1,4)

label(mylabel)

00451029:

jmp 00410000

nop

nop

nop

mylabel:

00410000:

mov [alloc1],esi

mov [esi+80],ebx

xor eax,eax

jmp mylabel

FULLACCESS示例:

FULLACCESS(00400800,4) //00400800通常是只读、不可运行,此行使它可写、可运行

00451029:

jmp 00410000

nop

nop

nop

00410000:

mov [00400800],esi

mov [esi+80],ebx

xor eax,eax

jmp 00451031

DEFINE示例:

DEFINE(clear_eax,xor eax,eax)

00400500:

clear_eax

READMEM示例:

alloc(x,16)

alloc(script,2048)

script:

mov eax,[x]

mov edx,[x+c]

ret

x:

readmem(00410000,16) //将地址00410000的内容放至地址X处

AOBSCAN示例:

aobscan(codestart,8b 4c 24 24 ?? ?? 0c d8 07 00)

[ENABLE]

codestart+ 0A:

db 90 9090 90 90 90

[DISABLE]

codestart+ 0A:

jne0054233c

//Alt: db 0F 85 7A 01 00 00

学习自动汇编最好的方法绝对就是练习。在开始的时候,跟着训练教程,一步步练习,并且运用到游戏上。用的越多,你就可以写得越快越强大。虽然它一开始看起来令人生畏〈像一门编程语言〉,但是如果你对游戏修改抱有认真的态度,自动汇编将会是你最好的新朋友。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: