Subversion Repositories Kolibri OS

Rev

Rev 188 | Rev 202 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 188 Rev 198
Line 541... Line 541...
541
align 4
541
align 4
542
proc get_proc_ex stdcall, proc_name:dword, imports:dword
542
proc get_proc_ex stdcall, proc_name:dword, imports:dword
Line 543... Line 543...
543
 
543
 
544
.look_up:
544
.look_up:
-
 
545
           mov edx, [imports]
-
 
546
           test edx, edx
545
           mov edx, [imports]
547
           jz .end
546
           mov edx, [edx]
548
           mov edx, [edx]
547
           test edx, edx
549
           test edx, edx
548
           jz .end
550
           jz .end
549
.next:
551
.next:
Line 804... Line 806...
804
.fail:
806
.fail:
805
           xor eax, eax
807
           xor eax, eax
806
           ret
808
           ret
807
endp
809
endp
Line -... Line 810...
-
 
810
 
-
 
811
align 4
-
 
812
proc load_library stdcall, file_name:dword
-
 
813
           locals
-
 
814
             coff      dd ?
-
 
815
             sym       dd ?
-
 
816
             strings   dd ?
-
 
817
             img_size  dd ?
-
 
818
             img_base  dd ?
-
 
819
             exports   dd ?
-
 
820
           endl
-
 
821
 
-
 
822
           cli
-
 
823
 
-
 
824
           stdcall load_file, [file_name]
-
 
825
 
-
 
826
           test eax, eax
-
 
827
           jz .fail
-
 
828
 
-
 
829
           mov [coff], eax
-
 
830
           movzx ecx, [eax+CFH.nSections]
-
 
831
           xor ebx, ebx
-
 
832
 
-
 
833
           lea edx, [eax+20]
-
 
834
@@:
-
 
835
           add ebx, [edx+CFS.SizeOfRawData]
-
 
836
           add ebx, 15
-
 
837
           and ebx, not 15
-
 
838
           add edx, 18
-
 
839
           dec ecx
-
 
840
           jnz @B
-
 
841
           mov [img_size], ebx
-
 
842
 
-
 
843
           call init_heap
-
 
844
           stdcall user_alloc, [img_size]
-
 
845
 
-
 
846
           test eax, eax
-
 
847
           jz .fail
-
 
848
           mov [img_base], eax
-
 
849
 
-
 
850
           mov edx, [coff]
-
 
851
           movzx ebx, [edx+CFH.nSections]
-
 
852
           mov edi, [img_base]
-
 
853
           lea eax, [edx+20]
-
 
854
@@:
-
 
855
           mov [eax+CFS.VirtualAddress], edi
-
 
856
           mov esi, [eax+CFS.PtrRawData]
-
 
857
           test esi, esi
-
 
858
           jnz .copy
-
 
859
           add edi, [eax+CFS.SizeOfRawData]
-
 
860
           jmp .next
-
 
861
.copy:
-
 
862
           add esi, edx
-
 
863
           add edi, new_app_base
-
 
864
           mov ecx, [eax+CFS.SizeOfRawData]
-
 
865
           cld
-
 
866
           rep movsb
-
 
867
.next:
-
 
868
           add edi, 15-new_app_base
-
 
869
           and edi, not 15
-
 
870
           add eax, 40
-
 
871
           dec ebx
-
 
872
           jnz @B
-
 
873
 
-
 
874
           mov ebx, [edx+CFH.pSymTable]
-
 
875
           add ebx, edx
-
 
876
           mov [sym], ebx
-
 
877
           mov ecx, [edx+CFH.nSymbols]
-
 
878
           add ecx,ecx
-
 
879
           lea ecx,[ecx+ecx*8] ;ecx*=18 = nSymbols*CSYM_SIZE
-
 
880
           add ecx, [sym]
-
 
881
           mov [strings], ecx
-
 
882
 
-
 
883
           lea eax, [edx+20]
-
 
884
 
-
 
885
           stdcall fix_coff_symbols, eax, [sym], [edx+CFH.nSymbols],\
-
 
886
                                     [strings], dword 0
-
 
887
           test eax, eax
-
 
888
           jnz @F
-
 
889
 
-
 
890
@@:
-
 
891
           mov edx, [coff]
-
 
892
           movzx ebx, [edx+CFH.nSections]
-
 
893
           mov edi, new_app_base
-
 
894
           lea eax, [edx+20]
-
 
895
@@:
-
 
896
           add [eax+CFS.VirtualAddress], edi  ;patch user space offset
-
 
897
           add eax, 40
-
 
898
           dec ebx
-
 
899
           jnz @B
-
 
900
 
-
 
901
           add edx, 20
-
 
902
           stdcall fix_coff_relocs, [coff], edx, [sym]
-
 
903
 
-
 
904
           mov ebx, [coff]
-
 
905
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szEXPORTS
-
 
906
           mov [exports], eax
-
 
907
 
-
 
908
           stdcall kernel_free, [coff]
-
 
909
           mov eax, [exports]
-
 
910
           ret
-
 
911
.fail:
-
 
912
           xor eax, eax
-
 
913
           ret
-
 
914
endp
-
 
915
 
808
 
916
 
809
drv_sound      db '/rd/1/unisound.obj', 0
917
drv_sound      db '/rd/1/unisound.obj', 0
Line 810... Line 918...
810
drv_infinity   db '/rd/1/infinity.obj', 0
918
drv_infinity   db '/rd/1/infinity.obj', 0
811
 
919