首页
社区
课程
招聘
[求助]请教一下cmp跳转的问题
发表于: 2008-11-15 18:21 4183

[求助]请教一下cmp跳转的问题

2008-11-15 18:21
4183
有代码
cmp edi,eax
jnz xxxxxxxx

edi一直小于eax,当edi=eax时,是不是跳转就不能实现了?
但我想让它等于0也能实行最后一次,但大于就不要了
该用无符号的还是有符号的跳转??

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 427
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
jnz xxxxxxxx
改成
jle xxxxxxxx
2008-11-15 18:26
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
jle不行
下面还有一个jnz是向上的,是不是两个都要改呢??
都看标志位z的
2008-11-15 18:41
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不知道0算有符号无符号
可以用js代替吗??
2008-11-15 18:57
0
雪    币: 427
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
代码多贴几行出来,一次性把你的要求说出来。。。别人帮你看吧,我闷
2008-11-15 18:59
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢,麻烦帮我看看
004F18BF    85C0       test eax,eax
004F18C1    0F8C 82000>jl <Unpack_2.loc_4F1949>
004F18C7    40         inc eax
004F18C8    8945 D8    mov dword ptr ss:[ebp-28],eax
004F18CB    33DB       xor ebx,ebx
004F18CD >  8D45 D0    lea eax,dword ptr ss:[ebp-30]         ; 循环开始,逐日
004F18D0    50         push eax
004F18D1    8D4D CC    lea ecx,dword ptr ss:[ebp-34]
004F18D4    A1 946A4F0>mov eax,dword ptr ds:[4F6A94]
004F18D9    8B00       mov eax,dword ptr ds:[eax]
004F18DB    8BD3       mov edx,ebx
004F18DD    8B38       mov edi,dword ptr ds:[eax]
004F18DF    FF57 0C    call dword ptr ds:[edi+C]            
004F18E2    8B45 CC    mov eax,dword ptr ss:[ebp-34]
004F18E5    B9 0800000>mov ecx,8
004F18EA    BA 0100000>mov edx,1
004F18EF    E8 7838F1F>call <Unpack_2.System::__linkproc__ L>
004F18F4    8B45 D0    mov eax,dword ptr ss:[ebp-30]
004F18F7    E8 1C7FF1F>call <Unpack_2.Sysutils::StrToInt(Sys>; 把起始日期字符串转成十六进制数
004F18FC    8BF8       mov edi,eax                           
004F18FE    8B86 20030>mov eax,dword ptr ds:[esi+320]        
004F1904    E8 BF0FFFF>call <Unpack_2.sub_4E28C8>            
004F1909    3BF8       cmp edi,eax                           
004F190B    75 36      jnz short <Unpack_2.loc_4F1943>       ;这里
004F190D    8D45 C8    lea eax,dword ptr ss:[ebp-38]
004F1910    50         push eax
004F1911    8D4D C4    lea ecx,dword ptr ss:[ebp-3C]
004F1914    A1 946A4F0>mov eax,dword ptr ds:[4F6A94]
004F1919    8B00       mov eax,dword ptr ds:[eax]
004F191B    8BD3       mov edx,ebx
004F191D    8B38       mov edi,dword ptr ds:[eax]
004F191F    FF57 0C    call dword ptr ds:[edi+C]
004F1922    8B45 C4    mov eax,dword ptr ss:[ebp-3C]
004F1925    B9 0600000>mov ecx,6
004F192A    BA 0900000>mov edx,9
004F192F    E8 3838F1F>call <Unpack_2.System::__linkproc__ L>
004F1934    8B55 C8    mov edx,dword ptr ss:[ebp-38]
004F1937    A1 746E4F0>mov eax,dword ptr ds:[4F6E74]
004F193C    8B00       mov eax,dword ptr ds:[eax]
004F193E    8B08       mov ecx,dword ptr ds:[eax]
004F1940    FF51 38    call dword ptr ds:[ecx+38]
004F1943 >  43         inc ebx
004F1944    FF4D D8    dec dword ptr ss:[ebp-28]
004F1947  ^ 75 84      jnz short <Unpack_2.loc_4F18CD>        ;这里
2008-11-15 21:02
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
7
你知道C中的continue语句是什么作用吗?

你注释中标记的分支,前一处为循环体内的continue;

后一次为循环体本身。

不明白整块代码的“意思”,只知道单条指令的作用,是无法读懂算法的。

要从编程的基础学起啊。

这是一个基本的循环遍历一个集合(数组,链表,向量),寻找其中满足一定条件的元素,而真正的“工作”是在找到了之后,也就是continue跳过不满足条件的元素,当遇到满足条件的元素时,continue语句不执行,而执行它之后的代码,这里才是关键的算法。

具体这一段程序的内容,从所贴出来的代码无法得到更多的信息,但我可以写一个流程类似的“演示”伪C代码,来说明这个循环的结构,如下:

for( each element e in container C )
{
       if ( some_condition_is_meet )
         continue;
       // here we do something useful
       e.do_something();
}

希望对你有所帮助。
2008-11-15 21:20
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这里现在是非零跳转
因为cmp比较的edi,eax
edi一直小于eax
我想要的结果是edi等于eax也跳一次,就是0也跳一次,
edi大于就不跳
2008-11-15 21:21
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢老兄的帮助,之前那个算法问题我还是解决不了
我跟了这么多天只了解了一部分情况,但对于汇编和编程我都不是很熟悉,无法逆出它的算法,特别是它还使用RSA和大数运算(网上查的),所以找不出什么P,Q,E这些必要的东西
程序是用硬盘列号前面加8位字串作机器码,注册无提示,并且把机器码和注册码写到一个文件中
注册码->base64to256->RSA->FGInt与机器码作比较
之后就是那两个比较,第一次比较硬盘序列号的前3位,第二次对整个机器码作比较.正如你所说,第一次不正确,就不用第二次了.之后还会连网到网站下载一个文件,这个文件打开看,也是个机器码,但硬盘序列号部分不一样,不知道是用于筛选前8位还是作别的用
所以我既然推不出来,就干脆选择在比较之后做爆破修改下面的跳转
但效果和之前用字符串参考的效果一样,尽管随便输入注册码显示已注册成功,仍有个功能无法使用
强制去掉弹出对话框,就什么都不显示,郁闷
所以这才想从计算上入手,但发现,它在用以上程序循环筛选,比较日期会出现我那问题的情况,就是cmp比较,相减,为0就不再跳转了.....只能计算到前一天的日期,所以发贴求助..
这些天真郁闷
但也发现,知识在一点一点儿的学习,呵呵,但眼前的确无法找到真正的注册码了,比较急
2008-11-15 21:43
0
游客
登录 | 注册 方可回帖
返回
//