Rev 410 | Rev 542 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 410 | Rev 485 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | format binary |
1 | format binary |
- | 2 | include '..\..\macros.inc' |
|
2 | use32 |
3 | use32 |
3 | db 'MENUET01' |
4 | db 'MENUET01' |
4 | dd 1 |
5 | dd 1 |
5 | dd start |
6 | dd start |
6 | dd i_end |
7 | dd i_end |
Line 65... | Line 66... | ||
65 | call put_message_nodraw |
66 | call put_message_nodraw |
66 | ; set event mask - default events and debugging events |
67 | ; set event mask - default events and debugging events |
67 | push 40 |
68 | push 40 |
68 | pop eax |
69 | pop eax |
69 | mov ebx, 0x107 |
70 | mov ebx, 0x107 |
70 | int 40h |
71 | mcall |
71 | ; set debug messages buffer |
72 | ; set debug messages buffer |
72 | mov ecx, dbgbufsize |
73 | mov ecx, dbgbufsize |
73 | mov dword [ecx], 256 |
74 | mov dword [ecx], 256 |
74 | xor ebx, ebx |
75 | xor ebx, ebx |
75 | mov [ecx+4], ebx |
76 | mov [ecx+4], ebx |
76 | mov al, 69 |
77 | mov al, 69 |
77 | int 40h |
78 | mcall |
78 | mov esi, i_param |
79 | mov esi, i_param |
79 | call skip_spaces |
80 | call skip_spaces |
80 | test al, al |
81 | test al, al |
81 | jz dodraw |
82 | jz dodraw |
82 | push esi |
83 | push esi |
Line 87... | Line 88... | ||
87 | dodraw: |
88 | dodraw: |
88 | call draw_window |
89 | call draw_window |
89 | waitevent: |
90 | waitevent: |
90 | push 10 |
91 | push 10 |
91 | pop eax |
92 | pop eax |
92 | int 40h |
93 | mcall |
93 | cmp al, 9 |
94 | cmp al, 9 |
94 | jz debugmsg |
95 | jz debugmsg |
95 | dec eax |
96 | dec eax |
96 | jz dodraw |
97 | jz dodraw |
97 | dec eax |
98 | dec eax |
Line 99... | Line 100... | ||
99 | dec eax |
100 | dec eax |
100 | jnz waitevent |
101 | jnz waitevent |
101 | ; button pressed - we have only one button (close) |
102 | ; button pressed - we have only one button (close) |
102 | push -1 |
103 | push -1 |
103 | pop eax |
104 | pop eax |
104 | int 40h |
105 | mcall |
105 | keypressed: |
106 | keypressed: |
106 | mov al, 2 |
107 | mov al, 2 |
107 | int 40h |
108 | mcall |
108 | shr eax, 8 |
109 | shr eax, 8 |
109 | cmp al, 8 |
110 | cmp al, 8 |
110 | jz .backspace |
111 | jz .backspace |
111 | cmp al, 0xB0 |
112 | cmp al, 0xB0 |
112 | jz .left |
113 | jz .left |
Line 332... | Line 333... | ||
332 | add ebx, cmdline_x_pos |
333 | add ebx, cmdline_x_pos |
333 | shl ebx, 16 |
334 | shl ebx, 16 |
334 | or ebx, ecx |
335 | or ebx, ecx |
335 | mov ecx, cmdline_y_pos*10000h + cmdline_y_size |
336 | mov ecx, cmdline_y_pos*10000h + cmdline_y_size |
336 | mov edx, 0xFFFFFF |
337 | mov edx, 0xFFFFFF |
337 | int 40h |
338 | mcall |
338 | ret |
339 | ret |
Line 339... | Line 340... | ||
339 | 340 | ||
340 | draw_cmdline: |
341 | draw_cmdline: |
341 | xor ebx, ebx |
342 | xor ebx, ebx |
Line 351... | Line 352... | ||
351 | lea edx, [cmdline+ebx] |
352 | lea edx, [cmdline+ebx] |
352 | imul ebx, 6 |
353 | imul ebx, 6 |
353 | add ebx, cmdline_x_pos |
354 | add ebx, cmdline_x_pos |
354 | shl ebx, 16 |
355 | shl ebx, 16 |
355 | or ebx, cmdline_y_pos+1 |
356 | or ebx, cmdline_y_pos+1 |
356 | int 40h |
357 | mcall |
357 | ret |
358 | ret |
Line 358... | Line 359... | ||
358 | 359 | ||
359 | put_message_nodraw: |
360 | put_message_nodraw: |
360 | ; in: esi->ASCIZ message |
361 | ; in: esi->ASCIZ message |
Line 447... | Line 448... | ||
447 | push 13 |
448 | push 13 |
448 | pop eax |
449 | pop eax |
449 | mov edx, 0xFFFFFF |
450 | mov edx, 0xFFFFFF |
450 | mov ebx, messages_x_pos*10000h+messages_x_size |
451 | mov ebx, messages_x_pos*10000h+messages_x_size |
451 | mov ecx, messages_y_pos*10000h+messages_y_size |
452 | mov ecx, messages_y_pos*10000h+messages_y_size |
452 | int 40h |
453 | mcall |
453 | mov edx, messages |
454 | mov edx, messages |
454 | push messages_width |
455 | push messages_width |
455 | pop esi |
456 | pop esi |
456 | xor ecx, ecx |
457 | xor ecx, ecx |
457 | mov al, 4 |
458 | mov al, 4 |
458 | mov ebx, messages_x_pos*10000h+messages_y_pos |
459 | mov ebx, messages_x_pos*10000h+messages_y_pos |
459 | @@: |
460 | @@: |
460 | int 40h |
461 | mcall |
461 | add edx, esi |
462 | add edx, esi |
462 | add ebx, 10 |
463 | add ebx, 10 |
463 | cmp edx, messages+messages_width*messages_height |
464 | cmp edx, messages+messages_width*messages_height |
464 | jb @b |
465 | jb @b |
465 | ret |
466 | ret |
Line 473... | Line 474... | ||
473 | add ebx, cmdline_x_pos |
474 | add ebx, cmdline_x_pos |
474 | mov edx, ebx |
475 | mov edx, ebx |
475 | shl ebx, 16 |
476 | shl ebx, 16 |
476 | or ebx, edx |
477 | or ebx, edx |
477 | xor edx, edx |
478 | xor edx, edx |
478 | int 40h |
479 | mcall |
479 | ret |
480 | ret |
480 | hide_cursor: |
481 | hide_cursor: |
481 | mov ebx, [cmdline_pos] |
482 | mov ebx, [cmdline_pos] |
482 | push 13 |
483 | push 13 |
483 | pop eax |
484 | pop eax |
Line 485... | Line 486... | ||
485 | add ebx, cmdline_x_pos |
486 | add ebx, cmdline_x_pos |
486 | shl ebx, 16 |
487 | shl ebx, 16 |
487 | inc ebx |
488 | inc ebx |
488 | mov ecx, cmdline_y_pos*10000h + cmdline_y_size |
489 | mov ecx, cmdline_y_pos*10000h + cmdline_y_size |
489 | mov edx, 0xFFFFFF |
490 | mov edx, 0xFFFFFF |
490 | int 40h |
491 | mcall |
491 | mov ebx, [cmdline_pos] |
492 | mov ebx, [cmdline_pos] |
492 | cmp ebx, [cmdline_len] |
493 | cmp ebx, [cmdline_len] |
493 | jae .ret |
494 | jae .ret |
494 | mov al, 4 |
495 | mov al, 4 |
495 | xor ecx, ecx |
496 | xor ecx, ecx |
Line 498... | Line 499... | ||
498 | add ebx, cmdline_x_pos |
499 | add ebx, cmdline_x_pos |
499 | shl ebx, 16 |
500 | shl ebx, 16 |
500 | or ebx, cmdline_y_pos+1 |
501 | or ebx, cmdline_y_pos+1 |
501 | push 1 |
502 | push 1 |
502 | pop esi |
503 | pop esi |
503 | int 40h |
504 | mcall |
504 | .ret: |
505 | .ret: |
505 | ret |
506 | ret |
Line 506... | Line 507... | ||
506 | 507 | ||
507 | redraw_title: |
508 | redraw_title: |
508 | push 13 |
509 | push 13 |
509 | pop eax |
510 | pop eax |
510 | mov edx, 0xFFFFFF |
511 | mov edx, 0xFFFFFF |
511 | mov ebx, title_x_pos*10000h + data_x_pos+data_x_size-title_x_pos |
512 | mov ebx, title_x_pos*10000h + data_x_pos+data_x_size-title_x_pos |
512 | mov ecx, title_y_pos*10000h + title_y_size |
513 | mov ecx, title_y_pos*10000h + title_y_size |
513 | int 40h |
514 | mcall |
514 | draw_title: |
515 | draw_title: |
515 | mov al, 38 |
516 | mov al, 38 |
516 | mov ebx, (data_x_pos-2)*10000h + title_x_pos-5 |
517 | mov ebx, (data_x_pos-2)*10000h + title_x_pos-5 |
517 | mov ecx, (title_y_pos+5)*10001h |
518 | mov ecx, (title_y_pos+5)*10001h |
518 | xor edx, edx |
519 | xor edx, edx |
519 | int 40h |
520 | mcall |
520 | push NoPrgLoaded_len |
521 | push NoPrgLoaded_len |
521 | pop esi |
522 | pop esi |
522 | cmp [debuggee_pid], 0 |
523 | cmp [debuggee_pid], 0 |
523 | jz @f |
524 | jz @f |
Line 528... | Line 529... | ||
528 | mov bx, data_x_pos+data_x_size-10-5-6*7 |
529 | mov bx, data_x_pos+data_x_size-10-5-6*7 |
529 | cmp [bSuspended], 0 |
530 | cmp [bSuspended], 0 |
530 | jz @f |
531 | jz @f |
531 | add ebx, 6 |
532 | add ebx, 6 |
532 | @@: |
533 | @@: |
533 | int 40h |
534 | mcall |
534 | mov ebx, (data_x_pos+data_x_size-10+4)*0x10000 + data_x_pos+data_x_size+2 |
535 | mov ebx, (data_x_pos+data_x_size-10+4)*0x10000 + data_x_pos+data_x_size+2 |
535 | int 40h |
536 | mcall |
536 | mov al, 4 |
537 | mov al, 4 |
537 | mov ebx, title_x_pos*10000h+title_y_pos |
538 | mov ebx, title_x_pos*10000h+title_y_pos |
538 | xor ecx, ecx |
539 | xor ecx, ecx |
539 | mov edx, NoPrgLoaded_str |
540 | mov edx, NoPrgLoaded_str |
540 | cmp [debuggee_pid], 0 |
541 | cmp [debuggee_pid], 0 |
541 | jz @f |
542 | jz @f |
542 | mov edx, [prgname_ptr] |
543 | mov edx, [prgname_ptr] |
543 | @@: |
544 | @@: |
544 | int 40h |
545 | mcall |
545 | cmp [debuggee_pid], 0 |
546 | cmp [debuggee_pid], 0 |
546 | jz .nodebuggee |
547 | jz .nodebuggee |
547 | mov ebx, (data_x_pos+data_x_size-10-6*7)*10000h + title_y_pos |
548 | mov ebx, (data_x_pos+data_x_size-10-6*7)*10000h + title_y_pos |
548 | mov edx, aRunning |
549 | mov edx, aRunning |
549 | push 7 |
550 | push 7 |
Line 552... | Line 553... | ||
552 | jz @f |
553 | jz @f |
553 | add ebx, 6*10000h |
554 | add ebx, 6*10000h |
554 | mov edx, aPaused |
555 | mov edx, aPaused |
555 | dec esi |
556 | dec esi |
556 | @@: |
557 | @@: |
557 | int 40h |
558 | mcall |
558 | ret |
559 | ret |
559 | .nodebuggee: |
560 | .nodebuggee: |
560 | mov al, 38 |
561 | mov al, 38 |
561 | mov ebx, (data_x_pos+data_x_size-10-6*7-5)*0x10000 + data_x_pos+data_x_size+2 |
562 | mov ebx, (data_x_pos+data_x_size-10-6*7-5)*0x10000 + data_x_pos+data_x_size+2 |
562 | mov ecx, (title_y_pos+5)*10001h |
563 | mov ecx, (title_y_pos+5)*10001h |
Line 582... | Line 583... | ||
582 | jz .cd |
583 | jz .cd |
583 | mov ecx, 0x00AA00 |
584 | mov ecx, 0x00AA00 |
584 | .cd: |
585 | .cd: |
585 | push 4 |
586 | push 4 |
586 | pop eax |
587 | pop eax |
587 | int 40h |
588 | mcall |
588 | imul esi, 60000h |
589 | imul esi, 60000h |
589 | lea edx, [ebx+esi] |
590 | lea edx, [ebx+esi] |
590 | mov al, 47 |
591 | mov al, 47 |
591 | mov ebx, 80101h |
592 | mov ebx, 80101h |
592 | mov esi, ecx |
593 | mov esi, ecx |
593 | pop ecx |
594 | pop ecx |
594 | int 40h |
595 | mcall |
595 | lea ebx, [edx+60000h*18] |
596 | lea ebx, [edx+60000h*18] |
596 | mov esi, ecx |
597 | mov esi, ecx |
597 | pop ecx |
598 | pop ecx |
598 | pop edx |
599 | pop edx |
599 | add edx, ecx |
600 | add edx, ecx |
Line 620... | Line 621... | ||
620 | test ah, 3 |
621 | test ah, 3 |
621 | jp .doit |
622 | jp .doit |
622 | mov ecx, 0x00AA00 |
623 | mov ecx, 0x00AA00 |
623 | .doit: |
624 | .doit: |
624 | mov ah, 0 |
625 | mov ah, 0 |
625 | int 40h |
626 | mcall |
626 | ret |
627 | ret |
Line 627... | Line 628... | ||
627 | 628 | ||
628 | redraw_registers: |
629 | redraw_registers: |
629 | push 13 |
630 | push 13 |
630 | pop eax |
631 | pop eax |
631 | mov edx, 0xFFFFFF |
632 | mov edx, 0xFFFFFF |
632 | mov ebx, data_x_pos*10000h + data_x_size |
633 | mov ebx, data_x_pos*10000h + data_x_size |
633 | mov ecx, registers_y_pos*10000h + registers_y_size |
634 | mov ecx, registers_y_pos*10000h + registers_y_size |
634 | int 40h |
635 | mcall |
635 | draw_registers: |
636 | draw_registers: |
636 | mov esi, _eax |
637 | mov esi, _eax |
637 | push 4 |
638 | push 4 |
638 | pop ecx |
639 | pop ecx |
Line 670... | Line 671... | ||
670 | @@: |
671 | @@: |
671 | mov edx, aColon |
672 | mov edx, aColon |
672 | xor esi, esi |
673 | xor esi, esi |
673 | inc esi |
674 | inc esi |
674 | mov ebx, (registers_x_pos+37*6)*10000h + registers_y_pos+20 |
675 | mov ebx, (registers_x_pos+37*6)*10000h + registers_y_pos+20 |
675 | int 40h |
676 | mcall |
676 | mov edx, flags |
677 | mov edx, flags |
677 | @@: |
678 | @@: |
678 | add ebx, 2*6*10000h |
679 | add ebx, 2*6*10000h |
679 | call draw_flag |
680 | call draw_flag |
680 | inc edx |
681 | inc edx |
Line 686... | Line 687... | ||
686 | push 13 |
687 | push 13 |
687 | pop eax |
688 | pop eax |
688 | mov edx, 0xFFFFFF |
689 | mov edx, 0xFFFFFF |
689 | mov ebx, data_x_pos*10000h + data_x_size |
690 | mov ebx, data_x_pos*10000h + data_x_size |
690 | mov ecx, dump_y_pos*10000h + dump_y_size |
691 | mov ecx, dump_y_pos*10000h + dump_y_size |
691 | int 40h |
692 | mcall |
692 | draw_dump: |
693 | draw_dump: |
693 | ; addresses |
694 | ; addresses |
694 | mov al, 47 |
695 | mov al, 47 |
695 | mov ebx, 80100h |
696 | mov ebx, 80100h |
696 | mov edx, data_x_pos*10000h + dump_y_pos |
697 | mov edx, data_x_pos*10000h + dump_y_pos |
Line 700... | Line 701... | ||
700 | jz @f |
701 | jz @f |
701 | cmp [bSuspended], 0 |
702 | cmp [bSuspended], 0 |
702 | jz @f |
703 | jz @f |
703 | xor esi, esi |
704 | xor esi, esi |
704 | @@: |
705 | @@: |
705 | int 40h |
706 | mcall |
706 | add ecx, 10h |
707 | add ecx, 10h |
707 | add edx, 10 |
708 | add edx, 10 |
708 | cmp dl, dump_y_pos + dump_y_size |
709 | cmp dl, dump_y_pos + dump_y_size |
709 | jb @b |
710 | jb @b |
710 | ; hex dump of data |
711 | ; hex dump of data |
Line 714... | Line 715... | ||
714 | xor edi, edi |
715 | xor edi, edi |
715 | mov edx, (data_x_pos+12*6)*10000h + dump_y_pos |
716 | mov edx, (data_x_pos+12*6)*10000h + dump_y_pos |
716 | cmp [dumpread], edi |
717 | cmp [dumpread], edi |
717 | jz .hexdumpdone1 |
718 | jz .hexdumpdone1 |
718 | .hexdumploop1: |
719 | .hexdumploop1: |
719 | int 40h |
720 | mcall |
720 | add edx, 3*6*10000h |
721 | add edx, 3*6*10000h |
721 | inc ecx |
722 | inc ecx |
722 | inc edi |
723 | inc edi |
723 | test edi, 15 |
724 | test edi, 15 |
724 | jz .16 |
725 | jz .16 |
Line 738... | Line 739... | ||
738 | pop esi |
739 | pop esi |
739 | mov edx, aQuests |
740 | mov edx, aQuests |
740 | .hexdumploop2: |
741 | .hexdumploop2: |
741 | cmp edi, dump_height*10h |
742 | cmp edi, dump_height*10h |
742 | jae .hexdumpdone2 |
743 | jae .hexdumpdone2 |
743 | int 40h |
744 | mcall |
744 | add ebx, 3*6*10000h |
745 | add ebx, 3*6*10000h |
745 | inc edi |
746 | inc edi |
746 | test edi, 15 |
747 | test edi, 15 |
747 | jz .16x |
748 | jz .16x |
748 | test edi, 7 |
749 | test edi, 7 |
Line 755... | Line 756... | ||
755 | dec esi |
756 | dec esi |
756 | ; colon, minus signs |
757 | ; colon, minus signs |
757 | mov ebx, (data_x_pos+8*6)*10000h + dump_y_pos |
758 | mov ebx, (data_x_pos+8*6)*10000h + dump_y_pos |
758 | mov edx, aColon |
759 | mov edx, aColon |
759 | @@: |
760 | @@: |
760 | int 40h |
761 | mcall |
761 | add ebx, 10 |
762 | add ebx, 10 |
762 | cmp bl, dump_y_pos+dump_height*10 |
763 | cmp bl, dump_y_pos+dump_height*10 |
763 | jb @b |
764 | jb @b |
764 | mov ebx, (data_x_pos+(12+3*8)*6)*10000h + dump_y_pos |
765 | mov ebx, (data_x_pos+(12+3*8)*6)*10000h + dump_y_pos |
765 | mov edx, aMinus |
766 | mov edx, aMinus |
766 | @@: |
767 | @@: |
767 | int 40h |
768 | mcall |
768 | add ebx, 10 |
769 | add ebx, 10 |
769 | cmp bl, dump_y_pos+dump_height*10 |
770 | cmp bl, dump_y_pos+dump_height*10 |
770 | jb @b |
771 | jb @b |
771 | ; ASCII data |
772 | ; ASCII data |
772 | mov ebx, (data_x_pos+(12+3*10h+2+2)*6)*10000h + dump_y_pos |
773 | mov ebx, (data_x_pos+(12+3*10h+2+2)*6)*10000h + dump_y_pos |
Line 776... | Line 777... | ||
776 | push edx |
777 | push edx |
777 | cmp byte [edx], 20h |
778 | cmp byte [edx], 20h |
778 | jae @f |
779 | jae @f |
779 | mov edx, aPoint |
780 | mov edx, aPoint |
780 | @@: |
781 | @@: |
781 | int 40h |
782 | mcall |
782 | pop edx |
783 | pop edx |
783 | inc edx |
784 | inc edx |
784 | add ebx, 6*10000h |
785 | add ebx, 6*10000h |
785 | dec edi |
786 | dec edi |
786 | jz .asciidone |
787 | jz .asciidone |
Line 795... | Line 796... | ||
795 | push 13 |
796 | push 13 |
796 | pop eax |
797 | pop eax |
797 | mov edx, 0xFFFFFF |
798 | mov edx, 0xFFFFFF |
798 | mov ebx, data_x_pos*10000h + data_x_size |
799 | mov ebx, data_x_pos*10000h + data_x_size |
799 | mov ecx, (disasm_y_pos-1)*10000h + (disasm_y_size+1) |
800 | mov ecx, (disasm_y_pos-1)*10000h + (disasm_y_size+1) |
800 | int 40h |
801 | mcall |
801 | draw_disasm: |
802 | draw_disasm: |
802 | mov eax, [disasm_start_pos] |
803 | mov eax, [disasm_start_pos] |
803 | mov [disasm_cur_pos], eax |
804 | mov [disasm_cur_pos], eax |
804 | and [disasm_cur_str], 0 |
805 | and [disasm_cur_str], 0 |
805 | .loop: |
806 | .loop: |
Line 818... | Line 819... | ||
818 | popad |
819 | popad |
819 | jnz .nored |
820 | jnz .nored |
820 | push 13 |
821 | push 13 |
821 | pop eax |
822 | pop eax |
822 | mov edx, 0xFF0000 |
823 | mov edx, 0xFF0000 |
823 | int 40h |
824 | mcall |
824 | .nored: |
825 | .nored: |
825 | mov eax, [_eip] |
826 | mov eax, [_eip] |
826 | cmp eax, ebp |
827 | cmp eax, ebp |
827 | jnz .noblue |
828 | jnz .noblue |
828 | push 13 |
829 | push 13 |
829 | pop eax |
830 | pop eax |
830 | mov edx, 0x0000FF |
831 | mov edx, 0x0000FF |
831 | int 40h |
832 | mcall |
832 | mov esi, 0xFFFFFF ; on blue bgr, use white color |
833 | mov esi, 0xFFFFFF ; on blue bgr, use white color |
833 | .noblue: |
834 | .noblue: |
834 | push 47 |
835 | push 47 |
835 | pop eax |
836 | pop eax |
836 | mov ebx, 80100h |
837 | mov ebx, 80100h |
837 | mov edx, [disasm_cur_str] |
838 | mov edx, [disasm_cur_str] |
838 | imul edx, 10 |
839 | imul edx, 10 |
839 | add edx, data_x_pos*10000h + disasm_y_pos |
840 | add edx, data_x_pos*10000h + disasm_y_pos |
840 | mov ecx, ebp |
841 | mov ecx, ebp |
841 | int 40h |
842 | mcall |
842 | mov al, 4 |
843 | mov al, 4 |
843 | lea ebx, [edx+8*6*10000h] |
844 | lea ebx, [edx+8*6*10000h] |
844 | mov ecx, esi |
845 | mov ecx, esi |
845 | push 1 |
846 | push 1 |
846 | pop esi |
847 | pop esi |
847 | mov edx, aColon |
848 | mov edx, aColon |
848 | int 40h |
849 | mcall |
849 | push 9 |
850 | push 9 |
850 | pop edi |
851 | pop edi |
851 | lea edx, [ebx+2*6*10000h] |
852 | lea edx, [ebx+2*6*10000h] |
852 | mov esi, ecx |
853 | mov esi, ecx |
853 | mov al, 47 |
854 | mov al, 47 |
854 | mov ebx, 20101h |
855 | mov ebx, 20101h |
855 | mov ecx, ebp |
856 | mov ecx, ebp |
856 | sub ecx, [disasm_start_pos] |
857 | sub ecx, [disasm_start_pos] |
857 | add ecx, disasm_buffer |
858 | add ecx, disasm_buffer |
858 | .drawhex: |
859 | .drawhex: |
859 | int 40h |
860 | mcall |
860 | add edx, 6*3*10000h |
861 | add edx, 6*3*10000h |
861 | inc ecx |
862 | inc ecx |
862 | inc ebp |
863 | inc ebp |
863 | cmp ebp, [disasm_cur_pos] |
864 | cmp ebp, [disasm_cur_pos] |
864 | jae .hexdone |
865 | jae .hexdone |
Line 874... | Line 875... | ||
874 | lea ebx, [edx-6*10000h] |
875 | lea ebx, [edx-6*10000h] |
875 | mov ecx, esi |
876 | mov ecx, esi |
876 | push 3 |
877 | push 3 |
877 | pop esi |
878 | pop esi |
878 | mov edx, aDots |
879 | mov edx, aDots |
879 | int 40h |
880 | mcall |
880 | mov esi, ecx |
881 | mov esi, ecx |
881 | .hexdone: |
882 | .hexdone: |
882 | xor eax, eax |
883 | xor eax, eax |
883 | mov edi, disasm_string |
884 | mov edi, disasm_string |
884 | mov edx, edi |
885 | mov edx, edi |
Line 889... | Line 890... | ||
889 | xchg ecx, esi |
890 | xchg ecx, esi |
890 | mov ebx, [disasm_cur_str] |
891 | mov ebx, [disasm_cur_str] |
891 | imul ebx, 10 |
892 | imul ebx, 10 |
892 | add ebx, (data_x_pos+6*40)*10000h+disasm_y_pos |
893 | add ebx, (data_x_pos+6*40)*10000h+disasm_y_pos |
893 | mov al, 4 |
894 | mov al, 4 |
894 | int 40h |
895 | mcall |
895 | inc [disasm_cur_str] |
896 | inc [disasm_cur_str] |
896 | cmp [disasm_cur_str], disasm_height |
897 | cmp [disasm_cur_str], disasm_height |
897 | jb .loop |
898 | jb .loop |
898 | .loopend: |
899 | .loopend: |
899 | ret |
900 | ret |
Line 925... | Line 926... | ||
925 | pop ebx |
926 | pop ebx |
926 | mov ecx, [debuggee_pid] |
927 | mov ecx, [debuggee_pid] |
927 | mov edi, disasm_buffer |
928 | mov edi, disasm_buffer |
928 | mov edx, 256 |
929 | mov edx, 256 |
929 | mov esi, [disasm_start_pos] |
930 | mov esi, [disasm_start_pos] |
930 | int 40h |
931 | mcall |
931 | cmp eax, -1 |
932 | cmp eax, -1 |
932 | jnz @f |
933 | jnz @f |
933 | mov esi, read_mem_err |
934 | mov esi, read_mem_err |
934 | call put_message |
935 | call put_message |
935 | .no: |
936 | .no: |
Line 943... | Line 944... | ||
943 | ; start redraw |
944 | ; start redraw |
944 | push 12 |
945 | push 12 |
945 | pop eax |
946 | pop eax |
946 | push 1 |
947 | push 1 |
947 | pop ebx |
948 | pop ebx |
948 | int 40h |
949 | mcall |
949 | ; define window |
950 | ; define window |
950 | xor eax, eax |
951 | xor eax, eax |
951 | mov ebx, wnd_x_size |
952 | mov ebx, wnd_x_size |
952 | mov ecx, wnd_y_size |
953 | mov ecx, wnd_y_size |
953 | mov edx, 3FFFFFFh |
954 | mov edx, 3FFFFFFh |
954 | int 40h |
955 | mcall |
955 | ; caption |
956 | ; caption |
956 | mov al, 4 |
957 | mov al, 4 |
957 | mov ecx, 0xFFFFFF |
958 | mov ecx, 0xFFFFFF |
958 | mov ebx, 80008h |
959 | mov ebx, 80008h |
959 | mov edx, caption_str |
960 | mov edx, caption_str |
960 | push caption_len |
961 | push caption_len |
961 | pop esi |
962 | pop esi |
962 | int 40h |
963 | mcall |
963 | ; messages frame |
964 | ; messages frame |
964 | mov al, 38 |
965 | mov al, 38 |
965 | mov ebx, (messages_x_pos-2)*10000h + (messages_x_pos+messages_x_size+2) |
966 | mov ebx, (messages_x_pos-2)*10000h + (messages_x_pos+messages_x_size+2) |
966 | push ebx |
967 | push ebx |
967 | mov ecx, (messages_y_pos-2)*10001h |
968 | mov ecx, (messages_y_pos-2)*10001h |
968 | xor edx, edx |
969 | xor edx, edx |
969 | int 40h |
970 | mcall |
970 | mov ecx, (messages_y_pos+messages_y_size+2)*10001h |
971 | mov ecx, (messages_y_pos+messages_y_size+2)*10001h |
971 | int 40h |
972 | mcall |
972 | mov ebx, (messages_x_pos-2)*10001h |
973 | mov ebx, (messages_x_pos-2)*10001h |
973 | push ebx |
974 | push ebx |
974 | mov ecx, (messages_y_pos-2)*10000h + (messages_y_pos+messages_y_size+2) |
975 | mov ecx, (messages_y_pos-2)*10000h + (messages_y_pos+messages_y_size+2) |
975 | int 40h |
976 | mcall |
976 | mov ebx, (messages_x_pos+messages_x_size+2)*10001h |
977 | mov ebx, (messages_x_pos+messages_x_size+2)*10001h |
977 | push ebx |
978 | push ebx |
978 | int 40h |
979 | mcall |
979 | ; command line frame |
980 | ; command line frame |
980 | mov ecx, (cmdline_y_pos-2)*10000h + (cmdline_y_pos+cmdline_y_size+2) |
981 | mov ecx, (cmdline_y_pos-2)*10000h + (cmdline_y_pos+cmdline_y_size+2) |
981 | pop ebx |
982 | pop ebx |
982 | int 40h |
983 | mcall |
983 | pop ebx |
984 | pop ebx |
984 | int 40h |
985 | mcall |
985 | pop ebx |
986 | pop ebx |
986 | mov ecx, (cmdline_y_pos+cmdline_y_size+2)*10001h |
987 | mov ecx, (cmdline_y_pos+cmdline_y_size+2)*10001h |
987 | int 40h |
988 | mcall |
988 | mov ecx, (cmdline_y_pos-2)*10001h |
989 | mov ecx, (cmdline_y_pos-2)*10001h |
989 | int 40h |
990 | mcall |
990 | ; messages |
991 | ; messages |
991 | call draw_messages |
992 | call draw_messages |
992 | ; command line & cursor |
993 | ; command line & cursor |
993 | call draw_cmdline |
994 | call draw_cmdline |
994 | call draw_cursor |
995 | call draw_cursor |
995 | ; title & registers & dump & disasm |
996 | ; title & registers & dump & disasm |
996 | mov al, 38 |
997 | mov al, 38 |
997 | mov ebx, (data_x_pos-2)*10001h |
998 | mov ebx, (data_x_pos-2)*10001h |
998 | mov ecx, (title_y_pos+5)*10000h + (messages_y_pos-2) |
999 | mov ecx, (title_y_pos+5)*10000h + (messages_y_pos-2) |
999 | int 40h |
1000 | mcall |
1000 | mov ebx, (data_x_pos+data_x_size+2)*10001h |
1001 | mov ebx, (data_x_pos+data_x_size+2)*10001h |
1001 | int 40h |
1002 | mcall |
1002 | mov ebx, (data_x_pos-2)*10000h + (data_x_pos+data_x_size+2) |
1003 | mov ebx, (data_x_pos-2)*10000h + (data_x_pos+data_x_size+2) |
1003 | mov ecx, (dump_y_pos-3)*10001h |
1004 | mov ecx, (dump_y_pos-3)*10001h |
1004 | int 40h |
1005 | mcall |
1005 | mov ecx, (disasm_y_pos-4)*10001h |
1006 | mov ecx, (disasm_y_pos-4)*10001h |
1006 | int 40h |
1007 | mcall |
1007 | call draw_title |
1008 | call draw_title |
1008 | call draw_registers |
1009 | call draw_registers |
1009 | call draw_dump |
1010 | call draw_dump |
1010 | call draw_disasm |
1011 | call draw_disasm |
1011 | ; end redraw |
1012 | ; end redraw |
1012 | mov al, 12 |
1013 | mov al, 12 |
1013 | push 2 |
1014 | push 2 |
1014 | pop ebx |
1015 | pop ebx |
1015 | int 40h |
1016 | mcall |
1016 | ret |
1017 | ret |
Line 1017... | Line 1018... | ||
1017 | 1018 | ||
1018 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1019 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1019 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DEBUGGING ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1020 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DEBUGGING ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 1035... | Line 1036... | ||
1035 | jmp .x |
1036 | jmp .x |
Line 1036... | Line 1037... | ||
1036 | 1037 | ||
1037 | OnQuit: |
1038 | OnQuit: |
1038 | xor eax, eax |
1039 | xor eax, eax |
1039 | dec eax |
1040 | dec eax |
Line 1040... | Line 1041... | ||
1040 | int 40h |
1041 | mcall |
1041 | 1042 | ||
1042 | get_new_context: |
1043 | get_new_context: |
1043 | mov esi, context |
1044 | mov esi, context |
Line 1051... | Line 1052... | ||
1051 | pop eax |
1052 | pop eax |
1052 | mov ecx, [debuggee_pid] |
1053 | mov ecx, [debuggee_pid] |
1053 | mov esi, context |
1054 | mov esi, context |
1054 | push 28h |
1055 | push 28h |
1055 | pop edx |
1056 | pop edx |
1056 | int 40h |
1057 | mcall |
1057 | ret |
1058 | ret |
1058 | set_context: |
1059 | set_context: |
1059 | push 2 |
1060 | push 2 |
1060 | pop ebx |
1061 | pop ebx |
1061 | push 69 |
1062 | push 69 |
1062 | pop eax |
1063 | pop eax |
1063 | mov ecx, [debuggee_pid] |
1064 | mov ecx, [debuggee_pid] |
1064 | mov esi, context |
1065 | mov esi, context |
1065 | push 28h |
1066 | push 28h |
1066 | pop edx |
1067 | pop edx |
1067 | int 40h |
1068 | mcall |
1068 | ret |
1069 | ret |
Line 1069... | Line 1070... | ||
1069 | 1070 | ||
1070 | get_dump: |
1071 | get_dump: |
1071 | mov edi, dumpdata |
1072 | mov edi, dumpdata |
Line 1078... | Line 1079... | ||
1078 | pop edi |
1079 | pop edi |
1079 | mov ecx, [debuggee_pid] |
1080 | mov ecx, [debuggee_pid] |
1080 | mov al, 69 |
1081 | mov al, 69 |
1081 | push 6 |
1082 | push 6 |
1082 | pop ebx |
1083 | pop ebx |
1083 | int 40h |
1084 | mcall |
1084 | cmp eax, -1 |
1085 | cmp eax, -1 |
1085 | jnz @f |
1086 | jnz @f |
1086 | mov esi, read_mem_err |
1087 | mov esi, read_mem_err |
1087 | call put_message |
1088 | call put_message |
1088 | xor eax, eax |
1089 | xor eax, eax |
Line 1139... | Line 1140... | ||
1139 | do_reload: |
1140 | do_reload: |
1140 | push 18 |
1141 | push 18 |
1141 | pop eax |
1142 | pop eax |
1142 | push 7 |
1143 | push 7 |
1143 | pop ebx |
1144 | pop ebx |
1144 | int 40h |
1145 | mcall |
1145 | mov [dbgwnd], eax |
1146 | mov [dbgwnd], eax |
1146 | xchg ecx, eax |
1147 | xchg ecx, eax |
1147 | push 70 |
1148 | push 70 |
1148 | pop eax |
1149 | pop eax |
1149 | mov ebx, fn70_load_block |
1150 | mov ebx, fn70_load_block |
1150 | int 40h |
1151 | mcall |
1151 | test eax, eax |
1152 | test eax, eax |
1152 | jns .load_ok |
1153 | jns .load_ok |
1153 | .load_err: |
1154 | .load_err: |
1154 | push eax |
1155 | push eax |
1155 | mov esi, load_err_msg |
1156 | mov esi, load_err_msg |
Line 1178... | Line 1179... | ||
1178 | ; activate debugger window |
1179 | ; activate debugger window |
1179 | pop ecx |
1180 | pop ecx |
1180 | mov bl, 3 |
1181 | mov bl, 3 |
1181 | push 18 |
1182 | push 18 |
1182 | pop eax |
1183 | pop eax |
1183 | int 40h |
1184 | mcall |
1184 | call redraw_title |
1185 | call redraw_title |
1185 | call redraw_registers |
1186 | call redraw_registers |
1186 | call get_dump |
1187 | call get_dump |
1187 | call redraw_dump |
1188 | call redraw_dump |
1188 | call update_disasm_eip_force |
1189 | call update_disasm_eip_force |
Line 1271... | Line 1272... | ||
1271 | call hide_cursor |
1272 | call hide_cursor |
1272 | push 40 |
1273 | push 40 |
1273 | pop eax |
1274 | pop eax |
1274 | push 7 |
1275 | push 7 |
1275 | pop ebx |
1276 | pop ebx |
1276 | int 40h |
1277 | mcall |
1277 | .wait: |
1278 | .wait: |
1278 | push 10 |
1279 | push 10 |
1279 | pop eax |
1280 | pop eax |
1280 | int 40h |
1281 | mcall |
1281 | dec eax |
1282 | dec eax |
1282 | jz .redraw |
1283 | jz .redraw |
1283 | dec eax |
1284 | dec eax |
1284 | jz .key |
1285 | jz .key |
1285 | or eax, -1 |
1286 | or eax, -1 |
1286 | int 40h |
1287 | mcall |
1287 | .redraw: |
1288 | .redraw: |
1288 | call draw_window |
1289 | call draw_window |
1289 | call hide_cursor |
1290 | call hide_cursor |
1290 | jmp .wait |
1291 | jmp .wait |
1291 | .key: |
1292 | .key: |
1292 | mov al, 2 |
1293 | mov al, 2 |
1293 | int 40h |
1294 | mcall |
1294 | cmp ah, 'y' |
1295 | cmp ah, 'y' |
1295 | jz .yes |
1296 | jz .yes |
1296 | cmp ah, 'Y' |
1297 | cmp ah, 'Y' |
1297 | jz .yes |
1298 | jz .yes |
1298 | cmp ah, 0xD |
1299 | cmp ah, 0xD |
Line 1303... | Line 1304... | ||
1303 | jnz .wait |
1304 | jnz .wait |
1304 | .no: |
1305 | .no: |
1305 | push 40 |
1306 | push 40 |
1306 | pop eax |
1307 | pop eax |
1307 | mov ebx, 0x107 |
1308 | mov ebx, 0x107 |
1308 | int 40h |
1309 | mcall |
1309 | call draw_cursor |
1310 | call draw_cursor |
1310 | mov esi, aN_str |
1311 | mov esi, aN_str |
1311 | jmp put_message |
1312 | jmp put_message |
1312 | .yes: |
1313 | .yes: |
1313 | push 40 |
1314 | push 40 |
1314 | pop eax |
1315 | pop eax |
1315 | mov ebx, 0x107 |
1316 | mov ebx, 0x107 |
1316 | int 40h |
1317 | mcall |
1317 | call draw_cursor |
1318 | call draw_cursor |
1318 | mov esi, aY_str |
1319 | mov esi, aY_str |
1319 | call put_message |
1320 | call put_message |
1320 | call OnUnpack |
1321 | call OnUnpack |
1321 | ret |
1322 | ret |
Line 1400... | Line 1401... | ||
1400 | mov ecx, [debuggee_pid] |
1401 | mov ecx, [debuggee_pid] |
1401 | push 8 |
1402 | push 8 |
1402 | pop ebx |
1403 | pop ebx |
1403 | push 69 |
1404 | push 69 |
1404 | pop eax |
1405 | pop eax |
1405 | int 40h |
1406 | mcall |
1406 | ret |
1407 | ret |
Line 1407... | Line 1408... | ||
1407 | 1408 | ||
1408 | AfterSuspend: |
1409 | AfterSuspend: |
1409 | mov [bSuspended], 1 |
1410 | mov [bSuspended], 1 |
Line 1419... | Line 1420... | ||
1419 | mov ecx, [debuggee_pid] |
1420 | mov ecx, [debuggee_pid] |
1420 | push 4 |
1421 | push 4 |
1421 | pop ebx |
1422 | pop ebx |
1422 | push 69 |
1423 | push 69 |
1423 | pop eax |
1424 | pop eax |
1424 | int 40h |
1425 | mcall |
1425 | call AfterSuspend |
1426 | call AfterSuspend |
1426 | mov esi, aSuspended |
1427 | mov esi, aSuspended |
1427 | jmp put_message |
1428 | jmp put_message |
1428 | DoResume: |
1429 | DoResume: |
1429 | mov ecx, [debuggee_pid] |
1430 | mov ecx, [debuggee_pid] |
1430 | push 5 |
1431 | push 5 |
1431 | pop ebx |
1432 | pop ebx |
1432 | push 69 |
1433 | push 69 |
1433 | pop eax |
1434 | pop eax |
1434 | int 40h |
1435 | mcall |
1435 | mov [bSuspended], 0 |
1436 | mov [bSuspended], 0 |
1436 | ret |
1437 | ret |
1437 | OnResume: |
1438 | OnResume: |
1438 | mov esi, [curarg] |
1439 | mov esi, [curarg] |
1439 | cmp byte [esi], 0 |
1440 | cmp byte [esi], 0 |
Line 1479... | Line 1480... | ||
1479 | mov ecx, [debuggee_pid] |
1480 | mov ecx, [debuggee_pid] |
1480 | push 3 |
1481 | push 3 |
1481 | pop ebx |
1482 | pop ebx |
1482 | push 69 |
1483 | push 69 |
1483 | pop eax |
1484 | pop eax |
1484 | int 40h |
1485 | mcall |
1485 | and [debuggee_pid], 0 |
1486 | and [debuggee_pid], 0 |
1486 | call redraw_title |
1487 | call redraw_title |
1487 | call redraw_registers |
1488 | call redraw_registers |
1488 | call redraw_dump |
1489 | call redraw_dump |
1489 | mov esi, aContinued |
1490 | mov esi, aContinued |
Line 1618... | Line 1619... | ||
1618 | mov ecx, [debuggee_pid] |
1619 | mov ecx, [debuggee_pid] |
1619 | mov edi, esp |
1620 | mov edi, esp |
1620 | mov esi, [_eip] |
1621 | mov esi, [_eip] |
1621 | push 1 |
1622 | push 1 |
1622 | pop edx |
1623 | pop edx |
1623 | int 40h |
1624 | mcall |
1624 | pop eax |
1625 | pop eax |
1625 | cmp al, 0xCC |
1626 | cmp al, 0xCC |
1626 | jnz .notdbg |
1627 | jnz .notdbg |
1627 | ; this is either dbg breakpoint or int3 cmd in debuggee |
1628 | ; this is either dbg breakpoint or int3 cmd in debuggee |
1628 | mov eax, [_eip] |
1629 | mov eax, [_eip] |
Line 1655... | Line 1656... | ||
1655 | push 18 |
1656 | push 18 |
1656 | pop eax |
1657 | pop eax |
1657 | push 3 |
1658 | push 3 |
1658 | pop ebx |
1659 | pop ebx |
1659 | mov ecx, [dbgwnd] |
1660 | mov ecx, [dbgwnd] |
1660 | int 40h ; activate dbg window |
1661 | mcall ; activate dbg window |
1661 | call redraw_title |
1662 | call redraw_title |
1662 | call redraw_registers |
1663 | call redraw_registers |
1663 | call redraw_dump |
1664 | call redraw_dump |
1664 | call update_disasm_eip |
1665 | call update_disasm_eip |
1665 | dbgmsgend: |
1666 | dbgmsgend: |
Line 1711... | Line 1712... | ||
1711 | mov ecx, [debuggee_pid] |
1712 | mov ecx, [debuggee_pid] |
1712 | push 3 |
1713 | push 3 |
1713 | pop edx |
1714 | pop edx |
1714 | mov edi, esp |
1715 | mov edi, esp |
1715 | mov esi, [_eip] |
1716 | mov esi, [_eip] |
1716 | int 40h |
1717 | mcall |
1717 | cmp eax, edx |
1718 | cmp eax, edx |
1718 | pop eax |
1719 | pop eax |
1719 | jnz .doit |
1720 | jnz .doit |
1720 | cmp al, 0xCD |
1721 | cmp al, 0xCD |
1721 | jz .int |
1722 | jz .int |
Line 1848... | Line 1849... | ||
1848 | mov ecx, [debuggee_pid] |
1849 | mov ecx, [debuggee_pid] |
1849 | xor edx, edx |
1850 | xor edx, edx |
1850 | push edx |
1851 | push edx |
1851 | inc edx |
1852 | inc edx |
1852 | mov edi, esp |
1853 | mov edi, esp |
1853 | int 40h |
1854 | mcall |
1854 | dec eax |
1855 | dec eax |
1855 | clc |
1856 | clc |
1856 | jz @f |
1857 | jz @f |
1857 | stc |
1858 | stc |
1858 | @@: pop eax |
1859 | @@: pop eax |
Line 2336... | Line 2337... | ||
2336 | mov dl, cl |
2337 | mov dl, cl |
2337 | mov ecx, [debuggee_pid] |
2338 | mov ecx, [debuggee_pid] |
2338 | mov esi, ebp |
2339 | mov esi, ebp |
2339 | push 9 |
2340 | push 9 |
2340 | pop ebx |
2341 | pop ebx |
2341 | int 40h |
2342 | mcall |
2342 | test eax, eax |
2343 | test eax, eax |
2343 | jz .ok |
2344 | jz .ok |
2344 | pop ecx |
2345 | pop ecx |
2345 | .l2: |
2346 | .l2: |
2346 | inc ecx |
2347 | inc ecx |
Line 2568... | Line 2569... | ||
2568 | pop eax |
2569 | pop eax |
2569 | mov ecx, [debuggee_pid] |
2570 | mov ecx, [debuggee_pid] |
2570 | xor edx, edx |
2571 | xor edx, edx |
2571 | inc edx |
2572 | inc edx |
2572 | mov esi, [edi-5] |
2573 | mov esi, [edi-5] |
2573 | int 40h |
2574 | mcall |
2574 | pop esi |
2575 | pop esi |
2575 | .ret: |
2576 | .ret: |
2576 | ret |
2577 | ret |
2577 | .dr: |
2578 | .dr: |
2578 | mov dl, [edi] |
2579 | mov dl, [edi] |
Line 2581... | Line 2582... | ||
2581 | push 69 |
2582 | push 69 |
2582 | pop eax |
2583 | pop eax |
2583 | push 9 |
2584 | push 9 |
2584 | pop ebx |
2585 | pop ebx |
2585 | mov ecx, [debuggee_pid] |
2586 | mov ecx, [debuggee_pid] |
2586 | int 40h |
2587 | mcall |
2587 | ret |
2588 | ret |
Line 2588... | Line 2589... | ||
2588 | 2589 | ||
2589 | enable_breakpoint: |
2590 | enable_breakpoint: |
2590 | push esi |
2591 | push esi |
Line 2605... | Line 2606... | ||
2605 | pop eax |
2606 | pop eax |
2606 | mov esi, [edi-5] |
2607 | mov esi, [edi-5] |
2607 | mov ecx, [debuggee_pid] |
2608 | mov ecx, [debuggee_pid] |
2608 | xor edx, edx |
2609 | xor edx, edx |
2609 | inc edx |
2610 | inc edx |
2610 | int 40h |
2611 | mcall |
2611 | dec eax |
2612 | dec eax |
2612 | jnz .err |
2613 | jnz .err |
2613 | mov al, 69 |
2614 | mov al, 69 |
2614 | push 0xCC |
2615 | push 0xCC |
2615 | mov edi, esp |
2616 | mov edi, esp |
2616 | inc ebx |
2617 | inc ebx |
2617 | int 40h |
2618 | mcall |
2618 | pop eax |
2619 | pop eax |
2619 | .ret: |
2620 | .ret: |
2620 | pop esi |
2621 | pop esi |
2621 | ret |
2622 | ret |
2622 | .err: |
2623 | .err: |
Line 2634... | Line 2635... | ||
2634 | mov ecx, [debuggee_pid] |
2635 | mov ecx, [debuggee_pid] |
2635 | mov dl, [edi] |
2636 | mov dl, [edi] |
2636 | shr dl, 6 |
2637 | shr dl, 6 |
2637 | mov dh, [edi] |
2638 | mov dh, [edi] |
2638 | and dh, 0xF |
2639 | and dh, 0xF |
2639 | int 40h |
2640 | mcall |
2640 | test eax, eax |
2641 | test eax, eax |
2641 | jnz .err |
2642 | jnz .err |
2642 | pop esi |
2643 | pop esi |
2643 | ret |
2644 | ret |
Line 2710... | Line 2711... | ||
2710 | push 0xC |
2711 | push 0xC |
2711 | pop esi |
2712 | pop esi |
2712 | @@: |
2713 | @@: |
2713 | push 69 |
2714 | push 69 |
2714 | pop eax |
2715 | pop eax |
2715 | int 40h |
2716 | mcall |
2716 | test eax, eax |
2717 | test eax, eax |
2717 | jz .breakok |
2718 | jz .breakok |
2718 | inc edx |
2719 | inc edx |
2719 | cmp dl, 4 |
2720 | cmp dl, 4 |
2720 | jb @b |
2721 | jb @b |
Line 2722... | Line 2723... | ||
2722 | call GoOn |
2723 | call GoOn |
2723 | ; now wait for event |
2724 | ; now wait for event |
2724 | .wait: |
2725 | .wait: |
2725 | push 10 |
2726 | push 10 |
2726 | pop eax |
2727 | pop eax |
2727 | int 40h |
2728 | mcall |
2728 | dec eax |
2729 | dec eax |
2729 | jz .redraw |
2730 | jz .redraw |
2730 | dec eax |
2731 | dec eax |
2731 | jz .key |
2732 | jz .key |
2732 | dec eax |
2733 | dec eax |
2733 | jnz .debug |
2734 | jnz .debug |
2734 | ; button; we have only one button, close |
2735 | ; button; we have only one button, close |
2735 | or eax, -1 |
2736 | or eax, -1 |
2736 | int 40h |
2737 | mcall |
2737 | .redraw: |
2738 | .redraw: |
2738 | call draw_window |
2739 | call draw_window |
2739 | jmp .wait |
2740 | jmp .wait |
2740 | .key: |
2741 | .key: |
2741 | mov al, 2 |
2742 | mov al, 2 |
2742 | int 40h |
2743 | mcall |
2743 | cmp ah, 3 ; Ctrl+C |
2744 | cmp ah, 3 ; Ctrl+C |
2744 | jnz .wait |
2745 | jnz .wait |
2745 | .userbreak: |
2746 | .userbreak: |
2746 | mov esi, aInterrupted |
2747 | mov esi, aInterrupted |
2747 | .x1: |
2748 | .x1: |
Line 2752... | Line 2753... | ||
2752 | push 69 |
2753 | push 69 |
2753 | pop eax |
2754 | pop eax |
2754 | push 9 |
2755 | push 9 |
2755 | pop ebx |
2756 | pop ebx |
2756 | mov ecx, [debuggee_pid] |
2757 | mov ecx, [debuggee_pid] |
2757 | int 40h |
2758 | mcall |
2758 | cmp esi, aUnpacked |
2759 | cmp esi, aUnpacked |
2759 | jnz OnSuspend |
2760 | jnz OnSuspend |
2760 | jmp AfterSuspend |
2761 | jmp AfterSuspend |
2761 | .debug: |
2762 | .debug: |
2762 | cmp [dbgbuflen], 4*3 |
2763 | cmp [dbgbuflen], 4*3 |
Line 2774... | Line 2775... | ||
2774 | push 69 |
2775 | push 69 |
2775 | pop eax |
2776 | pop eax |
2776 | push 9 |
2777 | push 9 |
2777 | pop ebx |
2778 | pop ebx |
2778 | mov ecx, [debuggee_pid] |
2779 | mov ecx, [debuggee_pid] |
2779 | int 40h |
2780 | mcall |
2780 | jmp debugmsg |
2781 | jmp debugmsg |
2781 | .our: |
2782 | .our: |
2782 | and [dbgbuflen], 0 |
2783 | and [dbgbuflen], 0 |
2783 | push edx |
2784 | push edx |
2784 | call get_context |
2785 | call get_context |
Line 2789... | Line 2790... | ||
2789 | mov edi, esp |
2790 | mov edi, esp |
2790 | push 4 |
2791 | push 4 |
2791 | pop edx |
2792 | pop edx |
2792 | push 0xC |
2793 | push 0xC |
2793 | pop esi |
2794 | pop esi |
2794 | int 40h |
2795 | mcall |
2795 | pop eax |
2796 | pop eax |
2796 | pop edx |
2797 | pop edx |
2797 | cmp eax, [_eip] |
2798 | cmp eax, [_eip] |
2798 | jz .done |
2799 | jz .done |
2799 | call DoResume |
2800 | call DoResume |