Rev 418 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 418 | Rev 419 | ||
---|---|---|---|
Line 338... | Line 338... | ||
338 | dec [pg_data.pg_mutex] |
338 | dec [pg_data.pg_mutex] |
339 | ret |
339 | ret |
340 | 340 | ||
Line 341... | Line 341... | ||
341 | .expand: |
341 | .expand: |
342 | add edi, new_app_base |
342 | ; add edi, new_app_base |
343 | add esi, new_app_base |
343 | ; add esi, new_app_base |
Line 344... | Line 344... | ||
344 | 344 | ||
345 | push esi |
345 | push esi |
Line 346... | Line 346... | ||
346 | push edi |
346 | push edi |
Line 455... | Line 455... | ||
455 | .err_addr equ ebp-4 |
455 | .err_addr equ ebp-4 |
456 | 456 | ||
Line 457... | Line 457... | ||
457 | pushad |
457 | pushad |
Line 458... | Line 458... | ||
458 | 458 | ||
459 | push eax |
459 | ; push eax |
460 | push edx |
460 | ; push edx |
461 | mov edx, 0x400 ;bocsh |
461 | ; mov edx, 0x400 ;bocsh |
462 | mov al,0xff ;bocsh |
462 | ; mov al,0xff ;bocsh |
463 | out dx, al ;bocsh |
463 | ; out dx, al ;bocsh |
464 | pop edx |
464 | ; pop edx |
Line 465... | Line 465... | ||
465 | pop eax |
465 | ; pop eax |
466 | 466 | ||
467 | mov ebp, esp |
467 | mov ebp, esp |
468 | mov eax, cr2 |
468 | mov eax, cr2 |
Line 476... | Line 476... | ||
476 | 476 | ||
Line 477... | Line 477... | ||
477 | inc [pg_data.pages_faults] |
477 | inc [pg_data.pages_faults] |
Line 478... | Line 478... | ||
478 | 478 | ||
- | 479 | mov ebx, [.err_addr] |
|
Line 479... | Line 480... | ||
479 | mov ebx, [.err_addr] |
480 | mov eax, [.err_code] |
480 | - | ||
481 | cmp ebx, 0x80000000 |
- | |
482 | jae .kernel_space |
481 | |
483 | - | ||
484 | cmp ebx, page_tabs+0x200000 |
- | |
485 | jae .tab_space |
- | |
486 | - | ||
Line 487... | Line 482... | ||
487 | cmp ebx, app_page_tabs |
482 | cmp ebx, OS_BASE |
488 | jae .alloc |
483 | jb .user_space ;ñòðàíèöà â ïàìÿòè ïðèëîæåíè |
Line -... | Line 484... | ||
- | 484 | ||
- | 485 | cmp ebx, page_tabs |
|
- | 486 | jb .kernel_space ;ñòðàíèöà â ïàìÿòè ÿäðà |
|
- | 487 | ||
489 | 488 | cmp ebx, kernel_tabs |
|
- | 489 | jb .alloc;.app_tabs ;òàáëèöû ñòðàíèö ïðèëîæåíè |
|
- | 490 | ;ïðîñòî ñîçäàäèì îäíó |
|
- | 491 | ||
- | 492 | cmp ebx, LFB_BASE |
|
- | 493 | jb .core_tabs ;òàáëèöû ñòðàíèö ÿäðà |
|
490 | cmp ebx, 0x7DC00000 |
494 | ;Îøèáêà |
Line -... | Line 495... | ||
- | 495 | .lfb: |
|
491 | jae .lfb_addr |
496 | ;îáëàñòü LFB |
- | 497 | ;Îøèáêà |
|
- | 498 | jmp .fail |
|
- | 499 | ||
- | 500 | align 4 |
|
492 | 501 | .user_space: |
|
493 | ; cmp ebx, 0x1000000 |
502 | test eax, PG_MAP |
494 | ; jb .exit |
503 | jnz .err_access ;Ñòðàíèöà ïðèñóòñòâóåò |
495 | 504 | ;Îøèáêà äîñòóïà ? |
|
496 | .user_space: |
505 | |
497 | shr ebx, 12 |
506 | shr ebx, 12 |
- | 507 | mov ecx, ebx |
|
Line 498... | Line 508... | ||
498 | mov ecx, ebx |
508 | shr ecx, 10 |
499 | shr ecx, 10 |
509 | mov edx, [master_tab+ecx*4] |
500 | mov edx, [master_tab+ecx*4] |
510 | test edx, PG_MAP |
- | 511 | jz .fail ;òàáëèöà ñòðàíèö íå ñîçäàíà |
|
501 | test edx, 1 |
512 | ;íåâåðíûé àäðåñ â ïðîãðàììå |
502 | jz .fail |
513 | |
503 | 514 | mov eax, [page_tabs+ebx*4] |
|
504 | mov eax, [page_tabs+ebx*4] |
515 | test eax, 2 |
Line 505... | Line 516... | ||
505 | test eax, 2 |
516 | jz .fail ;àäðåñ íå çàðåçåðâèðîâàí äë |
Line 506... | Line 517... | ||
506 | jz .fail |
517 | ;èñïîëüçîâàíèÿ. Îøèáêà |
507 | .alloc: |
518 | .alloc: |
Line 523... | Line 534... | ||
523 | mov esp, ebp |
534 | mov esp, ebp |
524 | popad |
535 | popad |
525 | add esp, 4 |
536 | add esp, 4 |
526 | iretd |
537 | iretd |
527 | .fail: |
538 | |
- | 539 | .err_access: |
|
- | 540 | ;íèêîãäà íå ïðîèñõîäèò |
|
- | 541 | jmp .fail |
|
- | 542 | ||
- | 543 | .kernel_space: |
|
- | 544 | test eax, PG_MAP |
|
- | 545 | jz .fail ;ñòðàíèöà íå ïðèñóòñòâóåò |
|
- | 546 | ||
- | 547 | test eax, 4 ;U/S |
|
- | 548 | jnz .fail ;ïðèëîæåíèå îáðàòèëîñü ê ïàìÿòè |
|
- | 549 | ;ÿäðà |
|
- | 550 | test eax, 8 |
|
- | 551 | jnz .fail ;óñòàíîâëåí çàðåçåðâèðîâàííûé áèò |
|
- | 552 | ;â òàáëèöàõ ñòðàíèö. äîáàâëåíî â P4/Xeon |
|
- | 553 | ||
- | 554 | ;ïîïûòêà çàïèñè â çàùèù¸ííóþ ñòðàíèöó ÿäðà |
|
- | 555 | ;íå îáðàáàòûâàåì. Îøèáêà |
|
- | 556 | ||
- | 557 | .core_tabs: |
|
- | 558 | .fail: |
|
528 | pop es |
559 | pop es |
529 | pop ds |
560 | pop ds |
530 | mov esp, ebp |
561 | mov esp, ebp |
531 | popad |
562 | popad |
532 | add esp, 4 |
563 | add esp, 4 |
Line 537... | Line 568... | ||
537 | mov bl, 14 |
568 | mov bl, 14 |
538 | jmp exc_c |
569 | jmp exc_c |
539 | iretd |
570 | iretd |
Line 540... | Line 571... | ||
540 | 571 | ||
541 | .kernel_space: |
572 | ;.kernel_space: |
542 | ; shr ebx, 12 |
573 | ; shr ebx, 12 |
543 | ; mov eax, [page_tabs+ebx*4] |
574 | ; mov eax, [page_tabs+ebx*4] |
544 | ; shr ebx, 10 |
575 | ; shr ebx, 10 |
545 | ; mov eax, [master_tab+ebx*4] |
576 | ; mov eax, [master_tab+ebx*4] |
546 | jmp .exit |
577 | jmp .exit |
547 | .old_addr: |
578 | ;.old_addr: |
548 | ; shr ebx, 12 |
579 | ; shr ebx, 12 |
549 | ; mov eax, [page_tabs+ebx*4] |
580 | ; mov eax, [page_tabs+ebx*4] |
550 | ; shr ebx, 10 |
581 | ; shr ebx, 10 |
551 | ; mov eax, [master_tab+ebx*4] |
582 | ; mov eax, [master_tab+ebx*4] |
552 | jmp .exit |
583 | jmp .exit |
553 | .lfb_addr: |
584 | ;.lfb_addr: |
554 | ; shr ebx, 22 |
585 | ; shr ebx, 22 |
555 | ; ;mov ecx, [sys_page_dir] |
586 | ; ;mov ecx, [sys_page_dir] |
556 | ; mov eax, [master_tab+ebx*4] |
587 | ; mov eax, [master_tab+ebx*4] |
557 | jmp .exit |
588 | jmp .exit |
558 | .tab_space: |
589 | ;.tab_space: |
559 | ; shr ebx, 12 |
590 | ; shr ebx, 12 |
560 | ; mov eax, [page_tabs+ebx*4] |
591 | ; mov eax, [page_tabs+ebx*4] |
561 | ; shr ebx, 10 |
592 | ; shr ebx, 10 |
562 | ; ;mov ecx, [sys_page_dir] |
593 | ; ;mov ecx, [sys_page_dir] |
563 | ; mov eax, [master_tab+ebx*4] |
594 | ; mov eax, [master_tab+ebx*4] |
564 | jmp .exit |
595 | ; jmp .exit |
Line 565... | Line 596... | ||
565 | endp |
596 | endp |
566 | 597 | ||
567 | align 4 |
598 | align 4 |
Line 704... | Line 735... | ||
704 | cli |
735 | cli |
705 | mov [eax+0xA0],ebx ;set fields in extended information area |
736 | mov [eax+0xA0],ebx ;set fields in extended information area |
706 | mov [eax+0xA4],ecx |
737 | mov [eax+0xA4],ecx |
707 | 738 | ||
Line 708... | Line 739... | ||
708 | add ebx, new_app_base |
739 | ; add ebx, new_app_base |
709 | add ecx, ebx |
740 | add ecx, ebx |
710 | add ecx, 4095 |
741 | add ecx, 4095 |
711 | and ecx, not 4095 |
742 | and ecx, not 4095 |
Line 712... | Line 743... | ||
712 | 743 | ||
Line 741... | Line 772... | ||
741 | test edi,edi |
772 | test edi,edi |
742 | jz .no_ipc_area |
773 | jz .no_ipc_area |
743 | 774 | ||
Line 744... | Line 775... | ||
744 | mov ebx, edi |
775 | mov ebx, edi |
745 | add edi, new_app_base |
776 | ; add edi, new_app_base |
746 | and ebx, 0xFFF |
777 | and ebx, 0xFFF |
747 | mov [dst_offset], ebx |
778 | mov [dst_offset], ebx |
Line 748... | Line 779... | ||
748 | 779 | ||
749 | mov esi, [eax+SLOT_BASE+0xa4] |
780 | mov esi, [eax+SLOT_BASE+0xa4] |
Line 775... | Line 806... | ||
775 | 806 | ||
Line 776... | Line 807... | ||
776 | mov [edi+4], ecx |
807 | mov [edi+4], ecx |
777 | add edi, 8 |
808 | add edi, 8 |
778 | mov esi, [msg_addr] |
809 | mov esi, [msg_addr] |
779 | add esi, new_app_base |
810 | ; add esi, new_app_base |
780 | cld |
811 | cld |
781 | rep movsb |
812 | rep movsb |
Line 782... | Line 813... | ||
782 | 813 | ||
783 | mov ebx, [ipc_tmp] |
814 | mov ebx, [ipc_tmp] |
Line 833... | Line 864... | ||
833 | 864 | ||
Line 834... | Line 865... | ||
834 | align 4 |
865 | align 4 |
835 | sysfn_meminfo: |
866 | sysfn_meminfo: |
Line 836... | Line 867... | ||
836 | 867 | ||
837 | add ebx, new_app_base |
868 | ; add ebx, new_app_base |
838 | cmp ebx, new_app_base |
869 | cmp ebx, OS_BASE |
Line 839... | Line 870... | ||
839 | jb .fail |
870 | jae .fail |
840 | 871 | ||
841 | mov eax, [pg_data.pages_count] |
872 | mov eax, [pg_data.pages_count] |
842 | mov [ebx], eax |
873 | mov [ebx], eax |
Line 881... | Line 912... | ||
881 | ret |
912 | ret |
882 | @@: |
913 | @@: |
883 | cmp eax, 13 |
914 | cmp eax, 13 |
884 | ja @f |
915 | ja @f |
885 | add ebx, new_app_base |
916 | ; add ebx, new_app_base |
886 | stdcall user_free, ebx |
917 | stdcall user_free, ebx |
887 | mov [esp+36], eax |
918 | mov [esp+36], eax |
888 | ret |
919 | ret |
889 | @@: |
920 | @@: |
890 | cmp eax, 14 |
921 | cmp eax, 14 |
891 | ja @f |
922 | ja @f |
892 | add ebx, new_app_base |
923 | ; add ebx, new_app_base |
893 | cmp ebx, new_app_base |
924 | cmp ebx, OS_BASE |
894 | jb .fail |
925 | jae .fail |
895 | stdcall get_event_ex, ebx, ecx |
926 | stdcall get_event_ex, ebx, ecx |
896 | mov [esp+36], eax |
927 | mov [esp+36], eax |
897 | ret |
928 | ret |
898 | @@: |
929 | @@: |
899 | cmp eax, 15 |
930 | cmp eax, 15 |
900 | ja @f |
931 | ja @f |
Line 909... | Line 940... | ||
909 | ja @f |
940 | ja @f |
910 | 941 | ||
Line 911... | Line 942... | ||
911 | test ebx, ebx |
942 | test ebx, ebx |
912 | jz .fail |
943 | jz .fail |
913 | add ebx, new_app_base |
944 | ; add ebx, new_app_base |
914 | cmp ebx, new_app_base |
945 | cmp ebx, OS_BASE |
915 | jb .fail |
946 | jae .fail |
916 | stdcall get_service, ebx |
947 | stdcall get_service, ebx |
917 | mov [esp+36], eax |
948 | mov [esp+36], eax |
918 | ret |
949 | ret |
919 | @@: |
950 | @@: |
920 | cmp eax, 17 |
951 | cmp eax, 17 |
Line 933... | Line 964... | ||
933 | ret |
964 | ret |
934 | @@: |
965 | @@: |
935 | cmp eax, 19 |
966 | cmp eax, 19 |
936 | ja .fail |
967 | ja .fail |
937 | add ebx, new_app_base |
968 | ; add ebx, new_app_base |
938 | cmp ebx, new_app_base |
969 | cmp ebx, OS_BASE |
939 | jb .fail |
970 | jae .fail |
940 | stdcall load_library, ebx |
971 | stdcall load_library, ebx |
941 | mov [esp+36], eax |
972 | mov [esp+36], eax |
942 | ret |
973 | ret |
943 | 974 | ||
Line 944... | Line 975... | ||
944 | .fail: |
975 | .fail: |