Rev 1204 | Rev 3374 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1204 | Rev 1488 | ||
---|---|---|---|
Line 115... | Line 115... | ||
115 | local __sc |
115 | local __sc |
116 | local lp |
116 | local lp |
117 | local lp1 |
117 | local lp1 |
118 | local correction |
118 | local correction |
119 | local exit_ |
119 | local exit_ |
120 | ;/equ |
120 | |
- | 121 | library_fun_memory_alloc equ 0 ;íå èñïîëüçîâàòü â ìàêðîñàõ ïðîâåðêó íà ôóíêöèè 'lib_init' |
|
121 | err_message1 equ dword [esp+8] |
122 | err_message1 equ dword [esp+8] |
122 | head1 equ dword [esp+4] |
123 | head1 equ dword [esp+4] |
Line 123... | Line 124... | ||
123 | 124 | ||
Line 323... | Line 324... | ||
323 | ret |
324 | ret |
324 | } |
325 | } |
Line -... | Line 326... | ||
- | 326 | ||
- | 327 | ||
- | 328 | ||
- | 329 | macro @use_library_mem mem_alloc,mem_free,mem_realloc,dll_load |
|
- | 330 | { |
|
- | 331 | @use_library |
|
- | 332 | library_fun_memory_alloc equ mem_alloc |
|
- | 333 | library_fun_memory_free equ mem_free |
|
- | 334 | library_fun_memory_realloc equ mem_realloc |
|
- | 335 | library_fun_dll_load equ dll_load |
|
325 | 336 | } |
|
326 | 337 | ||
327 | 338 | ||
328 | macro sys_load_library library_name__, cur_dir_path__, library_path__, system_path__, err_message_found_lib__, head_f_l__, myimport, err_message_import__, head_f_i__,point_dir_name__ |
339 | macro sys_load_library library_name__, cur_dir_path__, library_path__, system_path__, err_message_found_lib__, head_f_l__, myimport, err_message_import__, head_f_i__,point_dir_name__ |
329 | { |
340 | { |
Line 587... | Line 598... | ||
587 | popad ;restore all registers |
598 | popad ;restore all registers |
588 | or eax,-1 ;óâû |
599 | or eax,-1 ;óâû |
589 | } |
600 | } |
Line -... | Line 601... | ||
- | 601 | ||
- | 602 | ||
- | 603 | ;âõîäíûå ïàðàìåòðû: |
|
590 | 604 | ;eax - àäðåñ áèáëèîòåêè â ïàìÿòè |
|
591 | 605 | ;myimport - èìïîðòèðóåìûå ôóíêöèè |
|
592 | macro import_boxlib myimport, err_message_import__, head_f_i__ |
606 | macro import_boxlib myimport, err_message_import__, head_f_i__ |
593 | { |
607 | { |
594 | local import_loop |
608 | local import_loop |
Line 603... | Line 617... | ||
603 | ; initialize import |
617 | ; initialize import |
Line 604... | Line 618... | ||
604 | 618 | ||
605 | mov edx, eax |
619 | mov edx, eax |
606 | mov esi,myimport |
620 | mov esi,myimport |
607 | import_loop: |
- | |
- | 621 | import_loop: |
|
608 | lodsd |
622 | lodsd ;mov eax,dword[esi] ;add esi,4 ;ïîëó÷àåì â eax óêàçàòåëü íà èìÿ èìïîðòèðóåìîé ôóíêöèè |
609 | test eax, eax |
623 | test eax, eax |
610 | jz import_done |
624 | jz import_done ;åñëè óêàçàòåëü íà èìÿ ôóíêöèè = 0 (â ïîëüçîâàòåëüñêîé ïðîãðàììå) |
611 | push edx |
625 | push edx ;ñîõðàíÿåì íà÷àëî áèáëèîòå÷íûõ óêàçàòåëåé íà ôóíêöèè |
612 | import_find: |
626 | import_find: |
613 | mov ebx, [ds:edx] |
627 | mov ebx, [ds:edx] |
614 | test ebx, ebx |
628 | test ebx, ebx |
615 | jz import_not_found |
629 | jz import_not_found ;åñëè óêàçàòåëü íà èìÿ ôóíêöèè = 0 (â áèáëèîòåêå) |
616 | push eax |
630 | push eax ;eax - óêàçàòåëü íà èìÿ ýêñïîðòèðóåìîé ôóíêöèè (â ïîëüçîâàòåëüñêîé ïðîãðàììå) |
617 | lp: |
631 | lp: |
618 | mov cl, [ds:eax] |
632 | mov cl, [ds:eax] |
619 | cmp cl, [ds:ebx] |
633 | cmp cl, [ds:ebx] ;ñðàâíèâàåì èìåíà ôóíêöèé â áèáëèîòåêå è â ïîëüçîâàòåëüñêîé ïðîãðàììå |
620 | jnz import_find_next |
634 | jnz import_find_next ;åñëè íàçâàíèÿ íå ñîâïàëè |
621 | test cl, cl |
635 | test cl, cl |
622 | jz import_found |
636 | jz import_found ;åñëè íàçâàíèÿ ñîâïàëè, è óæå êîíåö ñòðîêè (cl=0) |
623 | inc eax |
637 | inc eax |
624 | inc ebx |
638 | inc ebx |
625 | jmp lp |
639 | jmp lp |
626 | import_find_next: |
640 | import_find_next: |
627 | pop eax |
641 | pop eax |
628 | add edx, 8 |
642 | add edx, 8 ;8 = 4 áàéòà óêàçàòåëü íà íàçâàíèå è 4 áàéòà óêàçàòåëü íà ôóíêöèþ |
629 | jmp import_find |
643 | jmp import_find |
- | 644 | import_found: |
|
- | 645 | pop ebx ;âîñòàíàâëèâàåì óêàçàòåëü íà èìÿ ôóíêöèè (êîòîðûé áûë â eax) è îñâîáîæäàåì ñòåê |
|
- | 646 | mov eax, [ds:edx+4] ;eax = óêàçàòåëü íà ôóíêöèþ (â áèáëèîòåêå) |
|
- | 647 | mov [esi-4], eax ;êîïèðóåì óêàçàòåëü (íà ôóíêöèþ) â ïðîãðàììó, -4 ñòàâèì ïîòîìó ÷òî esi áûëî ñäâèíóòî êîìàíäîé lodsd |
|
- | 648 | pop edx ;óñòàíàâëèâàåì edx íà íà÷àëî áèáëèîòå÷íûõ ôóíêöèé |
|
- | 649 | ;--- ïðîâåðÿåì ñîâïàäàåò ëè èìÿ ýêñïîðòèðîâàííîé ôóíêöèè ñ 'lib_init' |
|
- | 650 | if library_fun_memory_alloc eq 0 |
|
- | 651 | else |
|
630 | import_found: |
652 | cmp dword[ebx],'lib_' |
631 | pop eax |
653 | jne import_loop |
- | 654 | cmp dword[ebx+4],'init' |
|
- | 655 | jne import_loop |
|
- | 656 | ;--- åñëè èìÿ ôóíêöèè ñîâïàëî ñ 'lib_init' ïîïàäàåì ñþäà |
|
- | 657 | ;ïîäêëþ÷åíèå ôóíêöèé äëÿ ðàáîòû ñ ïàìÿòüþ |
|
- | 658 | ;push eax |
|
- | 659 | ;call dll.Init |
|
632 | mov eax, [ds:edx+4] |
660 | pushad |
- | 661 | mov esi,eax |
|
- | 662 | mov eax,library_fun_memory_alloc |
|
- | 663 | mov ebx,library_fun_memory_free |
|
- | 664 | mov ecx,library_fun_memory_realloc |
|
633 | mov [esi-4], eax |
665 | mov edx,library_fun_dll_load |
- | 666 | call dword esi |
|
- | 667 | popad |
|
634 | pop edx |
668 | end if |
635 | jmp import_loop |
669 | jmp import_loop |
636 | import_not_found: |
670 | import_not_found: |
637 | add esp,4 |
671 | add esp,4 |
638 | show_error_window err_message_import__, head_f_i__ ;show error message /create window |
672 | show_error_window err_message_import__, head_f_i__ ;show error message /create window |
639 | jmp e.exit |
673 | jmp e.exit |
640 | import_done: |
674 | import_done: |
641 | xor eax,eax |
675 | xor eax,eax ;=0 âñå çàãðóçèëîñü óäà÷íî |
642 | e.exit: |
676 | e.exit: |
643 | ;--------------------------------------------------------------------- |
677 | ;--------------------------------------------------------------------- |
644 | } |
678 | } |
645 | ll_struc_size = 48;($-library_name__) ; constant size of struct |
679 | ll_struc_size = 48;($-library_name__) ; constant size of struct |