source: trunk/tools/profilerfix/cppopa4.asm@ 8706

Last change on this file since 8706 was 8367, checked in by bird, 23 years ago

Corrected two warnings.

File size: 62.5 KB
Line 
1; $Id: cppopa4.asm,v 1.4 2002-05-02 23:15:38 bird Exp $
2;
3
4;
5; Copyright 1990-1998 IBM Corp.
6;
7
8;
9; File Name : G:\fun\cpppan40.obj\cpppan40.obj
10; Format : Object Module Format (OMF/IBM)
11; Module name : cppopa4.asm
12; Translator : ALP: Assembly Language Processor Ver 4.00.002
13; Debug info type : Unknown
14
15
16
17 .586
18 .MODEL FLAT
19
20;
21; Defined Constants And Macros
22;
23
24;
25; FS selector fixes.
26;
27;FS_FIXES_1 EQU 1 ; Level 1 - Load correct fs when ever it's accessed
28 ; And save it before calling Dos* and initAddr.
29;FS_FIXES_2 EQU 1 ; Level 2 - Save and load correct fs before every
30 ; indirect call.
31FS_FIXES_3 EQU 1 ; Level 3 - Save and load correct fs upon entry.
32 ;
33ifdef FS_FIXES_3
34FS_FIXES_STACK EQU 4
35else
36FS_FIXES_STACK EQU 0
37endif
38
39
40large EQU ; workaround for IDA code.
41
42
43
44;
45; Segment definitionas.
46;
47DATA32 segment dword public 'DATA' use32
48DATA32 ends
49CONST32 segment dword public 'DATA' use32
50CONST32 ends
51BSS32 segment dword public 'DATA' use32
52BSS32 ends
53
54DGROUP group DATA32, CONST32, BSS32
55
56CODE32 segment dword public 'CODE' use32
57CODE32 ends
58
59
60;
61; Externals
62;
63 extrn DosExit:near
64 extrn DosSleep:far
65 extrn DosLoadModule:near
66 extrn DosQueryProcAddr:near
67 extrn DosUnwindException:near
68ifdef FS_FIXES_1
69 extrn Dos32TIB:abs
70elseifdef FS_FIXES_2
71 extrn Dos32TIB:abs
72elseifdef FS_FIXES_3
73 extrn Dos32TIB:abs
74endif
75
76
77;
78; Global Variables
79;
80DATA32 segment
81; assume cs:DATA32
82 public $$PROSEGPTR32
83$$PROSEGPTR32 dd 0 ; DATA XREF: $$PROFCALL32+5r
84 ; $$PROFCALL32+2Fr ...
85initAdr dd 0 ; DATA XREF: DoInit+27o
86 ; DoInit+63r
87alreadyTriedInit dd 0 ; DATA XREF: $$PROFCALL32+13r
88 ; $$PROFCALL32+25w ...
89DATA32 ends
90
91
92;
93; Structures and Typedefs
94;
95PROSEG struc
96 proseg_flags dw ?
97 proseg_unused dw ?
98 proseg_rc dd ?
99 proseg_rcSys dd ?
100 proseg_clkIntCtr dd ?
101 proseg_initTics_low dd ?
102 proseg_initTics_high dd ?
103 proseg_exitTics_low dd ?
104 proseg_exitTics_high dd ?
105 proseg_preTics_low dd ?
106 proseg_preTics_high dd ?
107 proseg_postTics_low dd ?
108 proseg_postTics_high dd ?
109 proseg_clockFrequency_low dd ?
110 proseg_clockFrequency_high dd ?
111 proseg_logBuf1st dd ?
112 proseg_logBufMax dd ?
113 proseg_logBufNext dd ?
114 proseg_logBufWrap dd ?
115if 0
116 proseg_procAddrs dd 7 dup(?)
117else
118 proseg_pfnINIT_PROSEG dd ? ; 00h + proseg_procAddrs
119 proseg_pfnINIT_IDT dd ? ; 04h + proseg_procAddrs
120 proseg_pfnINIT_ID4T dd ? ; 08h + proseg_procAddrs
121 proseg_pfnINIT_ID44 dd ? ; 0ch + proseg_procAddrs
122 proseg_pfnINIT_ID44T dd ? ; 10h + proseg_procAddrs
123 proseg_pfnUnknown1 dd ? ; 14h + proseg_procAddrs
124 proseg_pfnUnknown2 dd ? ; 18h + proseg_procAddrs
125endif
126 proseg_maxTid dd ?
127 proseg_ptrCurTid dd ?
128 proseg_maxSuffixBytes dd ?
129 proseg_usedSuffixBytes dd ?
130 proseg_ptrSuffixBytes dd ?
131 proseg_ticsEntry dd ?
132 proseg_ticsExit dd ?
133 proseg_ticsUser dd ?
134 proseg_curTidNum dd ?
135 proseg_extraDDH dd ?
136 proseg_appDDH dd ?
137 proseg_logDev db 16 dup(?)
138 proseg_logDLL db 16 dup(?)
139 proseg_procNames db 112 dup(?)
140 _counterArray dd 9 dup(?)
141 _command dd ?
142 _parm dd 3 dup(?)
143 proseg_retStacks dd ?
144 proseg_tidDecNest dd ?
145 proseg_tidMaxNest dd ?
146 proseg_tidTrigger dd ?
147 conditionalExit dd ?
148 _cpuType dd ?
149 _lockFlag dd ?
150 proseg_reserved dd 2 dup(?)
151PROSEG ends
152
153TVersionId struc
154 _versionNumber dd ?
155 _releaseNumber dd ?
156 _modificationLevel dd ?
157 _prosegSize dd ?
158TVersionId ends
159
160TStackHeader struc
161 _offsetOfTop dd ?
162TStackHeader ends
163
164TStackEntry struc
165 _returnAddr dd ?
166 _frameAddr dd ?
167TStackEntry ends
168
169tib2_s struc
170 tib2_ultid dd ?
171 tib2_ulpri dd ?
172 tib2_version dd ?
173 tib2_usMCCount dw ?
174 tib2_fMCForceFlag dw ?
175tib2_s ends
176
177tib_s struc
178 tib_pexchain dd ?
179 tib_pstack dd ?
180 tib_pstacklimit dd ?
181 tib_ptib2 dd ?
182 tib_version dd ?
183 tib_arbpointer dd ?
184tib_s ends
185
186pib_s struc
187 pib_ulpid dd ?
188 pib_ulppid dd ?
189 pib_hmte dd ?
190 pib_pchcmd dd ?
191 pib_pchenv dd ?
192 pib_flstatus dd ?
193 pib_ultype dd ?
194pib_s ends
195
196
197;
198; Code!
199;
200CODE32 segment
201; assume cs:CODE32
202; assume cs:FLAT
203 assume es:nothing, ss:nothing, ds:FLAT, fs:nothing, gs:nothing
204
205; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
206 public _ProfileHook32
207_ProfileHook32 proc near ; CODE XREF: $$PROFSETJMPp longjmpp
208 ; DATA XREF: ...
209 retn
210_ProfileHook32 endp
211
212
213;
214; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
215;
216 public $$PROFCALL32
217$$PROFCALL32 proc near ; CODE XREF: eCal+23j uCal+5p
218
219var_14 = dword ptr -14h
220arg_0 = dword ptr 4
221
222 pushfd
223 push ebx
224 push esi
225 push edx
226 push eax
227ifdef FS_FIXES_3
228 push fs
229 push Dos32TIB
230 pop fs
231endif
232 mov esi, $$PROSEGPTR32
233 ASSUME esi:ptr PROSEG
234 or esi, esi
235 jnz short loc_6_4E
236 nop
237 nop
238 nop
239 nop
240 mov eax, alreadyTriedInit
241 or eax, eax
242 jnz loc_6_FD
243 call DoInit
244 mov alreadyTriedInit, 1
245 mov esi, $$PROSEGPTR32
246 or esi, esi
247 jz loc_6_FD
248
249loc_6_4E: ; CODE XREF: $$PROFCALL32+Dj
250ifdef FS_FIXES_1
251 push fs
252 push Dos32TIB
253 pop fs
254 mov ebx, fs:tib_s.tib_ptib2
255 pop fs
256else
257 mov ebx, fs:tib_s.tib_ptib2
258endif
259 test dword ptr [esi.proseg_flags], 10h
260 jnz loc_6_FD
261 movzx ebx, word ptr [ebx]
262 dec ebx
263 cmp ebx, [esi.proseg_maxTid]
264 jnb loc_6_FD
265 mov eax, [esi.conditionalExit]
266 mov dword ptr [eax+ebx*4], 0FFFFFFFFh
267 mov eax, [esi.proseg_tidTrigger]
268 cmp dword ptr [eax+ebx*4], 0
269 jz loc_6_FD
270 nop
271 nop
272 nop
273 nop
274 mov eax, [esi.proseg_tidDecNest]
275 dec dword ptr [eax+ebx*4]
276 js loc_6_104
277 nop
278 nop
279 nop
280 nop
281 push edi
282 lea eax, [esp+18h + FS_FIXES_STACK]
283 call verifyStackFrame
284 or eax, eax
285 jnz short loc_6_103
286 mov eax, offset $$PROFRET32
287 xchg eax, [esp+18h+arg_0 + FS_FIXES_STACK]
288 mov edi, ebx
289 shl edi, 0Ch
290 add edi, [esi.proseg_retStacks]
291 push eax
292 lea eax, [esp+1Ch + FS_FIXES_STACK]
293 call checkForUnwindAtCall
294 pop eax
295 add dword ptr [edi], 8
296 add edi, [edi]
297 mov [edi], eax
298 lea eax, [esp+18h + FS_FIXES_STACK]
299 mov [edi+4], eax
300 mov eax, [eax]
301 test dword ptr [esi.proseg_flags], 20h
302 jz short loc_6_F4
303 nop
304 nop
305 nop
306 nop
307 shl ebx, 10h
308 mov bl, 1
309 mov edx, [esp+18h+var_14 + FS_FIXES_STACK]
310ifdef FS_FIXES_2
311 push fs
312 push Dos32TIB
313 pop fs
314 call dword ptr [esi.proseg_pfnINIT_ID44T]
315 pop fs
316else
317 call dword ptr [esi.proseg_pfnINIT_ID44T]
318endif
319 jmp short loc_6_FC
320; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
321; align 4
322 nop
323 nop
324 nop
325
326loc_6_F4: ; CODE XREF: $$PROFCALL32+CCj
327 shl ebx, 10h
328 mov bl, 40h ; '@'
329ifdef FS_FIXES_2
330 push fs
331 push Dos32TIB
332 pop fs
333 call dword ptr [esi.proseg_pfnINIT_ID4T]
334 pop fs
335else
336 call dword ptr [esi.proseg_pfnINIT_ID4T]
337endif
338
339loc_6_FC: ; CODE XREF: $$PROFCALL32+DEj
340 pop edi
341
342loc_6_FD: ; CODE XREF: $$PROFCALL32+1Aj
343 ; $$PROFCALL32+37j ...
344ifdef FS_FIXES_3
345 pop fs
346endif
347 pop eax
348 pop edx
349 pop esi
350 pop ebx
351 popfd
352 retn
353; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
354
355loc_6_103: ; CODE XREF: $$PROFCALL32+95j
356 pop edi
357
358loc_6_104: ; CODE XREF: $$PROFCALL32+83j
359 mov eax, [esi.proseg_tidDecNest]
360 inc dword ptr [eax+ebx*4]
361 jmp short loc_6_FD
362$$PROFCALL32 endp
363
364; Type idx: 513
365
366; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
367
368
369 public $$PROFRET32
370$$PROFRET32 proc near
371; assume esi:nothing
372
373;var_8 = byte ptr -8
374var_8 = dword ptr -8
375var_4 = dword ptr -4
376
377 lea esp, [esp-4]
378 pushfd
379 push eax
380 push ebx
381 push esi
382 push edi
383ifdef FS_FIXES_3
384 push fs
385 push Dos32TIB
386 pop fs
387endif
388ifdef FS_FIXES_1
389 push fs
390 push Dos32TIB
391 pop fs
392 mov ebx, fs:tib_s.tib_ptib2
393 pop fs
394else
395 mov ebx, fs:tib_s.tib_ptib2
396endif
397 mov esi, $$PROSEGPTR32
398 movzx ebx, word ptr [ebx]
399 dec ebx
400 mov eax, [esi].proseg_tidDecNest
401 inc dword ptr [eax+ebx*4]
402 mov edi, ebx
403 shl edi, 0Ch
404 add edi, [esi].proseg_retStacks
405 push eax
406 lea eax, [esp+18h+var_4 + FS_FIXES_STACK]
407 call checkForUnwindAtReturn
408 pop eax
409 sub dword ptr [edi], 8
410 add edi, [edi]
411 mov eax, [edi+8]
412 mov [esp+14h + FS_FIXES_STACK], eax
413 shl ebx, 10h
414 mov bl, 0
415ifdef FS_FIXES_2
416 push fs
417 push Dos32TIB
418 pop fs
419 call dword ptr [esi.proseg_pfnINIT_IDT]
420 pop fs
421else
422 call dword ptr [esi.proseg_pfnINIT_IDT]
423endif
424ifdef FS_FIXES_3
425 pop fs
426endif
427 pop edi
428 pop esi
429 pop ebx
430 pop eax
431 popfd
432 retn
433$$PROFRET32 endp
434
435; Type idx: 513
436
437; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
438
439
440 public $$PROFTRIG32
441$$PROFTRIG32 proc near
442
443var_14 = dword ptr -14h
444arg_0 = dword ptr 4
445
446 pushfd
447 push ebx
448 push esi
449 push edx
450 push eax
451ifdef FS_FIXES_3
452 push fs
453 push Dos32TIB
454 pop fs
455endif
456 mov esi, $$PROSEGPTR32
457 or esi, esi
458 jnz short loc_6_19F
459 nop
460 nop
461 nop
462 nop
463 mov eax, alreadyTriedInit
464 or eax, eax
465 jnz loc_6_24A
466 call DoInit
467 mov alreadyTriedInit, 1
468 mov esi, $$PROSEGPTR32
469 or esi, esi
470 jz loc_6_24A
471
472loc_6_19F: ; CODE XREF: $$PROFTRIG32+Dj
473 test dword ptr [esi].proseg_flags, 10h
474 jnz loc_6_24A
475ifdef FS_FIXES_1
476 push fs
477 push Dos32TIB
478 pop fs
479 mov ebx, fs:tib_s.tib_ptib2
480 pop fs
481else
482 mov ebx, fs:tib_s.tib_ptib2
483endif
484 movzx ebx, word ptr [ebx]
485 dec ebx
486 cmp ebx, [esi].proseg_maxTid
487 jnb loc_6_24A
488 mov eax, [esi].conditionalExit
489 mov dword ptr [eax+ebx*4], 0FFFFFFFFh
490 mov eax, [esi].proseg_tidDecNest
491 dec dword ptr [eax+ebx*4]
492 js loc_6_251
493 push edi
494 lea eax, [esp+18h + FS_FIXES_STACK]
495 call verifyStackFrame
496 or eax, eax
497 jnz loc_6_250
498 mov eax, offset $$PROFTRIGRET32
499 xchg eax, [esp+18h+arg_0 + FS_FIXES_STACK]
500 cmp eax, offset $$PROFTRIGRET32
501 jz short loc_6_250
502 mov edi, [esi].proseg_tidTrigger
503 inc dword ptr [edi+ebx*4]
504 mov edi, ebx
505 shl edi, 0Ch
506 add edi, [esi].proseg_retStacks
507 push eax
508 lea eax, [esp+1Ch + FS_FIXES_STACK]
509 call checkForUnwindAtCall
510 pop eax
511 add dword ptr [edi], 8
512 add edi, [edi]
513 mov [edi], eax
514 lea eax, [esp+18h + FS_FIXES_STACK]
515 mov [edi+4], eax
516 mov eax, [eax]
517 test dword ptr [esi].proseg_flags, 20h
518 jz short loc_6_241
519 nop
520 nop
521 nop
522 nop
523 shl ebx, 10h
524 mov bl, 1
525 mov edx, [esp+18h+var_14 + FS_FIXES_STACK]
526ifdef FS_FIXES_2
527 push fs
528 push Dos32TIB
529 pop fs
530 call dword ptr [esi.proseg_pfnINIT_ID44T]
531 pop fs
532else
533 call dword ptr [esi.proseg_pfnINIT_ID44T]
534endif
535 jmp short loc_6_249
536; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
537 ; align 4 ??
538 nop
539 nop
540 nop
541
542; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
543
544loc_6_241: ; CODE XREF: $$PROFTRIG32+C8j
545 shl ebx, 10h
546 mov bl, 40h ; '@'
547ifdef FS_FIXES_2
548 push fs
549 push Dos32TIB
550 pop fs
551 call dword ptr [esi.proseg_pfnINIT_ID4T]
552 pop fs
553else
554 call dword ptr [esi.proseg_pfnINIT_ID4T]
555endif
556
557loc_6_249: ; CODE XREF: $$PROFTRIG32+DAj
558 pop edi
559
560loc_6_24A: ; CODE XREF: $$PROFTRIG32+1Aj
561 ; $$PROFTRIG32+37j ...
562ifdef FS_FIXES_3
563 pop fs
564endif
565 pop eax
566 pop edx
567 pop esi
568 pop ebx
569 popfd
570 retn
571; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
572
573loc_6_250: ; CODE XREF: $$PROFTRIG32+81j
574 ; $$PROFTRIG32+91j
575 pop edi
576
577loc_6_251: ; CODE XREF: $$PROFTRIG32+73j
578 mov eax, [esi].proseg_tidDecNest
579 inc dword ptr [eax+ebx*4]
580 jmp short loc_6_24A
581$$PROFTRIG32 endp
582
583; Type idx: 513
584
585; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
586
587
588 public $$PROFTRIGRET32
589$$PROFTRIGRET32 proc near
590
591;var_8 = byte ptr -8
592var_8 = dword ptr -8
593var_4 = dword ptr -4
594
595 lea esp, [esp-4]
596 pushfd
597 push eax
598 push ebx
599 push esi
600 push edi
601ifdef FS_FIXES_3
602 push fs
603 push Dos32TIB
604 pop fs
605endif
606ifdef FS_FIXES_1
607 push fs
608 push Dos32TIB
609 pop fs
610 mov ebx, fs:tib_s.tib_ptib2
611 pop fs
612else
613 mov ebx, fs:tib_s.tib_ptib2
614endif
615 mov esi, $$PROSEGPTR32
616 movzx ebx, word ptr [ebx]
617 dec ebx
618 mov eax, [esi].proseg_tidDecNest
619 inc dword ptr [eax+ebx*4]
620 mov edi, ebx
621 shl edi, 0Ch
622 add edi, [esi].proseg_retStacks
623 push eax
624 lea eax, [esp+1Ch+var_8 + FS_FIXES_STACK]
625 call checkForUnwindAtReturn
626 pop eax
627 sub dword ptr [edi], 8
628 add edi, [edi]
629 mov eax, [edi+8]
630 mov [esp+18h+var_4 + FS_FIXES_STACK], eax
631 mov eax, [esi].proseg_tidTrigger
632 dec dword ptr [eax+ebx*4]
633 shl ebx, 10h
634ifdef FS_FIXES_2
635 push fs
636 push Dos32TIB
637 pop fs
638 call dword ptr [esi.proseg_pfnINIT_IDT]
639 pop fs
640else
641 call dword ptr [esi.proseg_pfnINIT_IDT]
642endif
643ifdef FS_FIXES_3
644 pop fs
645endif
646 pop edi
647 pop esi
648 pop ebx
649 pop eax
650 popfd
651 retn
652$$PROFTRIGRET32 endp ; sp = -4
653
654; Type idx: 513
655
656; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
657
658
659 public _ProfileHookVAOptlink32
660_ProfileHookVAOptlink32 proc near
661 retn
662_ProfileHookVAOptlink32 endp
663
664; Type idx: 513
665
666; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
667
668
669 public $$PROFEYEC32
670$$PROFEYEC32 proc near
671
672var_14 = dword ptr -14h
673var_10 = dword ptr -10h
674arg_0 = dword ptr 4
675;arg_4 = byte ptr 8
676arg_4 = dword ptr 8
677
678 pushfd
679 push ebx
680 push esi
681 push edx
682 push eax
683ifdef FS_FIXES_3
684 push fs
685 push Dos32TIB
686 pop fs
687endif
688 mov esi, $$PROSEGPTR32
689 or esi, esi
690 jnz short loc_6_2F4
691 nop
692 nop
693 nop
694 nop
695 mov eax, alreadyTriedInit
696 or eax, eax
697 jnz loc_6_40B
698 call DoInit
699 mov alreadyTriedInit, 1
700 mov esi, $$PROSEGPTR32
701 or esi, esi
702 jz loc_6_40B
703
704loc_6_2F4: ; CODE XREF: $$PROFEYEC32+Dj
705 test dword ptr [esi].proseg_flags, 10h
706 jnz loc_6_40B
707ifdef FS_FIXES_1
708 push fs
709 push Dos32TIB
710 pop fs
711 mov ebx, fs:tib_s.tib_ptib2
712 pop fs
713else
714 mov ebx, fs:tib_s.tib_ptib2
715endif
716 movzx ebx, word ptr [ebx]
717 dec ebx
718 cmp ebx, [esi].proseg_maxTid
719 jnb loc_6_40B
720 mov eax, [esi].proseg_tidTrigger
721 cmp dword ptr [eax+ebx*4], 0
722 jz loc_6_40B
723 mov eax, [esi].proseg_tidDecNest
724 dec dword ptr [eax+ebx*4]
725 js loc_6_412
726 push edi
727 lea eax, [esp+18h + FS_FIXES_STACK]
728 call verifyStackFrame
729 or eax, eax
730 jnz loc_6_411
731 mov eax, offset $$PROFRET32
732 xchg eax, [esp+18h+arg_0 + FS_FIXES_STACK]
733 cmp eax, offset $$PROFRET32
734 jnz short loc_6_36A
735 mov eax, 0FFFFFFFDh
736 call PERF
737 inc dword ptr [esi._counterArray+14h]
738 jmp loc_6_411
739; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
740
741loc_6_36A: ; CODE XREF: $$PROFEYEC32+9Cj
742 mov edi, ebx
743 shl edi, 0Ch
744 add edi, [esi].proseg_retStacks
745 push eax
746 lea eax, [esp+1Ch + FS_FIXES_STACK]
747 call checkForUnwindAtCall
748 pop eax
749 add dword ptr [edi], 8
750 add edi, [edi]
751 mov [edi], eax
752 lea eax, [esp+18h + FS_FIXES_STACK]
753 mov [edi+4], eax
754 mov eax, [eax]
755 push dword ptr [edi]
756 test dword ptr [esi].proseg_flags, 20h
757 jz short loc_6_3AF
758 nop
759 nop
760 nop
761 nop
762 shl ebx, 10h
763 mov bl, 1
764 mov edx, [esp+1Ch+var_10 + FS_FIXES_STACK]
765ifdef FS_FIXES_2
766 push fs
767 push Dos32TIB
768 pop fs
769 call dword ptr [esi.proseg_pfnINIT_ID44T]
770 pop fs
771else
772 call dword ptr [esi.proseg_pfnINIT_ID44T]
773endif
774 jmp short loc_6_3B7
775; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
776 ; align 4 ??
777 nop
778 nop
779 nop
780; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
781
782loc_6_3AF: ; CODE XREF: $$PROFEYEC32+E1j
783 shl ebx, 10h
784 mov bl, 40h ; '@'
785ifdef FS_FIXES_2
786 push fs
787 push Dos32TIB
788 pop fs
789 call dword ptr [esi.proseg_pfnINIT_ID4T]
790 pop fs
791else
792 call dword ptr [esi.proseg_pfnINIT_ID4T]
793endif
794
795loc_6_3B7: ; CODE XREF: $$PROFEYEC32+F3j
796 pop ebx
797 mov ebx, [ebx]
798 cmp bl, 0A9h ; '©'
799 jnz short loc_6_40A
800 xor bl, bl
801 lea edi, [esp+18h+arg_4 + FS_FIXES_STACK]
802 mov eax, [esp+18h+var_14 + FS_FIXES_STACK]
803 mov esi, offset jmpback_1
804
805loc_6_3CE: ; CODE XREF: $$PROFEYEC32+124j
806 ; $$PROFEYEC32+12Fj ...
807 shl ebx, 1
808 jb short loc_6_3DD
809 add edi, 4
810 shl ebx, 1
811 jb short loc_6_3EF
812 jz short loc_6_40A
813 jmp short loc_6_3CE
814; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
815
816loc_6_3DD: ; CODE XREF: $$PROFEYEC32+119j
817 shl ebx, 1
818 jb short loc_6_3E8
819 fstp qword ptr [edi]
820 add edi, 8
821 jmp short loc_6_3CE
822; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
823
824loc_6_3E8: ; CODE XREF: $$PROFEYEC32+128j
825 fstp tbyte ptr [edi]
826 add edi, 10h
827 jmp short loc_6_3CE
828; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
829
830loc_6_3EF: ; CODE XREF: $$PROFEYEC32+120j
831 jmp esi
832; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
833jmpback_1:
834 mov esi, offset jmpback_2
835 mov [edi-4], eax
836 jmp short loc_6_3CE
837; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
838jmpback_2:
839 mov esi, offset jmpback_3
840 mov [edi-4], edx
841 jmp short loc_6_3CE
842; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
843jmpback_3:
844 mov [edi-4], ecx
845 jmp short loc_6_3CE
846; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
847
848loc_6_40A: ; CODE XREF: $$PROFEYEC32+106j
849 ; $$PROFEYEC32+122j
850 pop edi
851
852loc_6_40B: ; CODE XREF: $$PROFEYEC32+1Aj
853 ; $$PROFEYEC32+37j ...
854ifdef FS_FIXES_3
855 pop fs
856endif
857 pop eax
858 pop edx
859 pop esi
860 pop ebx
861 popfd
862 retn
863; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
864
865loc_6_411: ; CODE XREF: $$PROFEYEC32+88j
866 ; $$PROFEYEC32+AEj
867 pop edi
868
869loc_6_412: ; CODE XREF: $$PROFEYEC32+76j
870 mov eax, [esi].proseg_tidDecNest
871 inc dword ptr [eax+ebx*4]
872 jmp short loc_6_40B
873$$PROFEYEC32 endp
874
875; Type idx: 513
876; Type idx: 183
877
878; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
879
880
881 public PERF
882 public $$PROFUSER32
883$$PROFUSER32 proc near
884PERF label near: ; CODE XREF: $$PROFEYEC32+A3p
885 ; PerfStart+2Bp ...
886 retn ; $$PROFUSER32
887
888; Type idx: 183
889
890; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
891
892
893 public PROFITCAL
894PROFITCAL label near ; CODE XREF: uCal+17p uCal+1Cp
895 push ebx
896 push esi
897 push ecx
898 push edx
899ifdef FS_FIXES_3
900 push fs
901 push Dos32TIB
902 pop fs
903endif
904 mov esi, $$PROSEGPTR32
905 or esi, esi
906 jnz short loc_6_45A
907 nop
908 nop
909 nop
910 nop
911 mov eax, alreadyTriedInit
912 or eax, eax
913 jnz short loc_6_494
914 nop
915 nop
916 nop
917 nop
918 call DoInit
919 mov alreadyTriedInit, 1
920 mov esi, $$PROSEGPTR32
921 or esi, esi
922 jz short loc_6_494
923 nop
924 nop
925 nop
926 nop
927
928loc_6_45A: ; CODE XREF: PROFITCAL+Cj
929 test dword ptr [esi].proseg_flags, 10h
930 jnz short loc_6_494
931 nop
932 nop
933 nop
934 nop
935ifdef FS_FIXES_1
936 push fs
937 push Dos32TIB
938 pop fs
939 mov ebx, fs:tib_s.tib_ptib2
940 pop fs
941else
942 mov ebx, fs:tib_s.tib_ptib2
943endif
944 movzx ebx, word ptr [ebx]
945 dec ebx
946 cmp ebx, [esi].proseg_maxTid
947 jnb short loc_6_494
948 mov edx, [esi].proseg_tidDecNest
949 mov edx, [edx+ebx*4]
950 mov ecx, [esi].proseg_tidMaxNest
951 cmp edx, [ecx+ebx*4]
952 jz short loc_6_494
953 push edi
954 shl ebx, 10h
955 mov bl, 20h ; ' '
956ifdef FS_FIXES_2
957 push fs
958 push Dos32TIB
959 pop fs
960 call dword ptr [esi.proseg_pfnINIT_ID4T]
961 pop fs
962else
963 call dword ptr [esi.proseg_pfnINIT_ID4T]
964endif
965 pop edi
966
967loc_6_494: ; CODE XREF: PROFITCAL+19j
968 ; PROFITCAL+36j ...
969ifdef FS_FIXES_3
970 pop fs
971endif
972 pop edx
973 pop ecx
974 pop esi
975 pop ebx
976 retn
977$$PROFUSER32 endp
978
979; Type idx: 513
980
981; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
982
983
984 public PerfStart
985PerfStart proc near
986 push eax
987 push esi
988 push ecx
989 push edx
990 mov esi, $$PROSEGPTR32
991 or esi, esi
992 jz short loc_6_4C9
993 nop
994 nop
995 nop
996 nop
997 xor ecx, ecx
998 xor edx, edx
999 mov dx, [esi].proseg_flags
1000 mov cx, dx
1001 and dx, 10h
1002 xor cx, dx
1003 mov [esi].proseg_flags, cx
1004 mov eax, 0FFFFFFFEh
1005 call PERF
1006
1007loc_6_4C9: ; CODE XREF: PerfStart+Cj
1008 pop edx
1009 pop ecx
1010 pop esi
1011 pop eax
1012 retn
1013PerfStart endp
1014
1015; Type idx: 513
1016
1017; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1018
1019
1020 public PerfStop
1021PerfStop proc near
1022 push eax
1023 push esi
1024 push ecx
1025 push edx
1026 mov esi, $$PROSEGPTR32
1027 or esi, esi
1028 jz short loc_6_4F8
1029 nop
1030 nop
1031 nop
1032 nop
1033 mov eax, 0FFFFFFFFh
1034 call PERF
1035 xor ecx, ecx
1036 xor edx, edx
1037 mov cx, [esi].proseg_flags
1038 or cx, 10h
1039 mov [esi].proseg_flags, cx
1040
1041loc_6_4F8: ; CODE XREF: PerfStop+Cj
1042 pop edx
1043 pop ecx
1044 pop esi
1045 pop eax
1046 retn
1047PerfStop endp
1048
1049; Type idx: 513
1050
1051; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1052
1053
1054 public setjmp
1055setjmp proc near
1056;arg_0 = byte ptr 4
1057arg_0 = dword ptr 4
1058 mov ecx, [esp+0]
1059
1060; Type idx: 183
1061
1062 public $$PROFSETJMP
1063$$PROFSETJMP label near
1064
1065 call _ProfileHook32
1066ifdef FS_FIXES_3
1067 push fs
1068 push Dos32TIB
1069 pop fs
1070endif
1071 mov [eax+4], ecx
1072 mov [eax+0Ch], ebx
1073 mov [eax+14h], esi
1074 mov [eax+10h], edi
1075 mov [eax], ebp
1076 lea edx, [esp+arg_0]
1077 mov [eax+8], edx
1078ifdef FS_FIXES_1
1079 push fs
1080 push Dos32TIB
1081 pop fs
1082 mov edx, fs:tib_s.tib_pexchain
1083 pop fs
1084else
1085 mov edx, fs:tib_s.tib_pexchain
1086endif
1087 mov [eax+18h], edx
1088 fstcw word ptr [eax+1Ch]
1089 xor eax, eax
1090ifdef FS_FIXES_3
1091 pop fs
1092endif
1093 retn
1094setjmp endp
1095
1096; Type idx: 513
1097
1098; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1099
1100
1101 public longjmp
1102longjmp proc near
1103 call _ProfileHook32
1104ifdef FS_FIXES_3
1105 push fs
1106 push Dos32TIB
1107 pop fs
1108endif
1109 push eax
1110 push edx
1111ifdef FS_FIXES_1
1112 push fs
1113endif
1114 push 0
1115 push offset unwind_callback
1116 push dword ptr [eax+18h]
1117 call DosUnwindException
1118 mov edx, 0FCCCh
1119 jmp CrashAndBurn
1120
1121; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
1122unwind_callback:
1123 add esp, 0Ch
1124ifdef FS_FIXES_1
1125 pop fs
1126endif
1127 pop edx
1128 pop eax
1129ifdef FS_FIXES_1
1130 mov ecx, $$PROSEGPTR32
1131 jecxz @@jump
1132 jmp @@ok
1133@@jump:
1134 jmp loc_6_5C2
1135@@ok:
1136 push fs
1137 push Dos32TIB
1138 pop fs
1139 mov ebx, fs:tib_s.tib_ptib2
1140 pop fs
1141else
1142 mov ecx, $$PROSEGPTR32
1143 jecxz loc_6_5C2
1144 mov ebx, fs:tib_s.tib_ptib2
1145endif
1146 mov esi, ecx
1147 movzx ebx, word ptr [ebx]
1148 dec ebx
1149 cmp ebx, [esi].proseg_maxTid
1150 jnb short loc_6_5C2
1151 push eax
1152 push edx
1153 mov eax, [eax+8]
1154 xor ecx, ecx
1155 mov edi, ebx
1156 shl edi, 0Ch
1157 add edi, [esi].proseg_retStacks
1158
1159loc_6_57C: ; CODE XREF: CODE32:000005B0j
1160 mov edx, [edi]
1161 or edx, edx
1162 jz short loc_6_5B2
1163 cmp eax, [edi+edx+4]
1164 jbe short loc_6_5B2
1165 mov edx, [edi+edx+4]
1166 mov edx, [edx+4]
1167 cmp edx, offset $$PROFTRIGRET32
1168 jnz short loc_6_5A2
1169 push eax
1170 mov eax, [esi].proseg_tidTrigger
1171 dec dword ptr [eax+ebx*4]
1172 pop eax
1173
1174loc_6_5A2: ; CODE XREF: CODE32:00000595j
1175 push eax
1176 mov eax, [esi].proseg_tidDecNest
1177 inc dword ptr [eax+ebx*4]
1178 pop eax
1179 sub dword ptr [edi], 8
1180 loop loc_6_57C
1181
1182loc_6_5B2: ; CODE XREF: CODE32:00000580j
1183 ; CODE32:00000586j
1184 neg ecx
1185 jz short bailout2
1186 mov eax, ecx
1187 shl ebx, 10h
1188 mov bl, 10h
1189ifdef FS_FIXES_2
1190 push fs
1191 push Dos32TIB
1192 pop fs
1193 call dword ptr [esi.proseg_pfnINIT_ID4T]
1194 pop fs
1195else
1196 call dword ptr [esi.proseg_pfnINIT_ID4T]
1197endif
1198 pop edx
1199 pop eax
1200
1201loc_6_5C2: ; CODE XREF: CODE32:00000556j
1202 ; CODE32:00000568j
1203 xchg eax, edx
1204 finit
1205 wait
1206 fldcw word ptr [edx+1Ch]
1207ifdef FS_FIXES_3
1208 pop fs
1209endif
1210 mov ebx, [edx+0Ch]
1211 mov esi, [edx+14h]
1212 mov edi, [edx+10h]
1213 mov ebp, [edx]
1214 mov esp, [edx+8]
1215 or eax, eax
1216 jnz short bailout1
1217 inc eax
1218
1219bailout1: ; CODE XREF: CODE32:000005B4j
1220 ; CODE32:000005DAj
1221 jmp dword ptr [edx+4]
1222
1223bailout2:
1224ifdef FS_FIXES_3
1225 pop fs
1226endif
1227 jmp dword ptr [edx+4]
1228
1229longjmp endp
1230; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
1231ExceptionThrownString db 'C++ exception thrown here:',0
1232; Type idx: 513
1233
1234; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1235
1236
1237 public _ProfileThrow32
1238_ProfileThrow32 proc near
1239 push eax
1240 mov eax, offset ExceptionThrownString
1241 call PERF
1242 pop eax
1243 jmp PERF
1244_ProfileThrow32 endp
1245
1246; Type idx: 513
1247
1248; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1249
1250
1251 public _ProfileUnwind32
1252_ProfileUnwind32 proc near
1253 push ebx
1254 push esi
1255 push edi
1256ifdef FS_FIXES_3
1257 push fs
1258 push Dos32TIB
1259 pop fs
1260endif
1261
1262 mov esi, $$PROSEGPTR32
1263 or esi, esi
1264 jz short loc_6_67A
1265ifdef FS_FIXES_1
1266 push fs
1267 push Dos32TIB
1268 pop fs
1269 mov ebx, fs:tib_s.tib_ptib2
1270 pop fs
1271else
1272 mov ebx, fs:tib_s.tib_ptib2
1273endif
1274 movzx ebx, word ptr [ebx]
1275 dec ebx
1276 cmp ebx, [esi].proseg_maxTid
1277 jnb short loc_6_67A
1278 xor ecx, ecx
1279 mov edi, ebx
1280 shl edi, 0Ch
1281 add edi, [esi].proseg_retStacks
1282
1283loc_6_636: ; CODE XREF: _ProfileUnwind32+5Ej
1284 mov edx, [edi]
1285 or edx, edx
1286 jz short loc_6_66C
1287 cmp eax, [edi+edx+4]
1288 jbe short loc_6_66C
1289 mov edx, [edi+edx+4]
1290 mov edx, [edx+4]
1291 cmp edx, offset $$PROFTRIGRET32
1292 jnz short loc_6_65C
1293 push eax
1294 mov eax, [esi].proseg_tidTrigger
1295 dec dword ptr [eax+ebx*4]
1296 pop eax
1297
1298loc_6_65C: ; CODE XREF: _ProfileUnwind32+43j
1299 push eax
1300 mov eax, [esi].proseg_tidDecNest
1301 inc dword ptr [eax+ebx*4]
1302 pop eax
1303 sub dword ptr [edi], 8
1304 loop loc_6_636
1305
1306loc_6_66C: ; CODE XREF: _ProfileUnwind32+2Ej
1307 ; _ProfileUnwind32+34j
1308 neg ecx
1309 jz short loc_6_67A
1310 mov eax, ecx
1311 shl ebx, 10h
1312 mov bl, 10h
1313ifdef FS_FIXES_2
1314 push fs
1315 push Dos32TIB
1316 pop fs
1317 call dword ptr [esi.proseg_pfnINIT_ID4T]
1318 pop fs
1319else
1320 call dword ptr [esi.proseg_pfnINIT_ID4T]
1321endif
1322
1323loc_6_67A: ; CODE XREF: _ProfileUnwind32+Bj
1324 ; _ProfileUnwind32+1Bj ...
1325ifdef FS_FIXES_3
1326 pop fs
1327endif
1328 pop edi
1329 pop esi
1330 pop ebx
1331 retn
1332_ProfileUnwind32 endp
1333
1334; Type idx: 513
1335
1336; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1337
1338
1339 public eCal
1340eCal proc near
1341 push esi
1342 mov esi, $$PROSEGPTR32
1343 mov ecx, [esi].proseg_tidDecNest
1344 dec dword ptr [ecx]
1345 mov ecx, 8
1346
1347loc_6_692: ; CODE XREF: CODE32:000006A7j
1348 push offset eCal_arg2
1349 push offset eCal_arg1
1350 push offset $$PROFCALL32
1351 jmp $$PROFCALL32
1352
1353; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
1354eCal_arg2:
1355 retn
1356; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
1357eCal_arg1:
1358 loop loc_6_692
1359 push eax
1360 mov eax, [esi].proseg_tidDecNest
1361 inc dword ptr [eax]
1362 pop eax
1363 pop esi
1364 retn
1365eCal endp
1366; Type idx: 513
1367
1368; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1369
1370
1371 public uCal
1372uCal proc near
1373 mov $$PROSEGPTR32, eax
1374 call $$PROFCALL32
1375 push esi
1376 mov esi, $$PROSEGPTR32
1377 mov ecx, 8
1378
1379loc_6_6CB: ; CODE XREF: uCal+22j
1380 push ecx
1381 call PROFITCAL
1382 call PROFITCAL
1383 pop ecx
1384 loop loc_6_6CB
1385 pop esi
1386 retn
1387uCal endp
1388
1389; Type idx: 513
1390
1391; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1392
1393
1394 public CrashAndBurn
1395CrashAndBurn proc near ; CODE XREF: longjmp+1Bj DoInit+1Fj ...
1396 mov [esi].proseg_rc, edx
1397 mov [esi].proseg_rcSys, eax
1398 push eax
1399 push 1
1400 call DosExit
1401CrashAndBurn endp
1402
1403; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
1404initName db 'INIT_PROSEG',0 ; DATA XREF: DoInit+2Eo
1405logDllName db 'CPPPAN40',0 ; DATA XREF: DoInit+7o
1406; Type idx: 513
1407
1408; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1409
1410public DoInit
1411DoInit proc near ; CODE XREF: $$PROFCALL32+20p
1412 ; $$PROFTRIG32+20p ...
1413 pushad
1414ifdef FS_FIXES_3
1415 push fs
1416 push Dos32TIB
1417 pop fs
1418endif
1419 xor ebx, ebx
1420 push ebx
1421 mov eax, esp
1422ifdef FS_FIXES_1
1423 push fs
1424endif
1425 push eax
1426 lea eax, logDllName ; "CPPPAN40"
1427 push eax
1428 push ebx
1429 push ebx
1430 call DosLoadModule
1431 add esp, 10h
1432ifdef FS_FIXES_1
1433 pop fs
1434endif
1435 mov edx, 0FAD8h
1436 or eax, eax
1437 jnz short CrashAndBurn
1438 pop edx
1439 mov ecx, 7
1440ifdef FS_FIXES_1
1441 push fs
1442endif
1443
1444 lea edi, initAdr
1445 push edi
1446 lea ebx, initName ; "INIT_PROSEG"
1447 push ebx
1448 push 0
1449 push edx
1450 call DosQueryProcAddr
1451 add esp, 10h
1452ifdef FS_FIXES_1
1453 pop fs
1454endif
1455 mov edx, 0FB3Ch
1456 or eax, eax
1457 jnz short CrashAndBurn
1458 xor ebx, ebx
1459
1460 push ebx
1461 push ebx
1462 mov eax, esp
1463 mov edx, offset eCal
1464 mov ecx, offset uCal
1465ifdef FS_FIXES_1
1466 push fs
1467endif
1468 lea esi, $$PROSEGPTR32
1469 push esi
1470 sub esp, 0Ch
1471 call initAdr
1472 add esp, 10h
1473ifdef FS_FIXES_1
1474 pop fs
1475endif
1476 or eax, eax
1477 pop edx
1478 pop eax
1479 jnz CrashAndBurn
1480ifdef FS_FIXES_3
1481 pop fs
1482endif
1483 popad
1484 mov esi, $$PROSEGPTR32
1485 retn
1486DoInit endp
1487
1488; Type idx: 513
1489
1490; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1491
1492
1493 public checkForUnwindAtCall
1494checkForUnwindAtCall proc near ; CODE XREF: $$PROFCALL32+B0p
1495 ; $$PROFTRIG32+ACp ...
1496ifdef FS_FIXES_3
1497 push fs
1498 push Dos32TIB
1499 pop fs
1500endif
1501 test word ptr [esi].proseg_flags, 40h
1502 jz short locret_6_7D0
1503 test word ptr [esi].proseg_flags, 80h
1504 jz short locret_6_7D0
1505 push edx
1506 push ecx
1507 mov edx, edi
1508 add edx, [edx]
1509 xor ecx, ecx
1510
1511loc_6_792: ; CODE XREF: checkForUnwindAtCall+25j
1512 cmp edx, edi
1513 jbe short loc_6_7AB
1514 cmp [edx+4], eax
1515 ja short loc_6_7AB
1516 sub edx, 8
1517 sub dword ptr [edi], 8
1518 loop loc_6_792
1519 xor eax, eax
1520 mov dword ptr [eax], 0
1521
1522loc_6_7AB: ; CODE XREF: checkForUnwindAtCall+18j
1523 ; checkForUnwindAtCall+1Dj
1524 neg ecx
1525 jz short loc_6_7CE
1526 add dword ptr [esi+ebx*4+158h], ecx
1527 mov eax, 0FFFFFFFCh
1528 call PERF
1529 push ebx
1530 push edi
1531 shl ebx, 10h
1532 mov bl, 10h
1533 mov eax, ecx
1534ifdef FS_FIXES_2
1535 push fs
1536 push Dos32TIB
1537 pop fs
1538 call dword ptr [esi.proseg_pfnINIT_ID4T]
1539 pop fs
1540else
1541 call dword ptr [esi.proseg_pfnINIT_ID4T]
1542endif
1543 pop edi
1544 pop ebx
1545
1546loc_6_7CE: ; CODE XREF: checkForUnwindAtCall+31j
1547 pop ecx
1548 pop edx
1549
1550locret_6_7D0: ; CODE XREF: checkForUnwindAtCall+5j
1551 ; checkForUnwindAtCall+Cj
1552ifdef FS_FIXES_3
1553 pop fs
1554endif
1555 retn
1556checkForUnwindAtCall endp
1557
1558; Type idx: 513
1559
1560; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1561
1562
1563 public checkForUnwindAtReturn
1564checkForUnwindAtReturn proc near ; CODE XREF: $$PROFRET32+33p
1565 ; $$PROFTRIGRET32+33p
1566ifdef FS_FIXES_3
1567 push fs
1568 push Dos32TIB
1569 pop fs
1570endif
1571 test word ptr [esi].proseg_flags, 40h
1572 jz short locret_6_82F
1573 test word ptr [esi].proseg_flags, 80h
1574 jz short locret_6_82F
1575 cmp dword ptr [edi], 10h
1576 jb short locret_6_82F
1577 push edx
1578 push ecx
1579 mov edx, edi
1580 add edx, [edx]
1581 xor ecx, ecx
1582
1583loc_6_7EC: ; CODE XREF: checkForUnwindAtReturn+2Fj
1584 cmp [edx+4], eax
1585 jnb short loc_6_80A
1586 sub edx, 8
1587 cmp edx, edi
1588 jbe short loc_6_80A
1589 cmp [edx+4], eax
1590 ja short loc_6_80A
1591 sub dword ptr [edi], 8
1592 loop loc_6_7EC
1593 xor eax, eax
1594 mov dword ptr [eax], 0
1595
1596loc_6_80A: ; CODE XREF: checkForUnwindAtReturn+1Ej
1597 ; checkForUnwindAtReturn+25j ...
1598 neg ecx
1599 jz short loc_6_82D
1600 add dword ptr [esi+ebx*4+158h], ecx
1601 mov eax, 0FFFFFFFBh
1602 call PERF
1603 push ebx
1604 push edi
1605 shl ebx, 10h
1606 mov bl, 10h
1607 mov eax, ecx
1608ifdef FS_FIXES_2
1609 push fs
1610 push Dos32TIB
1611 pop fs
1612 call dword ptr [esi.proseg_pfnINIT_ID4T]
1613 pop fs
1614else
1615 call dword ptr [esi.proseg_pfnINIT_ID4T]
1616endif
1617 pop edi
1618 pop ebx
1619
1620loc_6_82D: ; CODE XREF: checkForUnwindAtReturn+3Bj
1621 pop ecx
1622 pop edx
1623
1624locret_6_82F: ; CODE XREF: checkForUnwindAtReturn+5j
1625 ; checkForUnwindAtReturn+Cj ...
1626ifdef FS_FIXES_3
1627 pop fs
1628endif
1629 retn
1630checkForUnwindAtReturn endp
1631
1632; Type idx: 513
1633
1634; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1635
1636
1637 public verifyStackFrame
1638verifyStackFrame proc near ; CODE XREF: $$PROFCALL32+8Ep
1639 ; $$PROFTRIG32+7Ap ...
1640ifdef FS_FIXES_3
1641 push fs
1642 push Dos32TIB
1643 pop fs
1644endif
1645 push edi
1646 test word ptr [esi].proseg_flags, 40h
1647 jz short loc_6_85F
1648 test word ptr [esi].proseg_flags, 80h
1649 jz short loc_6_85F
1650 mov edi, ebx
1651 shl edi, 0Ch
1652 add edi, [esi].proseg_retStacks
1653 cmp dword ptr [edi], 0
1654 jz short loc_6_85F
1655 nop
1656 nop
1657 nop
1658 nop
1659 cmp eax, [edi+0Ch]
1660 ja short loc_6_863
1661 add edi, [edi]
1662 cmp eax, [edi+4]
1663 jz short loc_6_86A
1664
1665loc_6_85F: ; CODE XREF: verifyStackFrame+6j
1666 ; verifyStackFrame+Dj ...
1667 xor eax, eax
1668 jmp short loc_6_879
1669; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
1670
1671loc_6_863: ; CODE XREF: verifyStackFrame+26j
1672 mov eax, 0FFFFFFF9h
1673 jmp short loc_6_86F
1674; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
1675
1676loc_6_86A: ; CODE XREF: verifyStackFrame+2Dj
1677 mov eax, 0FFFFFFFDh
1678
1679loc_6_86F: ; CODE XREF: verifyStackFrame+38j
1680 call PERF
1681 mov eax, 1
1682
1683loc_6_879: ; CODE XREF: verifyStackFrame+31j
1684 pop edi
1685ifdef FS_FIXES_3
1686 pop fs
1687endif
1688 retn
1689verifyStackFrame endp
1690
1691; Type idx: 513
1692
1693; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1694
1695; Attributes: bp-based frame
1696
1697 public _ProfileEnterParagraph32
1698_ProfileEnterParagraph32 proc near
1699 push ebp
1700 mov ebp, esp
1701 pushfd
1702ifdef FS_FIXES_3
1703 push fs
1704 push Dos32TIB
1705 pop fs
1706endif
1707 push esi
1708 mov esi, $$PROSEGPTR32
1709 or esi, esi
1710 jz loc_6_8EE
1711 test word ptr [esi].proseg_flags, 2
1712 jz short loc_6_8EE
1713 test word ptr [esi].proseg_flags, 10h
1714 jnz short loc_6_8EE
1715 push edi
1716 push ebx
1717 push ecx
1718ifdef FS_FIXES_1
1719 push fs
1720 push Dos32TIB
1721 pop fs
1722 mov ebx, fs:tib_s.tib_ptib2
1723 pop fs
1724else
1725 mov ebx, fs:tib_s.tib_ptib2
1726endif
1727 mov ebx, [ebx]
1728 cmp ebx, [esi].proseg_maxTid
1729 ja short loc_6_8EB
1730 dec ebx
1731 mov eax, [esi].proseg_tidTrigger
1732 cmp dword ptr [eax+ebx*4], 0
1733 jz short loc_6_8EB
1734 mov edi, ebx
1735 shl ebx, 10h
1736 mov eax, [ebp+4]
1737 push edx
1738 mov ecx, [esi].conditionalExit
1739 mov edx, [ecx+edi*4]
1740 cmp edx, 0FFFFFFFFh
1741 jz short loc_6_8E5
1742 mov bl, 5
1743 push eax
1744 push ebx
1745 push edi
1746ifdef FS_FIXES_2
1747 push fs
1748 push Dos32TIB
1749 pop fs
1750 call dword ptr [esi.proseg_pfnINIT_ID44T]
1751 pop fs
1752else
1753 call dword ptr [esi.proseg_pfnINIT_ID44T]
1754endif
1755 pop edi
1756 pop ebx
1757 pop eax
1758 mov ecx, [esi].conditionalExit
1759 mov dword ptr [ecx+edi*4], 0FFFFFFFFh
1760
1761loc_6_8E5: ; CODE XREF: _ProfileEnterParagraph32+50j
1762 mov bl, 4
1763 pop edx
1764ifdef FS_FIXES_2
1765 push fs
1766 push Dos32TIB
1767 pop fs
1768 call dword ptr [esi.proseg_pfnINIT_ID44T]
1769 pop fs
1770else
1771 call dword ptr [esi.proseg_pfnINIT_ID44T]
1772endif
1773
1774loc_6_8EB: ; CODE XREF: _ProfileEnterParagraph32+2Cj
1775 ; _ProfileEnterParagraph32+39j
1776 pop ecx
1777 pop ebx
1778 pop edi
1779
1780loc_6_8EE: ; CODE XREF: _ProfileEnterParagraph32+Dj
1781 ; _ProfileEnterParagraph32+14j ...
1782 pop esi
1783ifdef FS_FIXES_3
1784 pop fs
1785endif
1786 popfd
1787 pop ebp
1788 retn
1789_ProfileEnterParagraph32 endp
1790
1791; Type idx: 513
1792
1793; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1794
1795; Attributes: bp-based frame
1796
1797 public _ProfileExitParagraph32
1798_ProfileExitParagraph32 proc near
1799 push ebp
1800 mov ebp, esp
1801 pushfd
1802ifdef FS_FIXES_3
1803 push fs
1804 push Dos32TIB
1805 pop fs
1806endif
1807 push esi
1808 mov esi, $$PROSEGPTR32
1809 or esi, esi
1810 jz short loc_6_939
1811 test word ptr [esi].proseg_flags, 2
1812 jz short loc_6_939
1813 test word ptr [esi].proseg_flags, 10h
1814 jnz short loc_6_939
1815 push ebx
1816ifdef FS_FIXES_1
1817 push fs
1818 push Dos32TIB
1819 pop fs
1820 mov ebx, fs:tib_s.tib_ptib2
1821 pop fs
1822else
1823 mov ebx, fs:tib_s.tib_ptib2
1824endif
1825 mov ebx, [ebx]
1826 cmp ebx, [esi].proseg_maxTid
1827 ja short loc_6_938
1828 dec ebx
1829 mov edx, [esi].proseg_tidTrigger
1830 cmp dword ptr [edx+ebx*4], 0
1831 jz short loc_6_938
1832 mov edx, eax
1833 mov eax, [ebp+4]
1834 shl ebx, 10h
1835 mov bl, 5
1836ifdef FS_FIXES_2
1837 push fs
1838 push Dos32TIB
1839 pop fs
1840 call dword ptr [esi.proseg_pfnINIT_ID44T]
1841 pop fs
1842else
1843 call dword ptr [esi.proseg_pfnINIT_ID44T]
1844endif
1845
1846loc_6_938: ; CODE XREF: _ProfileExitParagraph32+2Aj
1847 ; _ProfileExitParagraph32+37j
1848 pop ebx
1849
1850loc_6_939: ; CODE XREF: _ProfileExitParagraph32+Dj
1851 ; _ProfileExitParagraph32+14j ...
1852 pop esi
1853ifdef FS_FIXES_3
1854 pop fs
1855endif
1856 popfd
1857 pop ebp
1858 retn
1859_ProfileExitParagraph32 endp
1860
1861; Type idx: 513
1862
1863; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1864
1865
1866 public _ProfileConditionalExit32
1867_ProfileConditionalExit32 proc near
1868 pushfd
1869ifdef FS_FIXES_3
1870 push fs
1871 push Dos32TIB
1872 pop fs
1873endif
1874 push esi
1875 mov esi, $$PROSEGPTR32
1876 or esi, esi
1877 jz short loc_6_973
1878 test word ptr [esi].proseg_flags, 2
1879 jz short loc_6_973
1880 test word ptr [esi].proseg_flags, 10h
1881 jnz short loc_6_973
1882 push ebx
1883 push ecx
1884ifdef FS_FIXES_1
1885 push fs
1886 push Dos32TIB
1887 pop fs
1888 mov ebx, fs:tib_s.tib_ptib2
1889 pop fs
1890else
1891 mov ebx, fs:tib_s.tib_ptib2
1892endif
1893 mov ebx, [ebx]
1894 cmp ebx, [esi].proseg_maxTid
1895 ja short loc_6_971
1896 dec ebx
1897 mov ecx, [esi].conditionalExit
1898 mov [ecx+ebx*4], eax
1899
1900loc_6_971: ; CODE XREF: _ProfileConditionalExit32+28j
1901 pop ecx
1902 pop ebx
1903
1904loc_6_973: ; CODE XREF: _ProfileConditionalExit32+Aj
1905 ; _ProfileConditionalExit32+11j ...
1906 pop esi
1907ifdef FS_FIXES_3
1908 pop fs
1909endif
1910 popfd
1911 retn
1912_ProfileConditionalExit32 endp
1913
1914; Type idx: 513
1915
1916; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1917
1918
1919 public _ProfileCancelExit32
1920_ProfileCancelExit32 proc near
1921 pushfd
1922ifdef FS_FIXES_3
1923 push fs
1924 push Dos32TIB
1925 pop fs
1926endif
1927 push esi
1928 mov esi, $$PROSEGPTR32
1929 or esi, esi
1930 jz short loc_6_9B0
1931 test word ptr [esi].proseg_flags, 2
1932 jz short loc_6_9B0
1933 test word ptr [esi].proseg_flags, 10h
1934 jnz short loc_6_9B0
1935 push ebx
1936 push ecx
1937ifdef FS_FIXES_1
1938 push fs
1939 push Dos32TIB
1940 pop fs
1941 mov ebx, fs:tib_s.tib_ptib2
1942 pop fs
1943else
1944 mov ebx, fs:tib_s.tib_ptib2
1945endif
1946 mov ebx, [ebx]
1947 cmp ebx, [esi].proseg_maxTid
1948 ja short loc_6_9AE
1949 dec ebx
1950 mov ecx, [esi].conditionalExit
1951 mov dword ptr [ecx+ebx*4], 0FFFFFFFFh
1952
1953loc_6_9AE: ; CODE XREF: _ProfileCancelExit32+28j
1954 pop ecx
1955 pop ebx
1956
1957loc_6_9B0: ; CODE XREF: _ProfileCancelExit32+Aj
1958 ; _ProfileCancelExit32+11j ...
1959 pop esi
1960ifdef FS_FIXES_3
1961 pop fs
1962endif
1963 popfd
1964 retn
1965_ProfileCancelExit32 endp
1966
1967; Type idx: 513
1968
1969; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
1970
1971; Attributes: bp-based frame
1972
1973 public _ProfileNameString32
1974_ProfileNameString32 proc near
1975 push ebp
1976 mov ebp, esp
1977 pushfd
1978ifdef FS_FIXES_3
1979 push fs
1980 push Dos32TIB
1981 pop fs
1982endif
1983 push esi
1984 mov esi, $$PROSEGPTR32
1985 or esi, esi
1986 jz short loc_6_A11
1987 test word ptr [esi].proseg_flags, 2
1988 jz short loc_6_A11
1989 test word ptr [esi].proseg_flags, 10h
1990 jnz short loc_6_A11
1991 push ebx
1992 push ecx
1993ifdef FS_FIXES_1
1994 push fs
1995 push Dos32TIB
1996 pop fs
1997 mov ebx, fs:tib_s.tib_ptib2
1998 pop fs
1999else
2000 mov ebx, fs:tib_s.tib_ptib2
2001endif
2002 mov ebx, [ebx]
2003 cmp ebx, [esi].proseg_maxTid
2004 ja short loc_6_A0F
2005 dec ebx
2006 mov ecx, [esi].proseg_tidTrigger
2007 cmp dword ptr [ecx+ebx*4], 0
2008 jz short loc_6_A0F
2009 mov ecx, [ebp+4]
2010 mov [esi._parm ], ecx
2011 mov [esi._parm+4h], eax
2012 mov [esi._parm+8h], edx
2013 mov dword ptr [esi]._command, 2
2014 int 3 ; Trap to Debugger
2015 wait
2016 int 3 ; Trap to Debugger
2017
2018loc_6_A0F: ; CODE XREF: _ProfileNameString32+2Bj
2019 ; _ProfileNameString32+38j
2020 pop ecx
2021 pop ebx
2022
2023loc_6_A11: ; CODE XREF: _ProfileNameString32+Dj
2024 ; _ProfileNameString32+14j ...
2025 pop esi
2026ifdef FS_FIXES_3
2027 pop fs
2028endif
2029 popfd
2030 pop ebp
2031 retn
2032_ProfileNameString32 endp
2033
2034; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
2035; Type idx: 520
2036
2037 public _ProfileVersionId32
2038_ProfileVersionId32 TVersionId <4, 0, 2, 178h>
2039CODE32 ends
2040
2041 end
Note: See TracBrowser for help on using the repository browser.