Rev 170 | Rev 188 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 170 | Rev 172 | ||
---|---|---|---|
Line 630... | Line 630... | ||
630 | locals |
630 | locals |
631 | tab_count dd ? |
631 | tab_count dd ? |
632 | endl |
632 | endl |
633 | 633 | ||
Line -... | Line 634... | ||
- | 634 | mov ebx,[CURRENT_TASK] |
|
- | 635 | shl ebx,8 |
|
- | 636 | mov eax, [PROC_BASE+APPDATA.heap_top+ebx] |
|
- | 637 | test eax, eax |
|
- | 638 | jz @F |
|
- | 639 | sub eax,[PROC_BASE+APPDATA.heap_base+ebx] |
|
- | 640 | sub eax, 4096 |
|
- | 641 | ret |
|
- | 642 | @@: |
|
634 | mov edx, [heap_size] |
643 | mov edx, [heap_size] |
635 | and edx, edx |
644 | and edx, edx |
636 | jz .exit |
645 | jz .exit |
637 | add edx, 4095 |
646 | add edx, (4095+4096) |
638 | and edx, not 4095 |
647 | and edx, not 4095 |
639 | mov [heap_size], edx |
648 | mov [heap_size], edx |
640 | add edx, 0x003FFFFF |
649 | add edx, 0x003FFFFF |
641 | and edx, not 0x003FFFFF |
650 | and edx, not 0x003FFFFF |
642 | shr edx, 22 |
651 | shr edx, 22 |
643 | mov [tab_count], edx |
652 | mov [tab_count], edx |
Line 644... | Line -... | ||
644 | - | ||
645 | mov ebx,[CURRENT_TASK] |
- | |
646 | shl ebx,8 |
653 | |
647 | mov esi, [PROC_BASE+0x8c+ebx] |
654 | mov esi, [PROC_BASE+APPDATA.mem_size+ebx] |
648 | add esi, 0x003FFFFF |
655 | add esi, 0x003FFFFF |
649 | and esi, not 0x003FFFFF |
656 | and esi, not 0x003FFFFF |
650 | mov edi, esi |
657 | mov edi, esi |
651 | mov [PROC_BASE+0x18+ebx], esi |
658 | mov [PROC_BASE+APPDATA.heap_base+ebx], esi |
652 | add esi, [heap_size] |
659 | add esi, [heap_size] |
Line 653... | Line 660... | ||
653 | mov [PROC_BASE+0x1C+ebx], esi |
660 | mov [PROC_BASE+APPDATA.heap_top+ebx], esi |
654 | 661 | ||
655 | mov eax, cr3 |
662 | mov eax, cr3 |
Line 670... | Line 677... | ||
670 | mov ecx, [tab_count] |
677 | mov ecx, [tab_count] |
671 | shl ecx, 12-2 |
678 | shl ecx, 12-2 |
672 | mov ebx,[CURRENT_TASK] |
679 | mov ebx,[CURRENT_TASK] |
673 | shl ebx,8 |
680 | shl ebx,8 |
674 | mov edi, [PROC_BASE+0x18+ebx] |
681 | mov edi, [PROC_BASE+APPDATA.heap_base+ebx] |
675 | add edi, new_app_base |
682 | add edi, new_app_base |
676 | shr edi, 10 |
683 | shr edi, 10 |
677 | mov esi, edi |
684 | mov esi, edi |
678 | add edi, pages_tab |
685 | add edi, pages_tab |
679 | xor eax, eax |
686 | xor eax, eax |
Line 686... | Line 693... | ||
686 | mov eax, ebx |
693 | mov eax, ebx |
687 | sub eax, 4096 |
694 | sub eax, 4096 |
688 | or ebx, FREE_BLOCK |
695 | or ebx, FREE_BLOCK |
689 | mov [pages_tab+esi], ebx |
696 | mov [pages_tab+esi], ebx |
690 | 697 | ret |
|
691 | ret |
- | |
692 | .exit: |
698 | .exit: |
693 | xor eax, eax |
699 | xor eax, eax |
694 | ret |
700 | ret |
695 | endp |
701 | endp |
696 | 702 | ||
Line 702... | Line 708... | ||
702 | and ecx, not 4095 |
708 | and ecx, not 4095 |
703 | 709 | ||
Line 704... | Line 710... | ||
704 | mov ebx, [CURRENT_TASK] |
710 | mov ebx, [CURRENT_TASK] |
705 | shl ebx, 8 |
711 | shl ebx, 8 |
706 | mov esi, dword [ebx+PROC_BASE+0x18]; heap_base |
712 | mov esi, dword [ebx+PROC_BASE+APPDATA.heap_base]; heap_base |
707 | mov edi, dword [ebx+PROC_BASE+0x1C]; heap_top |
713 | mov edi, dword [ebx+PROC_BASE+APPDATA.heap_top]; heap_top |
708 | add esi, new_app_base |
714 | add esi, new_app_base |
709 | add edi, new_app_base |
715 | add edi, new_app_base |
Line 710... | Line 716... | ||
710 | 716 | ||
711 | l_0: |
717 | l_0: |
Line 786... | Line 792... | ||
786 | jnz .release |
792 | jnz .release |
787 | @@: |
793 | @@: |
788 | mov ebx, [CURRENT_TASK] |
794 | mov ebx, [CURRENT_TASK] |
789 | shl ebx, 8 |
795 | shl ebx, 8 |
790 | mov esi, dword [ebx+PROC_BASE+0x18]; heap_base |
796 | mov esi, dword [ebx+PROC_BASE+APPDATA.heap_base]; heap_base |
791 | mov edi, dword [ebx+PROC_BASE+0x1C]; heap_top |
797 | mov edi, dword [ebx+PROC_BASE+APPDATA.heap_top]; heap_top |
792 | shr esi, 12 |
798 | shr esi, 12 |
793 | shr edi, 12 |
799 | shr edi, 12 |
794 | @@: |
800 | @@: |
795 | mov eax, [pages_tab+esi*4] |
801 | mov eax, [pages_tab+esi*4] |
796 | test eax, USED_BLOCK |
802 | test eax, USED_BLOCK |
797 | jz .test_free |
803 | jz .test_free |
Line 832... | Line 838... | ||
832 | xor eax, eax |
838 | xor eax, eax |
833 | ret |
839 | ret |
834 | endp |
840 | endp |
835 | 841 | ||
Line 836... | Line -... | ||
836 | - | ||
837 | ;proc new_mem_resize stdcall, new_size:dword |
- | |
838 | ; |
- | |
839 | ; stdcall wait_mutex, pg_data.pg_mutex |
- | |
840 | ; |
- | |
841 | ; mov edi, [new_size] |
- | |
842 | ; add edi,4095 |
- | |
843 | ; and edi,not 4095 |
- | |
844 | ; mov [new_size], edi |
- | |
845 | - | ||
846 | ; mov edx,[CURRENT_TASK] |
- | |
847 | ; shl edx,8 |
- | |
848 | ; mov esi, [PROC_BASE+0x8c+edx] |
- | |
849 | ; add esi, 4095 |
- | |
850 | ; and esi, not 4095 |
- | |
851 | - | ||
852 | ; cmp edi, esi |
- | |
853 | ; jae .expand |
- | |
854 | - | ||
855 | ; shr edi, 12 |
- | |
856 | ; shr esi, 12 |
- | |
857 | ; |
- | |
858 | ;@@: mov eax, [pages_tab+0x4000+edi*4] |
- | |
859 | ; test eax, 1 |
- | |
860 | ; jz .next |
- | |
861 | ; mov dword [pages_tab+0x4000+edi*4], 2 |
- | |
862 | ; mov ebx, edi |
- | |
863 | ; shl ebx, 12 |
- | |
864 | ; invlpg [ebx+std_application_base_address] |
- | |
865 | ; call free_page |
- | |
866 | ; |
- | |
867 | ;.next: add edi, 1 |
- | |
868 | ; cmp edi, esi |
- | |
869 | ; jb @B |
- | |
870 | ; |
- | |
871 | ;.update_size: |
- | |
872 | - | ||
873 | ; mov ebx, [new_size] |
- | |
874 | ; mov [PROC_BASE+0x8c+edx],ebx |
- | |
875 | ; |
- | |
876 | ;;search threads and update |
- | |
877 | ;;application memory size infomation |
- | |
878 | ; mov ecx,[PROC_BASE+0xb8+edx] |
- | |
879 | ; mov eax,2 |
- | |
880 | - | ||
881 | ;.search_threads: |
- | |
882 | ;;eax = current slot |
- | |
883 | ;;ebx = new memory size |
- | |
884 | ;;ecx = page directory |
- | |
885 | ; cmp eax,[TASK_COUNT] |
- | |
886 | ; jg .search_threads_end |
- | |
887 | ; mov edx,eax |
- | |
888 | ; shl edx,5 |
- | |
889 | ; cmp word [CURRENT_TASK+edx+0xa],9 ;if slot empty? |
- | |
890 | ; jz .search_threads_next |
- | |
891 | ; shl edx,3 |
- | |
892 | ; cmp [PROC_BASE+edx+0xb8],ecx ;if it is our thread? |
- | |
893 | ; jnz .search_threads_next |
- | |
894 | ; mov [PROC_BASE+edx+0x8c],ebx ;update memory size |
- | |
895 | ;.search_threads_next: |
- | |
896 | ; inc eax |
- | |
897 | ; jmp .search_threads |
- | |
898 | ;.search_threads_end: |
- | |
899 | ; xor eax, eax |
- | |
900 | ; dec [pg_data.pg_mutex] |
- | |
901 | ; ret |
- | |
902 | ; |
- | |
903 | ; |
- | |
904 | ;.expand: |
- | |
905 | ; add edi, new_app_base |
- | |
906 | ; add esi, new_app_base |
- | |
907 | ; |
- | |
908 | ;.grow: call alloc_page |
- | |
909 | ; test eax, eax |
- | |
910 | ; jz .exit |
- | |
911 | ; stdcall map_page,esi,eax,dword PG_UW |
- | |
912 | - | ||
913 | ; push edi |
- | |
914 | ; mov edi, esi |
- | |
915 | ; xor eax, eax |
- | |
916 | ; mov ecx, 1024 |
- | |
917 | ; cld |
- | |
918 | ; rep stosd |
- | |
919 | ; pop edi |
- | |
920 | - | ||
921 | ; add esi, 0x1000 |
- | |
922 | ; cmp esi, edi |
- | |
923 | ; jna .grow |
- | |
924 | ; jmp .update_size |
- | |
925 | ;.exit: |
- | |
926 | ; xor eax, eax |
- | |
927 | ; inc eax |
- | |
928 | ; dec [pg_data.pg_mutex] |
- | |
929 | ; ret |
- | |
930 | ;endp |
- | |
931 | - | ||
932 | - | ||
933 | align 4 |
842 | align 4 |
934 | proc alloc_dll |
843 | proc alloc_dll |
935 | pushf |
844 | pushf |
936 | cli |
845 | cli |
937 | bsf eax, [dll_map] |
846 | bsf eax, [dll_map] |
Line 962... | Line 871... | ||
962 | shl eax,5 |
871 | shl eax,5 |
963 | add eax, srv_tab |
872 | add eax, srv_tab |
964 | ret |
873 | ret |
965 | endp |
874 | endp |
966 | 875 | ||
967 | if NEW |
- | |
968 | - | ||
969 | align 16 |
- | |
970 | new_services: |
- | |
971 | cmp eax, 10 |
- | |
972 | jb .fail |
- | |
973 | ja @f |
- | |
974 | - | ||
975 | push dword [ebp+8+new_app_base] |
- | |
976 | call get_mem_info |
- | |
977 | mov [esp+36], eax |
- | |
978 | ret |
- | |
979 | @@: |
- | |
980 | cmp eax, 11 |
- | |
981 | ja @f |
- | |
982 | - | ||
983 | push dword [ebp+8+new_app_base] |
- | |
984 | call init_heap |
- | |
985 | mov [esp+36], eax |
- | |
986 | ret |
- | |
987 | @@: |
- | |
988 | cmp eax, 12 |
- | |
989 | ja @f |
- | |
990 | - | ||
991 | push dword [ebp+8+new_app_base] |
- | |
992 | call user_alloc |
- | |
993 | mov [esp+36], eax |
- | |
994 | ret |
- | |
995 | @@: |
- | |
996 | cmp eax, 13 |
- | |
997 | ja @f |
- | |
998 | - | ||
999 | push dword [ebp+8+new_app_base] |
- | |
1000 | call user_free |
- | |
1001 | mov [esp+36], eax |
- | |
1002 | ret |
- | |
1003 | - | ||
1004 | @@: |
- | |
1005 | cmp eax, 14 |
- | |
1006 | ja @f |
- | |
1007 | mov eax, [ebp+8+new_app_base] |
- | |
1008 | add eax,new_app_base |
- | |
1009 | stdcall get_notify, eax |
- | |
1010 | ret |
- | |
1011 | ;@@: |
- | |
1012 | ; cmp eax, 15 |
- | |
1013 | ; ja @f |
- | |
1014 | ; call set_notify |
- | |
1015 | ; ret |
- | |
1016 | @@: |
- | |
1017 | cmp eax, 16 |
- | |
1018 | ja @f |
- | |
1019 | - | ||
1020 | mov eax, [ebp+8+new_app_base] |
- | |
1021 | add eax, new_app_base |
- | |
1022 | stdcall get_service, eax |
- | |
1023 | mov [esp+36], eax |
- | |
1024 | ret |
- | |
1025 | @@: |
- | |
1026 | cmp eax, 17 |
- | |
1027 | ja @f |
- | |
1028 | stdcall srv_handler,[ebp+8+new_app_base],\ |
- | |
1029 | [ebp+12+new_app_base],\ |
- | |
1030 | [ebp+16+new_app_base] |
- | |
1031 | mov [esp+36], eax |
- | |
1032 | ret |
- | |
1033 | ;@@: |
- | |
1034 | ; cmp eax, 20 |
- | |
1035 | ; ja @f |
- | |
1036 | ; call CreateSound |
- | |
1037 | ; mov [esp+36], eax |
- | |
1038 | ; ret |
- | |
1039 | - | ||
1040 | @@: |
- | |
1041 | .fail: |
- | |
1042 | xor eax, eax |
- | |
1043 | mov [esp+36], eax |
- | |
1044 | ret |
- | |
1045 | - | ||
1046 | proc strncmp stdcall, str1:dword, str2:dword, count:dword |
- | |
1047 | - | ||
1048 | mov ecx,[count] |
- | |
1049 | jecxz .end |
- | |
1050 | - | ||
1051 | mov ebx,ecx |
- | |
1052 | - | ||
1053 | mov edi,[str1] |
- | |
1054 | mov esi,edi |
- | |
1055 | xor eax,eax |
- | |
1056 | repne scasb |
- | |
1057 | neg ecx ; cx = count - strlen |
- | |
1058 | add ecx,ebx ; strlen + count - strlen |
- | |
1059 | - | ||
1060 | .okay: |
- | |
1061 | mov edi,esi |
- | |
1062 | mov esi,[str2] |
- | |
1063 | repe cmpsb |
- | |
1064 | mov al,[esi-1] |
- | |
1065 | xor ecx,ecx |
- | |
1066 | - | ||
1067 | cmp al,[edi-1] |
- | |
1068 | ja .str2_big |
- | |
1069 | je .end |
- | |
1070 | - | ||
1071 | .str1_big: |
- | |
1072 | sub ecx,2 |
- | |
1073 | - | ||
1074 | .str2_big: |
- | |
1075 | not ecx |
- | |
1076 | .end: |
- | |
1077 | mov eax,ecx |
- | |
1078 | ret |
- | |
1079 | endp |
- | |
1080 | - | ||
1081 | - | ||
1082 | proc get_proc stdcall, exp:dword, sz_name:dword |
- | |
1083 | - | ||
1084 | mov edx, [exp] |
- | |
1085 | .next: |
- | |
1086 | mov eax, [edx] |
- | |
1087 | test eax, eax |
- | |
1088 | jz .end |
- | |
1089 | - | ||
1090 | push edx |
- | |
1091 | stdcall strncmp, eax, [sz_name], 16 |
- | |
1092 | pop edx |
- | |
1093 | test eax, eax |
- | |
1094 | jz .ok |
- | |
1095 | - | ||
1096 | add edx,8 |
- | |
1097 | jmp .next |
- | |
1098 | .ok: |
- | |
1099 | mov eax, [edx+4] |
- | |
1100 | .end: |
- | |
1101 | ret |
- | |
1102 | endp |
- | |
1103 | - | ||
1104 | proc link_dll stdcall, exp:dword, imp:dword |
- | |
1105 | mov esi, [imp] |
- | |
1106 | - | ||
1107 | .next: |
- | |
1108 | mov eax, [esi] |
- | |
1109 | test eax, eax |
- | |
1110 | jz .end |
- | |
1111 | - | ||
1112 | push esi |
- | |
1113 | stdcall get_proc, [exp], eax |
- | |
1114 | pop esi |
- | |
1115 | - | ||
1116 | test eax, eax |
- | |
1117 | jz @F |
- | |
1118 | - | ||
1119 | mov [esi], eax |
- | |
1120 | @@: |
- | |
1121 | add esi, 4 |
- | |
1122 | jmp .next |
- | |
1123 | .end: |
- | |
1124 | ret |
- | |
1125 | endp |
- | |
1126 | - | ||
1127 | end if |
- | |
1128 | - | ||
1129 | - | ||
1130 | - | ||
1131 | - |