Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. proc dll.Load, import_table:dword
  3.                 mov     esi,[import_table]
  4.   .next_lib:    mov     edx,[esi]
  5.                 or      edx,edx
  6.                 jz      .exit
  7.                 push    esi
  8.                 mov     esi,[esi+4]
  9.                 mov     edi,s_libdir.fname
  10.             @@: lodsb
  11.                 stosb
  12.                 or      al,al
  13.                 jnz     @b
  14.                 mcall   68,19,s_libdir
  15.                 or      eax,eax
  16.                 jz      .fail
  17.                 stdcall dll.Link,eax,edx
  18.                 stdcall dll.Init,[eax+4]
  19.                 pop     esi
  20.                 add     esi,8
  21.                 jmp     .next_lib
  22.   .exit:        xor     eax,eax
  23.                 ret
  24.   .fail:        add     esp,4
  25.                 xor     eax,eax
  26.                 inc     eax
  27.                 ret
  28. endp
  29.  
  30. proc dll.Link, exp:dword,imp:dword
  31.                 push    eax
  32.                 mov     esi,[imp]
  33.                 test    esi,esi
  34.                 jz      .done
  35.   .next:        lodsd
  36.                 test    eax,eax
  37.                 jz      .done
  38.                 stdcall dll.GetProcAddress,[exp],eax
  39.                 or      eax,eax
  40.                 jz      @f
  41.                 mov     [esi-4],eax
  42.                 jmp     .next
  43.             @@: mov     dword[esp],0
  44.   .done:        pop     eax
  45.                 ret
  46. endp
  47.  
  48. proc dll.Init, dllentry:dword
  49.                 pushad
  50.                 mov     eax,mem.Alloc
  51.                 mov     ebx,mem.Free
  52.                 mov     ecx,mem.ReAlloc
  53.                 mov     edx,dll.Load
  54.                 stdcall [dllentry]
  55.                 popad
  56.                 ret
  57. endp
  58.  
  59. proc dll.GetProcAddress, exp:dword,sz_name:dword
  60.                 mov     edx,[exp]
  61.   .next:        test    edx,edx
  62.                 jz      .end
  63.                 stdcall strcmp,[edx],[sz_name]
  64.                 test    eax,eax
  65.                 jz      .ok
  66.                 add     edx,8
  67.                 jmp     .next
  68.   .ok:          mov     eax,[edx+4]
  69.   .end:         ret
  70. endp
  71.  
  72. proc strcmp, str1:dword,str2:dword
  73.                 push    esi edi
  74.                 mov     esi,[str1]
  75.                 mov     edi,[str2]
  76.                 xor     eax,eax
  77.             @@: lodsb
  78.                 scasb
  79.                 jne     .fail
  80.                 or      al,al
  81.                 jnz     @b
  82.                 jmp     .ok
  83.   .fail:        or      eax,-1
  84.   .ok:          pop     edi esi
  85.                 ret
  86. endp
  87.  
  88. s_libdir:
  89.   db '/sys/lib/'
  90.   .fname rb 32
  91.