首页
社区
课程
招聘
[旧帖] 新手请教一个很简单的汇编问题 0.00雪花
发表于: 2014-1-11 00:11 4802

[旧帖] 新手请教一个很简单的汇编问题 0.00雪花

2014-1-11 00:11
4802
刚学32位汇编,写了一段程序,实现不了,请教各位大牛,用的是radasm,win7系统,编译没事,运行出错
LOCAL   @szBuffer[1024]:byte                                
invoke LocalAlloc, LPTR, 1000000      ;申请一块1百万字节的内存
                                .if eax
                                         mov @pMemContent,eax
                                         .else
                                         invoke MessageBox, hMainhWnd, addr sz_GlobaMem_Fail, addr kkk, MB_OK or MB_ICONINFORMATION       
                                .endif                                 
                                mov ebx,0
                                .while TRUE

                                        invoke RtlZeroMemory, addr @szBuffer, 1024
                                        invoke recv, hSocket, addr @szBuffer, 1024, 0
                                       
                                        mov @pMemContentszLong,eax
                                        lea esi,@szBuffer                                       
                                        lea edi,[@pMemContent+ebx]  ;这儿,似乎当ebx的值大于4000左右程序就漰溃了,为什么呢?
                                        mov ecx,1024
                                        cld
                                        rep movsb
                                       
                                        add ebx,1024
                                       
                                        .break .if @pMemContentszLong < 1024
                                         invoke Sleep,300                                     

                                .endw

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

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 225
活跃值: (139)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
lea edi,[@pMemContent+ebx] ;
这句竟能编译通过!?
2014-1-11 12:22
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=luzhlon;1254660]lea edi,[@pMemContent+ebx] ;
这句竟能编译通过!?[/QUOTE]

为什么这句会通不过?
2014-1-11 12:52
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=luzhlon;1254660]lea edi,[@pMemContent+ebx] ;
这句竟能编译通过!?[/QUOTE]

可以编译通过。
前面有变量的定义。
LOCAL   @pMemContent: dword           ;为存放得到rec函数数据而申请内存的指针
2014-1-11 12:59
0
雪    币: 20
活跃值: (1192)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
5
来灌水的!!没学32汇编!!
2014-1-12 12:53
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
hi,
你可以用OD载入调试一下,
lea edi,[@pMemContent+ebx]  ;
在这一句设置断点。

按照你说的超过4000出错,可能是的@pMemContent + 4000,这个地址不能写入。
2014-1-12 21:46
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主能将完整代码放上来么?

从现在的代码上看不出什么问题来... 如果把完整代码放上来可以调试一下
2014-1-13 13:05
0
雪    币: 1711
活跃值: (516)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=墓中无人;1254600]刚学32位汇编,写了一段程序,实现不了,请教各位大牛,用的是radasm,win7系统,编译没事,运行出错
LOCAL   @szBuffer[1024]:byte                                
invoke LocalAlloc, LPTR, 1000000 ...[/QUOTE]

溢出了吧,如果每次recv接收到的字节都<1024, pMemContent很快就用完了,但你后面只判断pMemContentszLong<1024,所以循环到pMemContent用完了还没跳出。
2014-1-13 13:12
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
运行的时候报什么错误呢
2014-1-13 16:13
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这句mov ecx,1024
改成
mov ecx 1024H
2014-1-13 16:19
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
上OD, 单步调试。
2014-1-15 09:16
0
游客
登录 | 注册 方可回帖
返回
//