首页
社区
课程
招聘
[求助]一个奇怪的问题,SEND的大小实参必须用常量,若放在变量或寄存器中就报错。(之前扩大了系统缓冲区)
发表于: 2010-2-20 14:26 3271

[求助]一个奇怪的问题,SEND的大小实参必须用常量,若放在变量或寄存器中就报错。(之前扩大了系统缓冲区)

2010-2-20 14:26
3271
扩大缓冲区的代码,已经验证过扩大成功了。。。。。

                                                invoke        WSAStartup,101h,addr local_stWsa
                                                invoke        socket,AF_INET,SOCK_STREAM,0
                                                push eax
                                                pop [esi].m_sServer
                                                mov local_uiRcvBuf,81920
                                                invoke setsockopt,[esi].m_sServer,SOL_SOCKET,SO_RCVBUF,addr local_uiRcvBuf,4               
                                                ;invoke setsockopt,[esi].m_sServer,SOL_SOCKET,SO_SNDBUF,addr local_uiRcvBuf,4
                                                        .if        eax==SOCKET_ERROR
                                                                invoke        MessageBox,hWnd,addr ModifySendBufferReport,NULL,MB_OK or MB_ICONSTOP
                                                                ret
                                                        .endif

发送的代码

                                                        invoke lstrlenW,local_strRoot;返回UNICODE字符串的长度
                                                        shl ax,1 ;代表求出UNICODE字符串所占用的字节数,左移一位代表乘以2的1次方
                                                        add ax,HEADLEN
                                                       
                                                        mov local_StrSize,ax
                                                       
                                                        mov local_header.len,ax;这句可能会有问题,用WINDEG动态调试看一下
                                                       

                                                       
                                                        invoke send,[esi].m_sClient,addr local_header,HEADLEN,0;发送包头
                                                        .if        (eax == SOCKET_ERROR)
                                                               
                                                                mov eax,TRUE
                                                       
                                                                ret
                                                               
                                                        .endif        ;//
                                                               
                                                                mov cx,local_StrSize
                                                                sub cx,HEADLEN
                                                                 
                                                                mov [esi].m_PackBodySize,cx
                                                        invoke send,[esi].m_sClient,local_strRoot,local_StrSize,0;发送目录(包体) ,第3个参数必须用数字?WHY?
                                                        .if        (eax == SOCKET_ERROR)
                                                               
                                                                mov eax,TRUE
                                               
                                                                ret
                                                               
                                                        .endif        ;//

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 206
活跃值: (315)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
问题解决了
movzx ebx,cx;这句是重点,PUSH会压入4个字节,这样就OK了,因为高位的2个字节有数值
2010-2-20 15:33
0
游客
登录 | 注册 方可回帖
返回
//