ZEN Anonymous proxy грузит проц циклами... помогите убрать лаги

Тема в разделе "WASM.BEGINNERS", создана пользователем Lich, 25 апр 2007.

  1. Lich

    Lich New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    7
    зачем нужен цикл обозначенный ;<--------------------------<--------------------<---------
    если он не когда не обнулит счетчик?

    месте указанном;++++++++++++++++++++++++++++++<<<<<<<<<
    поидее прога должна зациклиться т.к. у нас изначально doserv db YES
    почему этого не происходит?



    я пробавал запускать invoke CreateThread,NULL,0,addr servthread,NULL,0,addr threadid
    больше 1го раза... проц грузился 100% я использавал mov ch,2
    loop на функцию
    почему сново все зависало?





    ;del *.obj
    ;\masm32\bin\ml /c /coff /Cp %0
    ;\masm32\bin\link /subsystem:WINDOWS *.obj
    ;del *.obj
    ;exit
    ; last update
    ; ZEN Anonymous proxy server 4kb for masm32 v6.14.8777
    ; after pack with FSG is 1.7kb
    .386
    .model flat, stdcall ; 32 bit memory model
    option casemap :none ; case sensitive

    include \masm32\include\windows.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\shell32.inc
    include \masm32\include\user32.inc
    include \masm32\include\GDI32.inc
    include \masm32\include\comdlg32.inc
    include \masm32\include\COMCTL32.inc
    include \masm32\include\advapi32.inc
    include \masm32\include\ole32.inc
    include \masm32\include\wininet.inc
    include \masm32\include\url.inc
    include \masm32\include\masm32.inc
    include \masm32\include\wsock32.inc
    include \masm32\include\mpr.inc

    includelib \masm32\lib\mpr.lib
    includelib \masm32\lib\wsock32.lib
    includelib \masm32\lib\url.lib
    includelib \masm32\lib\wininet.lib
    includelib \masm32\lib\ole32.lib
    includelib \masm32\lib\GDI32.lib
    includelib \masm32\lib\comdlg32.lib
    includelib \masm32\lib\COMCTL32.lib
    includelib \masm32\lib\advapi32.lib
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\shell32.lib
    includelib \masm32\lib\masm32.lib
    ;#########################################################################
    servthread proto :dword
    ;-------------------------------
    YES equ 1
    NO equ 0
    prsize equ 53333
    rcvsize equ 1333
    hstsize equ 33
    .data?
    ;structures
    wsadata WSADATA <?>
    sockadr sockaddr_in<?>
    ;arrays
    numbuf db hstsize dup (?)
    ;simple data
    sock dd ?

    thandle dd ?
    threadid dd ?
    fun dd ?
    .data
    proxyport dw 3128
    doserv db YES
    inadrlen dd SIZEOF sockaddr_in
    error db '<h1>ERROR<br>',0
    ;=========================================================================
    .code
    start:
    call @F
    @@: pop ebx
    mov bx,4eh
    mov fun,ebx

    mov wsadata.iMaxSockets,100
    invoke WSAStartup,101h,addr wsadata
    invoke socket,AF_INET,SOCK_STREAM,0
    mov sock,eax
    mov sockadr.sin_addr,0
    mov bx,[proxyport]
    mov ah,bl
    mov al,bh
    mov sockadr.sin_port,ax
    mov sockadr.sin_family,AF_INET
    invoke bind,sock,addr sockadr,SIZEOF sockadr
    invoke listen,sock,0

    @@: mov ch,33;<--------------------------<--------------------<-------------------
    loop $;<--------------------------<--------------------<-------------------

    cmp doserv,YES;++++++++++++++++++++++++++++++<<<<<<<<<
    jnz @B;++++++++++++++++++++++++++++++<<<<<<<<<
    invoke CreateThread,NULL,0,addr servthread,NULL,0,addr threadid
    mov thandle,eax
    jmp @B
    ex_it:
    invoke WSACleanup
    invoke ExitProcess,eax

    servthread proc number:dword
    LOCAL getlen:dword
    LOCAL querylen:dword
    LOCAL query:dword
    LOCAL sockn:dword
    LOCAL socka:dword
    LOCAL scall:sockaddr_in
    LOCAL inadr:sockaddr_in
    LOCAL httpport:word
    LOCAL buf:dword
    LOCAL host:dword

    startserver:
    mov doserv,NO
    ;---------------ожидаем соединения...
    accloop:
    invoke accept,sock,addr inadr,addr inadrlen
    cmp eax,-1
    jz short accloop
    mov sockn,eax
    mov doserv,YES
    ;-----------------get memory-----------------
    invoke LocalAlloc,LMEM_FIXED,prsize
    mov buf,eax
    invoke LocalAlloc,LMEM_FIXED,hstsize
    mov host,eax
    ;---------------prinimayem zapros--------------
    invoke recv,sockn,buf,prsize,0
    cmp eax,SOCKET_ERROR
    jz sendover
    cmp eax,8
    jl senderror
    mov querylen,eax
    ;-----------parse-----------------------
    mov getlen,0
    mov httpport,80 ;initialize http port
    mov ebx,buf
    ;---search first ' '
    @@: inc ebx
    inc getlen
    cmp byte ptr [ebx],' ' ;after GET or POST query
    jnz @B
    ;---------¤®Ї®«­ЁвҐ«м­ п Їа®ўҐаЄ  Ґб«Ё ­Ґв http Ё«Ё бв®Ёв / ЇҐаҐ¤ http ----------http://proxy1:3128/http://proxy2:3128/http://mail.ru/
    @@:
    ; jmp @F ;if we need to disactivate function
    inc ebx
    dec querylen
    cmp byte ptr [ebx],'/'
    jz @B
    cmp byte ptr [ebx],'H'
    jz @F
    cmp byte ptr [ebx],'h'
    jnz cuthost
    ;---search '//'
    @@: inc ebx
    dec querylen
    cmp word ptr [ebx],'//' ;after http:
    jnz @B
    inc ebx
    inc ebx
    ;---cut host & port number after :
    cuthost:
    mov edx,host
    @@: mov al,byte ptr [ebx]
    cmp al,':'
    jz setport
    cmp al,'/'
    jz setquery
    cmp al,' '
    jz setquery
    mov byte ptr [edx],al
    inc ebx
    inc edx
    dec querylen
    mov byte ptr [edx],0
    jmp @B
    setport: mov edx,offset numbuf
    @@: inc ebx
    mov al,byte ptr [ebx]
    mov byte ptr [edx],al
    inc edx
    dec querylen
    mov byte ptr [edx],0
    cmp al,'/'
    jNz @B
    mov byte ptr [edx-1],0
    invoke atodw,addr numbuf
    mov httpport,ax
    setquery:
    mov ecx,getlen
    mov edx,buf
    add edx,getlen
    inc ecx
    @@:
    mov al,byte ptr [edx]
    dec edx
    dec ebx
    mov byte ptr [ebx],al
    loop @B
    mov query,ebx
    ;==========================================
    callhost:
    invoke gethostbyname,host
    cmp eax,NULL
    jz senderror
    mov eax,dword ptr [eax+12]
    mov eax,dword ptr [eax]
    mov eax,dword ptr [eax]
    mov scall.sin_addr,eax
    mov bx,[httpport]
    mov ah,bl
    mov al,bh
    mov scall.sin_port,ax
    mov scall.sin_family,AF_INET
    invoke socket,AF_INET,SOCK_STREAM,0
    mov socka,eax
    cmp eax,INVALID_SOCKET
    jz senderror
    invoke connect,socka,addr scall,SIZEOF scall
    cmp eax,0
    jnz callerror
    ;-------posilayem zapros--na server-----------------------------------
    invoke send,socka,query,querylen,0
    cmp eax,SOCKET_ERROR
    jz callerror
    ;--------priem---------------------------
    ;------v etom meste mozhno sdelat cache
    @@:
    invoke recv,socka,buf,rcvsize,0
    cmp eax,SOCKET_ERROR
    jz @F ;callerror
    cmp eax,0
    jz @F
    invoke send,sockn,buf,eax,0
    cmp eax,SOCKET_ERROR
    jz callerror
    jmp @B
    @@:
    ;----------exit----------------------
    invoke closesocket,socka
    sendover:
    invoke LocalFree,buf
    invoke LocalFree,host
    invoke shutdown,sockn,2
    invoke closesocket,sockn
    invoke ExitThread,0
    ret
    callerror:
    invoke closesocket,socka
    senderror:
    invoke send,sockn,addr error,SIZEOF error,0
    senderr:
    invoke send,sockn,fun,22,0 ;37
    jmp sendover
    servthread endp
    ;-------------------------------------------------
    end start
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Lich
    цикл обозначенный ... не когда не обнулит счетчик?
    Куда по твоему переходит loop?

    прога должна зациклиться т.к. у нас изначально doserv db YES
    Переход на зацикливание произойдет, если doserv не равняется YES. И зацикливание будет длиться пока doserv не равняется YES.

    Ты вообще понимаешь команды ассемблера, понимаешь как рботает CreateThread?
     
  3. Lich

    Lich New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    7
    большое спасибо что про циклы объяснил:) мне уже ясно что чушь спрашивал)
    я начал учить asm 2 месяца назад, и только пытаюсь разбираться)))), так что приношу извинения за глупые вопросы)

    но вот мне всеравно не ясно почему прога грузит проц...

    объясни пожалуйста) про функцию CreateThread ,
    я смотрел в мсдне... там написано что она выполняет процесс в виртуальном адресном пространвстве)
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Lich
    я начал учить asm 2 месяца назад
    А программировать вообще и под windows в частности?

    CreateThread , я смотрел в мсдне... там написано что она выполняет процесс
    Thread не то же самое, что Process.

    но вот мне всеравно не ясно почему прога грузит проц...
    В программе есть два потока - основной, который содержит цикл
    Код (Text):
    1. @@:
    2.   mov    ch,33
    3.   loop   $
    4.   cmp    doserv,YES
    5.   jnz    @B
    и запускаемый при помощи CreateThread, который тоже содержит цикл (который управляет предыдущим)
    Код (Text):
    1.   mov    doserv,NO
    2. accloop:
    3.   invoke accept,sock,addr inadr,addr inadrlen
    4.   cmp    eax,-1
    5.   jz     short accloop
    6.   mov    sockn,eax
    7.   mov    doserv,YES
    оба они ни на секунду не "отпускают" процессор, в рамках своего процесса.
     
  5. Lich

    Lich New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    7
    про 2 цикла мне всё ясно)))

    толко что можно применить что бы не грузить камень циклами???


    наверное должно быть что-то что будет отпускать процессор ))))
    в книжках этого нету) наверно нужен таймер какой-то ????

    --->>>раньше не коддил под ВИНДУ ))) немного умею коддить под дос в паскале)
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Lich
    Можно попробоватьSleep
    Код (Text):
    1. ...
    2. @@:
    3.   mov    ch,33
    4.   loop   $
    5.   invoke Sleep, 1
    6.   cmp    doserv,YES
    7.   jnz    @B
    8. ...
    9.   mov    doserv,NO
    10. accloop:
    11.   invoke Sleep, 1
    12.   invoke accept,sock,addr inadr,addr inadrlen
    13.   cmp    eax,-1
    14.   jz     short accloop
    15.   mov    sockn,eax
    16.   mov    doserv,YES
    17. ...
     
  7. Lich

    Lich New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    7
    спасибо !
    все работает! :)))))
     
  8. Lich

    Lich New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    7
    все подействовало!
    тока я ещё цикл выкинул
    mov ch,33
    loop $
    с ним не хотел робить:))) а его убрал и ваще круто)

    спасибо за подсказки!!!!!
     
  9. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Lich
    Наличие этого цикла, до вставки Sleep, имело вполне логичное объяснение.
     
  10. Lich

    Lich New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    7
    наверно цикл выступал в качестве задержки, но если я его убирал , то все работало лучше,. тоесть страницы открывались подрят, а не через раз)))...
    а проц что с ним что без него будет грузить по полной!!!

    так что мне ваще не понятно зачем он тут нужен был)))))