发新话题
打印

修改gmsv制造出我们想要的脚本语句【第二篇】

修改gmsv制造出我们想要的脚本语句【第二篇】

这次给的图是我自己拼的,把整个函数都拼接起来了,比较方便一点,呵呵魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表' _1 P; c0 r1 Z! M
我们上次说到 set_level 这个函数,现在来一句一句分析这个函数的功能,看看gmsv是怎么执行这个脚本改变游戏里面人物的等级的。妖城在线论坛7 X( e: m" y, \6 f* I
bbs.mocwww.com& G+ z- G" B+ g0 s5 S$ H% ]
注1:妖城在线论坛8 C' V6 U) @- ~' E) _
上次我说每个子程序的开头都是这样,是为了使用堆栈考虑。下面解释详细些。
! }7 q' d9 n; `8 i" Y—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート准确的说是在linux下的gcc编译器在编译gmsv的源程序的时候,
  i) B! R/ l- ~( n* z  `5 G—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート(我们现在手上的gmsv不是源程序,而是由源程序编译产生的可执行程序,这个都知道吧 = =!)
  R& w/ [- i: [2 e# M" `3 [& M6 N由编译器的机制导致的,就是说子程序存在注1代码这件事是gcc干的,
8 c' B) n7 Z* Z—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート(你反编译其他的任何程序,子程序几乎都以这样的语句开头)
& }( y  u; F) u4 D; b! z1 T- |—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート并不是程序编写人想这样。这个跟我们理解程序没什么太大关系(那还说= =!)
) b2 h9 A, g' ?0 X5 N; Y但是我们要知道在每个子程序里面堆栈指针的作用,因为我们的机器没有太多的寄存器给我们用,有很多数据我们必须先放在内存里,
+ S+ X% z6 w3 ?' W5 Abbs.mocwww.com必要的时候才拿到寄存器里面进行操作或运算。指针esp和ebp就是指向某个内存地址。魔力私服,最新魔力宝贝私服技术交流5 A6 `! Q$ Y0 m
顺便说一下,80x86机器的堆栈是递减的:就是说堆栈的底部是高地址,而堆栈顶部是低地址。(把堆栈想象成一个先进后出的装羽毛球的筒)
9 H6 W7 ~( s3 z5 q( n: O$ z. ]—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート(80x86机器:就是使用IBM80x86指令系统CPU的机器,我们的PC机,只要用的是Intel的CPU都是基于IBM的80x86指令系统)bbs.mocwww.com0 E) i9 r: C' @# Q
想了解更详细关于 堆栈 寄存器 的资料请参见我发的那个汇编教程。
0 M7 x$ O) v2 F2 w8 l魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表还有esp前面的e是扩展的意思,是80386以后从16位扩展到了32位的寄存器。魔力私服,最新魔力宝贝私服技术交流. i; T3 L  {" v! u) G' Y% I
在我发的汇编电子书里面寄存器一般是ax,bx,cx,dx,sp,bp等等。8 c* k5 z* R- a3 l

9 _' I9 L" y- _: F( A0 q魔力私服,最新魔力宝贝私服技术交流注2:
% f5 y, m  K6 l) b—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートcheck_num这个函数不一句一句理解了,这个函数很短,有兴趣自己看下,我说下作用:魔力私服,最新魔力宝贝私服技术交流0 o0 W) S1 I- {. C1 K1 u8 Q# x3 D
检查一个命令后面是否带的是否是参数(带正负号或者不带正负号的数)。
$ l4 }( R; L) ^/ u/ |魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表这里是数一般是整数。这个函数在这里主要是检测命令所带的参数是否合法bbs.mocwww.com$ m0 S6 u5 z0 k9 T  `# |2 l

/ g% s3 o: l' e" O: Q2 q( ]5 o妖城在线论坛注3:妖城在线论坛* p5 ~' }; h1 l* d
xor esi,esi 等价于 mov esi,0 就是把esi赋值为0,这个后面有用到。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート. w( |9 M5 Q( |! a5 P1 o' ^
add esp,10h 是把堆栈指针向堆栈底方向移动2个字节。
4 i0 l0 ^. ^7 ]) @* a6 @—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート关键:test eax,eax 是把eax跟自己做 按位与(and) 逻辑运算结果不影响eax的值,只影响标志位(跟and不一样的地方)。
; C4 h# S  R8 F3 D- K—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートeax如果为0,那么标志位(不知道标志位是啥参见汇编教程)ZF=1,如果是负数,那么标志位SF=1。
$ ?2 T/ ~6 k& Ybbs.mocwww.comjz short loc_8121514 如果eax == 0(即ZF==1)则跳转到(short表明是短跳转)loc_8121514处(即绿色线),否则往下执行(红色线)。
' ?. T) [6 }. [' f0 |1 e妖城在线论坛loc_8121514 处很明显,是错误的提示。即 注9 所在的框。妖城在线论坛( }7 k  V9 I6 L3 }. P# Z
这里补充一下check_num的返回值:返回的是命令后所带的参数类型,在al里,al是eax(ax)寄存器的低8位。
% ~& N* c* X$ W  ^$ q8 |—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート这里的 类型 是如下含义:如果是“+”或者“-”号,则返回他们的ASCII码(见注4),如果是数字,则返回对应的数
+ A8 S: `5 K; N- k' A/ r$ |魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表如果是数字,则返回对应的数”解释:魔力私服,最新魔力宝贝私服技术交流: ?1 _  P# y5 q) I# P
比如 setlevel 1,因为gmsv读取到的其实是"1”的ASCII码,即49,那么得减去48(这个操作是在后面的get_num2函数里实现的),
& r, Y# F$ b+ }7 d  L- e魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表再放到al寄存器里面,才是适合CPU处理的数字“1”。
; G4 `. [; w" X1 @魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
& Q9 R, _% B! ?9 r& P* }魔力私服,最新魔力宝贝私服技术交流注4:魔力私服,最新魔力宝贝私服技术交流& U# \6 l; Q  a- u0 G: }% \$ g
这里两个 cmp,参与比较的是check_num的返回值eax,43是“+”的ASCII码,45是“-”的ASCII码。
0 f6 w; V3 j0 A; t2 v+ O$ M妖城在线论坛首先,第一个 cmp,如果是“+”号,那么跳转到loc_812150C,否则往下执行,即第二个cmp
' D# V6 E% ^4 {( j5 s—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート第二个 cmp,如果是“-”号,那么跳转到loc_812150C,否则(既不是“+”也不是“-”),那么往下执行。
4 V) h1 ?' D/ c注意这里的往下执行红线,即loc_81214B4
. M6 l/ L. M7 U; k+ C8 ]* @魔力私服,最新魔力宝贝私服技术交流妖城在线论坛3 f. s* ]* F: e( t
注5:—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート* j) Q5 u- U8 @, u
mov esi,1 就是把 1 赋值给 esi。对了!看注3里面,不是esi赋值为0了吗?
& q: k4 c% S8 E; ]—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートesi在接下来的作用是:当作条件判断跳转,这里后面还会说。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート6 L2 M# @$ ?/ o2 D, E7 I8 t5 u
这里,check_num这个函数的影响体现了,就是说:如果脚本参数是不带正负号的数字,那么esi的值是0,如果是带符号的,那么esi的值是1。
: U& `# L8 Y8 f0 |  w4 c! C魔力私服,最新魔力宝贝私服技术交流看注5的另一部分:test esi,esi 不说了吧?和注3里test一样的。好了,记住这里根据esi不同而又不同的处理(体现在注7)。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート6 P' t2 @" x  g$ `8 l" h

( w0 X$ f7 `6 O; I8 g魔力私服,最新魔力宝贝私服技术交流注6:bbs.mocwww.com( o( C6 k1 z( N$ u8 h0 r
get_num2这个函数具体也不分析,这里给出这个函数的作用:
( ~7 ^3 E/ G# _& G* v% s/ T+ l9 Ubbs.mocwww.com取得数字适合在寄存器里运算的值。就这么简单。
0 r( w1 t5 e/ c! t—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート如果是正数,那么返回在eax里面就是正数;
3 u% c+ c! g& A- B: ]! E0 Z如果是负数(我们写的负数CPU是不认识的,必须这个函数处理之后让CPU认识),那么返回在eax里面就是正数。
. |5 t0 p9 h$ ]7 z8 ?; x5 ebbs.mocwww.com
. A( H1 M* o! L! Z$ u# c6 a妖城在线论坛注7:
2 Z- I) e2 D3 s* y' l' `8 q魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表我觉得这是函数最重要和最核心的一部分。理解了这里,很多事情就好解决了。bbs.mocwww.com% A' a% I0 Z' I2 M& a2 w5 d$ _
先来看这里出现的"2Ch”。转换为10进制是44,我们再翻看数据库的character表,看到等级是在第9栏。魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表# u0 Q5 z, y$ n- q) I1 o
那么这个44是怎么得出的呢?答案是:character表的 (9 + 2) * 4 == 44 == 2Ch。反正记住这个公式就行了。
- {, K  g3 o" x9 @, X7 Q; T魔力私服,最新魔力宝贝私服技术交流再比如当前人物经验值在character表的42栏,加2为44,再乘以4等于176,转换为16进制是B0
1 w8 e  P0 o3 s5 P魔力私服,最新魔力宝贝私服技术交流因为我们的目的就是加经验,所以这个数后面我们还会说到。妖城在线论坛: Z- Y$ N0 [0 K9 x4 p6 M
[ebx+2Ch] 意思是取得ebx+2Ch这个地址处的内存数据。这个内存放的就是人物的当前等级。以后我就说当前等级了。魔力私服,最新魔力宝贝私服技术交流/ c( Z& X/ R. ~0 f6 _
继续正题:
; e9 p% `. X$ d# R& h6 C% z—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート我们看到整个注7是由esi为0或者为1进行跳转的两个分支。
  U/ C' Z) x# g+ E' X+ }/ U  I! V魔力私服,最新魔力宝贝私服技术交流我们分析左边的分支(esi=1):
! `9 t1 |! \7 T, I) r3 _, j$ nadd eax,[ebx+2Ch]         把当前等级加到(get_num2的返回的)eax里面。
  e' \  Y# v3 A, ^/ [  A) |8 _+ z魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表test eax,eax                    将eax跟自己相与。妖城在线论坛: v9 Y9 o& p- z
mov [ebx+2Ch],eax         把eax的值写到当前等级。
5 B4 H2 E( x" F9 k$ v魔力私服,最新魔力宝贝私服技术交流jle short loc_81214FB    如果eax小于等于0则跳转到 注10。
5 [: D* L0 F8 I, k* ~2 l) e" o魔力私服,最新魔力宝贝私服技术交流右边的分支(esi=0):bbs.mocwww.com6 f3 P) ^0 v+ B2 C7 M
mov [ebx+2Ch],eax        把eax的值写到当前等级。
: ]9 z  i6 M- o& ~! v& p魔力私服,最新魔力宝贝私服技术交流功能:如果参数是一个带符号的数字,把当前等级进行对应的加减(因为eax里面可以是个负数,add负数就是减了嘛)
, y: V+ h& B: x魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表如果参数是一个不带符号的数字,直接将当前等级修改成为这个数字。
8 G" Q% R- `( J: O/ X* D3 y5 z—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
3 y! P* {. k2 u& z注8:这个函数没仔细看,但是从名字看是上传(?)人物数据的子程序。必须执行这个子程序人物的当前等级在执行脚本命令后才会变化。
  d4 e  r; V6 h$ \2 n注9:这里是命令格式错误后的处理。不具体说了。
* _0 l: e/ v+ C. A" X; X魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
# z7 b4 m5 n+ S6 X8 S" `: q3 A魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表注10:
4 `' o4 e" _5 c魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表如果等级 变化之后 小于等于0 则跳转到这里。
0 _- h3 j& t' _' ~- K  W1 F- v—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートmov dword ptr [ebx+2ch],1 将等级强制改成1级。
1 s0 K) l- W* ~魔力私服,最新魔力宝贝私服技术交流也就是说实现了等级下限范围的控制,最小等级为1。
3 f. W0 @3 T# V6 x#################################################################################6 U4 [3 N- h$ |
大概就这么多,说了比较多的废话,但是我感觉在理解这个子程序方面还是有点帮助的,呵呵。bbs.mocwww.com' C7 o: v- h' V, m
这里说明一下,如果你将注7里面的(其他地方的别改)2C都改成B0,那么你在脚本里面使用setlevel命令的话应该就是:
/ _! \% q/ s1 L, W魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表加或者减或者直接设定经验值为多少。" Y% c" a  a% o* X+ R
但是我们发现这个脚本有2个不好的地方:+ u3 _4 V. H  F+ _- W
1.等级变化了之后不会有提示,我们想要经验修改之后有提示;
, p8 D/ }: ]8 g) K& Lbbs.mocwww.com2.只能控制下限或者上限(注7中的jle改成jg就是上限控制了),我们想同时控制上下限。
% U8 S% P/ p. N3 C7 c+ p0 I. ^我们下一篇再说另一个函数,更接近于我们理想中加经验的脚本语句的函数。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート' ~5 f* L/ J! |" k

+ B/ C+ S# u6 p& S妖头,我不要精华了……我要威望,嘿嘿……魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表  o* H( p4 c( k8 l: t

9 h. g# _  S5 p- X2 i魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表[ 本帖最后由 feifei1937 于 2009-8-5 12:30 编辑 ]

附件

set_level.jpg (226.57 KB)

2009-8-5 12:26

set_level.jpg

本帖最近评分记录
  • 全熟牛排溅血 妖力 +30 2017-5-18 06:42
  • 易凡 威望 +1 最近越来越少会员肯在学有心得后共享了 2009-8-14 23:22

TOP

沙发我占了~~再看~~呵呵
; O* ~5 l" ]8 ^3 U8 m—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート好东西啊~~

TOP

引用:
原帖由 yaoguai 于 2009-8-5 12:47 发表
& K& J' R. g! J1 \3 ^+ T$ F. [—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート沙发我占了~~再看~~呵呵魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表' ^* V. W: a; s$ r3 Q4 M& h
好东西啊~~
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表3 B/ ^( O' F. l1 v1 g! O2 A5 ?
1 W# |6 G8 y# M/ U' K: K
引用:
原帖由 mm80420mm 于 2009-8-5 12:53 发表
0 @- |3 @; Z. v) l# o) t9 t/ Rbbs.mocwww.com试著理解               
3 c* s2 k4 N* d0 v' V魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表加油,你们肯定能看懂的,以后改出更牛逼的东西

TOP

这么肯定……

TOP

引用:
原帖由 yaoguai 于 2009-8-5 20:17 发表   L5 f- \! l$ W1 Q
这么肯定……
/ V- T; g; v$ V* dbbs.mocwww.com肯定前面还有个词……看见了伐?………………

TOP

我知道啊  “你们”……

TOP

引用:
原帖由 yaoguai 于 2009-8-6 21:38 发表 魔力私服,最新魔力宝贝私服技术交流1 s8 T, T  Z! G; R" c
我知道啊  “你们”……
bbs.mocwww.com3 e" H1 K0 T" Z$ }
加油…………………………………………

TOP

把图插到文章中,这样看着很累
fuck you,and fuck your famliy

TOP

引用:
原帖由 40830702 于 2009-8-9 09:05 发表 妖城在线论坛" N- R! F, P# m3 j% @3 j
把图插到文章中,这样看着很累
bbs.mocwww.com9 O" {$ Y1 D6 q0 z) B# K
把图保存到电脑里面,再看文章……如何……

TOP

很累 很累=。=

TOP

我和看天书一样
~我的丗界,隻有妳能領銜主演☆~

TOP

发新话题