对汇编真是头疼啊,这一小段都不知道他的目的是什么,希望各位指点下
本帖最后由 chinmo 于 2014-10-16 01:03 编辑7C809E8A 8A08 mov cl,byte ptr ds:
7C809E8C 40 inc eax
7C809E8D 84C9 test cl,cl
7C809E8F^ 75 F9 jnz Xkernel32.7C809E8A
7C809E91 2BC2 sub eax,edx经过之前的一些朋友提示,我得到了很多提示,也最终到了一些关键点
但对于汇编,实在搞不懂他的作用
比如上面,我是根据输入的注册码追踪到里的,比如9DE02360A7E1226E98FE1B799EF81B7990F51D7A
到了这里他就会重复的执行这段代码,应该是一个循环,
每次循环只用了注册码的一个字符, jnz Xkernel32.7C809E8A 执行到这个就返回mov cl,byte ptr ds:到这个
直到把注册码所有字符循环完一遍才执行 sub eax,edx 这句
实在不明白这段代码的作用是什么为什么要循环这个注册码呢?
我找这个的目的,就想弄懂这个软件的算法,有一些汇编实在看不懂什么作用,汇编知识太薄弱了,只能来求助各位大神了
这段代码我说下我理解的:
mov cl,byte ptr ds: ;把eax的值第一个字符传给cl
inc eax;这个我理解的意思是eax的值移位,比如原来是9DE02360A7E1226E98FE1B799EF81B7990F51D7A,移移位就成了DE02360A7E1226E98FE1B799EF81B7990F51D7A,不知道对不对
test cl,cl 这个就不太理解了,是进行and逻辑运算么?那这里结果是什么呢,
jnz Xkernel32.7C809E8A 这个就是一个跳转,不相等就跳转回到mov cl,byte ptr ds:,可是,上面那个都是cl会不相等么?
还有这段代码最后作用是什么呢?
mov cl,byte ptr ds: ;把eax的值第一个字符传给cl
inc eax; EAX自加1
test cl,cl 这个是比较CL是否等于0
@Shark恒 @九幽 大神们,进来帮忙看下吧
表示看不明白你想表达什么
九幽 发表于 2014-10-16 00:49
表示看不明白你想表达什么
上面不是说了么?想知道这段代码的作用是什么,为什么要循环那个注册码,没发现他里面有什么比较的东西啊
你看你的那个地址,你确定已经进到程序里面去了吗?
你的意思是那个回跳是吧,你直接在那回跳下面一段F4跳过那个回跳
九幽 发表于 2014-10-16 00:54
你看你的那个地址,你确定已经进到程序里面去了吗?
这段代码我说下我理解的:
mov cl,byte ptr ds: ;把eax的值第一个字符传给cl
inc eax;这个我理解的意思是eax的值移位,比如原来是9DE02360A7E1226E98FE1B799EF81B7990F51D7A,移移位就成了DE02360A7E1226E98FE1B799EF81B7990F51D7A,不知道对不对
test cl,cl 这个就不太理解了,是进行and逻辑运算么?那这里结果是什么呢,
jnz Xkernel32.7C809E8A 这个就是一个跳转,不想等就跳转,可是,上面那个都是cl会不相等么?
还有这段代码最后作用是什么呢?
高手全部出现{:5_189:}
扫地僧 发表于 2014-10-16 02:31
mov cl,byte ptr ds: ;把eax的值传给cl,使其标志位清空,但保留数值
inc eax;eax值+1
test cl,cl...
明白了这个,关键搞不懂他为什么要把这个注册码所有字符串循环一遍?里面也好像也没出现跟其他的比较啊,难道就只是为了把eax清空,然后重新一个赋值?如果是这样,也不要这么循环吧
页:
[1]
2