source: trunk/tools/profilerfix/cppopa4.asm

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

Corrected two warnings.

File size: 62.5 KB
RevLine 
[8367]1; $Id: cppopa4.asm,v 1.4 2002-05-02 23:15:38 bird Exp $
[8280]2;
[8282]3
4;
5; Copyright 1990-1998 IBM Corp.
6;
7
8;
[8281]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
[8280]14
15
16
17 .586
[8281]18 .MODEL FLAT
[8280]19
[8282]20;
21; Defined Constants And Macros
22;
[8280]23
[8281]24;
[8282]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;
[8281]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
[8280]53
[8281]54DGROUP group DATA32, CONST32, BSS32
[8280]55
[8281]56CODE32 segment dword public 'CODE' use32
57CODE32 ends
[8280]58
59
[8281]60;
61; Externals
62;
63 extrn DosExit:near
[8280]64 extrn DosSleep:far
[8281]65 extrn DosLoadModule:near
66 extrn DosQueryProcAddr:near
67 extrn DosUnwindException:near
[8282]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
[8280]75
76
[8281]77;
78; Global Variables
79;
80DATA32 segment
[8280]81; assume cs:DATA32
82 public $$PROSEGPTR32
[8281]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 ...
[8280]89DATA32 ends
90
91
92;
93; Structures and Typedefs
94;
[8281]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 ?
[8280]109 proseg_clockFrequency_low dd ?
110 proseg_clockFrequency_high dd ?
[8281]111 proseg_logBuf1st dd ?
112 proseg_logBufMax dd ?
113 proseg_logBufNext dd ?
114 proseg_logBufWrap dd ?
[8282]115if 0
[8281]116 proseg_procAddrs dd 7 dup(?)
[8282]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
[8281]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
[8280]152
[8281]153TVersionId struc
[8280]154 _versionNumber dd ?
155 _releaseNumber dd ?
156 _modificationLevel dd ?
157 _prosegSize dd ?
[8281]158TVersionId ends
[8280]159
[8281]160TStackHeader struc
[8280]161 _offsetOfTop dd ?
[8281]162TStackHeader ends
[8280]163
[8281]164TStackEntry struc
[8280]165 _returnAddr dd ?
166 _frameAddr dd ?
[8281]167TStackEntry ends
[8280]168
[8281]169tib2_s struc
[8280]170 tib2_ultid dd ?
171 tib2_ulpri dd ?
172 tib2_version dd ?
173 tib2_usMCCount dw ?
174 tib2_fMCForceFlag dw ?
[8281]175tib2_s ends
[8280]176
[8281]177tib_s struc
[8280]178 tib_pexchain dd ?
179 tib_pstack dd ?
180 tib_pstacklimit dd ?
181 tib_ptib2 dd ?
182 tib_version dd ?
183 tib_arbpointer dd ?
[8281]184tib_s ends
[8280]185
[8281]186pib_s struc
[8280]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 ?
[8281]194pib_s ends
[8280]195
196
[8281]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
[8280]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
[8281]213;
[8280]214; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
[8281]215;
[8280]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
[8282]227ifdef FS_FIXES_3
228 push fs
229 push Dos32TIB
230 pop fs
231endif
[8280]232 mov esi, $$PROSEGPTR32
[8282]233 ASSUME esi:ptr PROSEG
[8280]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
[8282]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
[8280]260 jnz loc_6_FD
261 movzx ebx, word ptr [ebx]
262 dec ebx
[8282]263 cmp ebx, [esi.proseg_maxTid]
[8280]264 jnb loc_6_FD
[8282]265 mov eax, [esi.conditionalExit]
[8280]266 mov dword ptr [eax+ebx*4], 0FFFFFFFFh
[8282]267 mov eax, [esi.proseg_tidTrigger]
[8280]268 cmp dword ptr [eax+ebx*4], 0
[8282]269 jz loc_6_FD
[8280]270 nop
271 nop
272 nop
273 nop
[8282]274 mov eax, [esi.proseg_tidDecNest]
[8280]275 dec dword ptr [eax+ebx*4]
[8282]276 js loc_6_104
[8280]277 nop
278 nop
279 nop
280 nop
281 push edi
[8282]282 lea eax, [esp+18h + FS_FIXES_STACK]
[8280]283 call verifyStackFrame
284 or eax, eax
285 jnz short loc_6_103
[8282]286 mov eax, offset $$PROFRET32
287 xchg eax, [esp+18h+arg_0 + FS_FIXES_STACK]
[8280]288 mov edi, ebx
289 shl edi, 0Ch
[8282]290 add edi, [esi.proseg_retStacks]
[8280]291 push eax
[8282]292 lea eax, [esp+1Ch + FS_FIXES_STACK]
[8280]293 call checkForUnwindAtCall
294 pop eax
295 add dword ptr [edi], 8
296 add edi, [edi]
297 mov [edi], eax
[8282]298 lea eax, [esp+18h + FS_FIXES_STACK]
[8280]299 mov [edi+4], eax
300 mov eax, [eax]
[8282]301 test dword ptr [esi.proseg_flags], 20h
[8280]302 jz short loc_6_F4
303 nop
304 nop
305 nop
306 nop
307 shl ebx, 10h
308 mov bl, 1
[8282]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
[8280]319 jmp short loc_6_FC
320; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
[8281]321; align 4
322 nop
323 nop
324 nop
[8280]325
326loc_6_F4: ; CODE XREF: $$PROFCALL32+CCj
327 shl ebx, 10h
328 mov bl, 40h ; '@'
[8282]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
[8280]338
339loc_6_FC: ; CODE XREF: $$PROFCALL32+DEj
340 pop edi
341
342loc_6_FD: ; CODE XREF: $$PROFCALL32+1Aj
343 ; $$PROFCALL32+37j ...
[8282]344ifdef FS_FIXES_3
345 pop fs
346endif
[8280]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
[8282]359 mov eax, [esi.proseg_tidDecNest]
[8280]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
[8282]371; assume esi:nothing
[8280]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
[8282]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
[8280]397 mov esi, $$PROSEGPTR32
398 movzx ebx, word ptr [ebx]
399 dec ebx
[8282]400 mov eax, [esi].proseg_tidDecNest
[8280]401 inc dword ptr [eax+ebx*4]
402 mov edi, ebx
403 shl edi, 0Ch
[8282]404 add edi, [esi].proseg_retStacks
[8280]405 push eax
[8282]406 lea eax, [esp+18h+var_4 + FS_FIXES_STACK]
[8280]407 call checkForUnwindAtReturn
408 pop eax
409 sub dword ptr [edi], 8
410 add edi, [edi]
411 mov eax, [edi+8]
[8282]412 mov [esp+14h + FS_FIXES_STACK], eax
[8280]413 shl ebx, 10h
414 mov bl, 0
[8282]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
[8280]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
[8282]451ifdef FS_FIXES_3
452 push fs
453 push Dos32TIB
454 pop fs
455endif
[8280]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
[8282]473 test dword ptr [esi].proseg_flags, 10h
[8280]474 jnz loc_6_24A
[8282]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
[8280]484 movzx ebx, word ptr [ebx]
485 dec ebx
[8282]486 cmp ebx, [esi].proseg_maxTid
[8280]487 jnb loc_6_24A
[8282]488 mov eax, [esi].conditionalExit
[8280]489 mov dword ptr [eax+ebx*4], 0FFFFFFFFh
[8282]490 mov eax, [esi].proseg_tidDecNest
[8280]491 dec dword ptr [eax+ebx*4]
[8282]492 js loc_6_251
[8280]493 push edi
[8282]494 lea eax, [esp+18h + FS_FIXES_STACK]
[8280]495 call verifyStackFrame
496 or eax, eax
[8282]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
[8280]501 jz short loc_6_250
[8282]502 mov edi, [esi].proseg_tidTrigger
[8280]503 inc dword ptr [edi+ebx*4]
504 mov edi, ebx
505 shl edi, 0Ch
[8282]506 add edi, [esi].proseg_retStacks
[8280]507 push eax
[8282]508 lea eax, [esp+1Ch + FS_FIXES_STACK]
[8280]509 call checkForUnwindAtCall
510 pop eax
511 add dword ptr [edi], 8
512 add edi, [edi]
513 mov [edi], eax
[8282]514 lea eax, [esp+18h + FS_FIXES_STACK]
[8280]515 mov [edi+4], eax
516 mov eax, [eax]
[8282]517 test dword ptr [esi].proseg_flags, 20h
[8280]518 jz short loc_6_241
519 nop
520 nop
521 nop
522 nop
523 shl ebx, 10h
524 mov bl, 1
[8282]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
[8280]535 jmp short loc_6_249
536; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
[8281]537 ; align 4 ??
538 nop
539 nop
540 nop
541
[8280]542; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
543
544loc_6_241: ; CODE XREF: $$PROFTRIG32+C8j
545 shl ebx, 10h
546 mov bl, 40h ; '@'
[8282]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
[8280]556
557loc_6_249: ; CODE XREF: $$PROFTRIG32+DAj
558 pop edi
559
560loc_6_24A: ; CODE XREF: $$PROFTRIG32+1Aj
561 ; $$PROFTRIG32+37j ...
[8282]562ifdef FS_FIXES_3
563 pop fs
564endif
[8280]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
[8282]578 mov eax, [esi].proseg_tidDecNest
[8280]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
[8282]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
[8280]615 mov esi, $$PROSEGPTR32
616 movzx ebx, word ptr [ebx]
617 dec ebx
[8282]618 mov eax, [esi].proseg_tidDecNest
[8280]619 inc dword ptr [eax+ebx*4]
620 mov edi, ebx
621 shl edi, 0Ch
[8282]622 add edi, [esi].proseg_retStacks
[8280]623 push eax
[8282]624 lea eax, [esp+1Ch+var_8 + FS_FIXES_STACK]
[8280]625 call checkForUnwindAtReturn
626 pop eax
627 sub dword ptr [edi], 8
628 add edi, [edi]
629 mov eax, [edi+8]
[8282]630 mov [esp+18h+var_4 + FS_FIXES_STACK], eax
631 mov eax, [esi].proseg_tidTrigger
[8280]632 dec dword ptr [eax+ebx*4]
633 shl ebx, 10h
[8282]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
[8280]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
[8282]683ifdef FS_FIXES_3
684 push fs
685 push Dos32TIB
686 pop fs
687endif
[8280]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
[8282]705 test dword ptr [esi].proseg_flags, 10h
[8280]706 jnz loc_6_40B
[8282]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
[8280]716 movzx ebx, word ptr [ebx]
717 dec ebx
[8282]718 cmp ebx, [esi].proseg_maxTid
[8280]719 jnb loc_6_40B
[8282]720 mov eax, [esi].proseg_tidTrigger
[8280]721 cmp dword ptr [eax+ebx*4], 0
722 jz loc_6_40B
[8282]723 mov eax, [esi].proseg_tidDecNest
[8280]724 dec dword ptr [eax+ebx*4]
725 js loc_6_412
726 push edi
[8282]727 lea eax, [esp+18h + FS_FIXES_STACK]
[8280]728 call verifyStackFrame
729 or eax, eax
730 jnz loc_6_411
[8282]731 mov eax, offset $$PROFRET32
732 xchg eax, [esp+18h+arg_0 + FS_FIXES_STACK]
733 cmp eax, offset $$PROFRET32
[8280]734 jnz short loc_6_36A
735 mov eax, 0FFFFFFFDh
736 call PERF
[8282]737 inc dword ptr [esi._counterArray+14h]
[8280]738 jmp loc_6_411
739; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
740
741loc_6_36A: ; CODE XREF: $$PROFEYEC32+9Cj
742 mov edi, ebx
743 shl edi, 0Ch
[8282]744 add edi, [esi].proseg_retStacks
[8280]745 push eax
[8282]746 lea eax, [esp+1Ch + FS_FIXES_STACK]
[8280]747 call checkForUnwindAtCall
748 pop eax
749 add dword ptr [edi], 8
750 add edi, [edi]
751 mov [edi], eax
[8282]752 lea eax, [esp+18h + FS_FIXES_STACK]
[8280]753 mov [edi+4], eax
754 mov eax, [eax]
755 push dword ptr [edi]
[8282]756 test dword ptr [esi].proseg_flags, 20h
[8280]757 jz short loc_6_3AF
758 nop
759 nop
760 nop
761 nop
762 shl ebx, 10h
763 mov bl, 1
[8282]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
[8280]774 jmp short loc_6_3B7
775; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
[8281]776 ; align 4 ??
777 nop
778 nop
779 nop
[8280]780; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
781
782loc_6_3AF: ; CODE XREF: $$PROFEYEC32+E1j
783 shl ebx, 10h
784 mov bl, 40h ; '@'
[8282]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
[8280]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
[8282]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
[8280]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; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
[8282]833jmpback_1:
834 mov esi, offset jmpback_2
[8280]835 mov [edi-4], eax
836 jmp short loc_6_3CE
837; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
[8282]838jmpback_2:
839 mov esi, offset jmpback_3
[8280]840 mov [edi-4], edx
841 jmp short loc_6_3CE
842; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
[8282]843jmpback_3:
[8280]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 ...
[8282]854ifdef FS_FIXES_3
855 pop fs
856endif
[8280]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
[8282]870 mov eax, [esi].proseg_tidDecNest
[8280]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
[8282]899ifdef FS_FIXES_3
900 push fs
901 push Dos32TIB
902 pop fs
903endif
[8280]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
[8282]929 test dword ptr [esi].proseg_flags, 10h
[8280]930 jnz short loc_6_494
931 nop
932 nop
933 nop
934 nop
[8282]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
[8280]944 movzx ebx, word ptr [ebx]
945 dec ebx
[8282]946 cmp ebx, [esi].proseg_maxTid
[8280]947 jnb short loc_6_494
[8282]948 mov edx, [esi].proseg_tidDecNest
[8280]949 mov edx, [edx+ebx*4]
[8282]950 mov ecx, [esi].proseg_tidMaxNest
[8280]951 cmp edx, [ecx+ebx*4]
952 jz short loc_6_494
953 push edi
954 shl ebx, 10h
955 mov bl, 20h ; ' '
[8282]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
[8280]965 pop edi
966
967loc_6_494: ; CODE XREF: PROFITCAL+19j
968 ; PROFITCAL+36j ...
[8282]969ifdef FS_FIXES_3
970 pop fs
971endif
[8280]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
[8282]999 mov dx, [esi].proseg_flags
[8280]1000 mov cx, dx
1001 and dx, 10h
1002 xor cx, dx
[8282]1003 mov [esi].proseg_flags, cx
[8280]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
[8282]1037 mov cx, [esi].proseg_flags
[8280]1038 or cx, 10h
[8282]1039 mov [esi].proseg_flags, cx
[8280]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
[8282]1066ifdef FS_FIXES_3
1067 push fs
1068 push Dos32TIB
1069 pop fs
1070endif
[8280]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
[8282]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
[8280]1087 mov [eax+18h], edx
1088 fstcw word ptr [eax+1Ch]
1089 xor eax, eax
[8282]1090ifdef FS_FIXES_3
1091 pop fs
1092endif
[8280]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
[8282]1104ifdef FS_FIXES_3
1105 push fs
1106 push Dos32TIB
1107 pop fs
1108endif
[8280]1109 push eax
1110 push edx
[8282]1111ifdef FS_FIXES_1
1112 push fs
1113endif
[8280]1114 push 0
[8282]1115 push offset unwind_callback
[8280]1116 push dword ptr [eax+18h]
1117 call DosUnwindException
1118 mov edx, 0FCCCh
1119 jmp CrashAndBurn
1120
1121; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
[8282]1122unwind_callback:
[8280]1123 add esp, 0Ch
[8282]1124ifdef FS_FIXES_1
1125 pop fs
1126endif
[8280]1127 pop edx
1128 pop eax
[8282]1129ifdef FS_FIXES_1
[8280]1130 mov ecx, $$PROSEGPTR32
[8282]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
[8280]1146 mov esi, ecx
1147 movzx ebx, word ptr [ebx]
1148 dec ebx
[8282]1149 cmp ebx, [esi].proseg_maxTid
[8280]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
[8282]1157 add edi, [esi].proseg_retStacks
[8280]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]
[8282]1167 cmp edx, offset $$PROFTRIGRET32
[8280]1168 jnz short loc_6_5A2
1169 push eax
[8282]1170 mov eax, [esi].proseg_tidTrigger
[8280]1171 dec dword ptr [eax+ebx*4]
1172 pop eax
1173
1174loc_6_5A2: ; CODE XREF: CODE32:00000595j
1175 push eax
[8282]1176 mov eax, [esi].proseg_tidDecNest
[8280]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
[8282]1185 jz short bailout2
[8280]1186 mov eax, ecx
1187 shl ebx, 10h
1188 mov bl, 10h
[8282]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
[8280]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]
[8282]1207ifdef FS_FIXES_3
1208 pop fs
1209endif
[8280]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
[8282]1216 jnz short bailout1
[8280]1217 inc eax
1218
[8282]1219bailout1: ; CODE XREF: CODE32:000005B4j
[8280]1220 ; CODE32:000005DAj
1221 jmp dword ptr [edx+4]
[8282]1222
1223bailout2:
1224ifdef FS_FIXES_3
1225 pop fs
1226endif
1227 jmp dword ptr [edx+4]
1228
[8280]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
[8282]1240 mov eax, offset ExceptionThrownString
[8280]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
[8282]1256ifdef FS_FIXES_3
1257 push fs
1258 push Dos32TIB
1259 pop fs
1260endif
1261
[8280]1262 mov esi, $$PROSEGPTR32
1263 or esi, esi
1264 jz short loc_6_67A
[8282]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
[8280]1274 movzx ebx, word ptr [ebx]
1275 dec ebx
[8282]1276 cmp ebx, [esi].proseg_maxTid
[8280]1277 jnb short loc_6_67A
1278 xor ecx, ecx
1279 mov edi, ebx
1280 shl edi, 0Ch
[8282]1281 add edi, [esi].proseg_retStacks
[8280]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]
[8282]1291 cmp edx, offset $$PROFTRIGRET32
[8280]1292 jnz short loc_6_65C
1293 push eax
[8282]1294 mov eax, [esi].proseg_tidTrigger
[8280]1295 dec dword ptr [eax+ebx*4]
1296 pop eax
1297
1298loc_6_65C: ; CODE XREF: _ProfileUnwind32+43j
1299 push eax
[8282]1300 mov eax, [esi].proseg_tidDecNest
[8280]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
[8282]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
[8280]1322
1323loc_6_67A: ; CODE XREF: _ProfileUnwind32+Bj
1324 ; _ProfileUnwind32+1Bj ...
[8282]1325ifdef FS_FIXES_3
1326 pop fs
1327endif
[8280]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
[8282]1343 mov ecx, [esi].proseg_tidDecNest
[8280]1344 dec dword ptr [ecx]
1345 mov ecx, 8
1346
1347loc_6_692: ; CODE XREF: CODE32:000006A7j
[8282]1348 push offset eCal_arg2
1349 push offset eCal_arg1
1350 push offset $$PROFCALL32
[8280]1351 jmp $$PROFCALL32
1352
1353; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
[8282]1354eCal_arg2:
[8280]1355 retn
1356; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
[8282]1357eCal_arg1:
[8280]1358 loop loc_6_692
1359 push eax
[8282]1360 mov eax, [esi].proseg_tidDecNest
[8280]1361 inc dword ptr [eax]
1362 pop eax
1363 pop esi
1364 retn
[8282]1365eCal endp
[8280]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 ...
[8282]1396 mov [esi].proseg_rc, edx
1397 mov [esi].proseg_rcSys, eax
[8280]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
[8282]1414ifdef FS_FIXES_3
1415 push fs
1416 push Dos32TIB
1417 pop fs
1418endif
[8280]1419 xor ebx, ebx
1420 push ebx
1421 mov eax, esp
[8282]1422ifdef FS_FIXES_1
1423 push fs
1424endif
[8280]1425 push eax
1426 lea eax, logDllName ; "CPPPAN40"
1427 push eax
1428 push ebx
1429 push ebx
1430 call DosLoadModule
1431 add esp, 10h
[8282]1432ifdef FS_FIXES_1
1433 pop fs
1434endif
[8280]1435 mov edx, 0FAD8h
1436 or eax, eax
1437 jnz short CrashAndBurn
1438 pop edx
1439 mov ecx, 7
[8282]1440ifdef FS_FIXES_1
1441 push fs
1442endif
1443
[8280]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
[8282]1452ifdef FS_FIXES_1
1453 pop fs
1454endif
[8280]1455 mov edx, 0FB3Ch
1456 or eax, eax
1457 jnz short CrashAndBurn
1458 xor ebx, ebx
[8282]1459
[8280]1460 push ebx
1461 push ebx
1462 mov eax, esp
[8282]1463 mov edx, offset eCal
1464 mov ecx, offset uCal
1465ifdef FS_FIXES_1
1466 push fs
1467endif
[8280]1468 lea esi, $$PROSEGPTR32
1469 push esi
1470 sub esp, 0Ch
1471 call initAdr
1472 add esp, 10h
[8282]1473ifdef FS_FIXES_1
1474 pop fs
1475endif
[8280]1476 or eax, eax
1477 pop edx
1478 pop eax
1479 jnz CrashAndBurn
[8282]1480ifdef FS_FIXES_3
1481 pop fs
1482endif
[8280]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 ...
[8282]1496ifdef FS_FIXES_3
1497 push fs
1498 push Dos32TIB
1499 pop fs
1500endif
1501 test word ptr [esi].proseg_flags, 40h
[8280]1502 jz short locret_6_7D0
[8282]1503 test word ptr [esi].proseg_flags, 80h
[8280]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
[8367]1526 add dword ptr [esi+ebx*4+158h], ecx
[8280]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
[8282]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
[8280]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
[8282]1552ifdef FS_FIXES_3
1553 pop fs
1554endif
[8280]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
[8282]1566ifdef FS_FIXES_3
1567 push fs
1568 push Dos32TIB
1569 pop fs
1570endif
1571 test word ptr [esi].proseg_flags, 40h
[8280]1572 jz short locret_6_82F
[8282]1573 test word ptr [esi].proseg_flags, 80h
[8280]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
[8367]1600 add dword ptr [esi+ebx*4+158h], ecx
[8280]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
[8282]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
[8280]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 ...
[8282]1626ifdef FS_FIXES_3
1627 pop fs
1628endif
[8280]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 ...
[8282]1640ifdef FS_FIXES_3
1641 push fs
1642 push Dos32TIB
1643 pop fs
1644endif
[8280]1645 push edi
[8282]1646 test word ptr [esi].proseg_flags, 40h
[8280]1647 jz short loc_6_85F
[8282]1648 test word ptr [esi].proseg_flags, 80h
[8280]1649 jz short loc_6_85F
1650 mov edi, ebx
1651 shl edi, 0Ch
[8282]1652 add edi, [esi].proseg_retStacks
[8280]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
[8282]1685ifdef FS_FIXES_3
1686 pop fs
1687endif
[8280]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
[8282]1702ifdef FS_FIXES_3
1703 push fs
1704 push Dos32TIB
1705 pop fs
1706endif
[8280]1707 push esi
1708 mov esi, $$PROSEGPTR32
1709 or esi, esi
[8282]1710 jz loc_6_8EE
1711 test word ptr [esi].proseg_flags, 2
[8280]1712 jz short loc_6_8EE
[8282]1713 test word ptr [esi].proseg_flags, 10h
[8280]1714 jnz short loc_6_8EE
1715 push edi
1716 push ebx
1717 push ecx
[8282]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
[8280]1727 mov ebx, [ebx]
[8282]1728 cmp ebx, [esi].proseg_maxTid
[8280]1729 ja short loc_6_8EB
1730 dec ebx
[8282]1731 mov eax, [esi].proseg_tidTrigger
[8280]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
[8282]1738 mov ecx, [esi].conditionalExit
[8280]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
[8282]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
[8280]1755 pop edi
1756 pop ebx
1757 pop eax
[8282]1758 mov ecx, [esi].conditionalExit
[8280]1759 mov dword ptr [ecx+edi*4], 0FFFFFFFFh
1760
1761loc_6_8E5: ; CODE XREF: _ProfileEnterParagraph32+50j
1762 mov bl, 4
1763 pop edx
[8282]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
[8280]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
[8282]1783ifdef FS_FIXES_3
1784 pop fs
1785endif
[8280]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
[8282]1802ifdef FS_FIXES_3
1803 push fs
1804 push Dos32TIB
1805 pop fs
1806endif
[8280]1807 push esi
1808 mov esi, $$PROSEGPTR32
1809 or esi, esi
1810 jz short loc_6_939
[8282]1811 test word ptr [esi].proseg_flags, 2
[8280]1812 jz short loc_6_939
[8282]1813 test word ptr [esi].proseg_flags, 10h
[8280]1814 jnz short loc_6_939
1815 push ebx
[8282]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
[8280]1825 mov ebx, [ebx]
[8282]1826 cmp ebx, [esi].proseg_maxTid
[8280]1827 ja short loc_6_938
1828 dec ebx
[8282]1829 mov edx, [esi].proseg_tidTrigger
[8280]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
[8282]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
[8280]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
[8282]1853ifdef FS_FIXES_3
1854 pop fs
1855endif
[8280]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
[8282]1869ifdef FS_FIXES_3
1870 push fs
1871 push Dos32TIB
1872 pop fs
1873endif
[8280]1874 push esi
1875 mov esi, $$PROSEGPTR32
1876 or esi, esi
1877 jz short loc_6_973
[8282]1878 test word ptr [esi].proseg_flags, 2
[8280]1879 jz short loc_6_973
[8282]1880 test word ptr [esi].proseg_flags, 10h
[8280]1881 jnz short loc_6_973
1882 push ebx
1883 push ecx
[8282]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
[8280]1893 mov ebx, [ebx]
[8282]1894 cmp ebx, [esi].proseg_maxTid
[8280]1895 ja short loc_6_971
1896 dec ebx
[8282]1897 mov ecx, [esi].conditionalExit
[8280]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
[8282]1907ifdef FS_FIXES_3
1908 pop fs
1909endif
[8280]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
[8282]1922ifdef FS_FIXES_3
1923 push fs
1924 push Dos32TIB
1925 pop fs
1926endif
[8280]1927 push esi
1928 mov esi, $$PROSEGPTR32
1929 or esi, esi
1930 jz short loc_6_9B0
[8282]1931 test word ptr [esi].proseg_flags, 2
[8280]1932 jz short loc_6_9B0
[8282]1933 test word ptr [esi].proseg_flags, 10h
[8280]1934 jnz short loc_6_9B0
1935 push ebx
1936 push ecx
[8282]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
[8280]1946 mov ebx, [ebx]
[8282]1947 cmp ebx, [esi].proseg_maxTid
[8280]1948 ja short loc_6_9AE
1949 dec ebx
[8282]1950 mov ecx, [esi].conditionalExit
[8280]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
[8282]1960ifdef FS_FIXES_3
1961 pop fs
1962endif
[8280]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
[8282]1978ifdef FS_FIXES_3
1979 push fs
1980 push Dos32TIB
1981 pop fs
1982endif
[8280]1983 push esi
1984 mov esi, $$PROSEGPTR32
1985 or esi, esi
1986 jz short loc_6_A11
[8282]1987 test word ptr [esi].proseg_flags, 2
[8280]1988 jz short loc_6_A11
[8282]1989 test word ptr [esi].proseg_flags, 10h
[8280]1990 jnz short loc_6_A11
1991 push ebx
1992 push ecx
[8282]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
[8280]2002 mov ebx, [ebx]
[8282]2003 cmp ebx, [esi].proseg_maxTid
[8280]2004 ja short loc_6_A0F
2005 dec ebx
[8282]2006 mov ecx, [esi].proseg_tidTrigger
[8280]2007 cmp dword ptr [ecx+ebx*4], 0
2008 jz short loc_6_A0F
2009 mov ecx, [ebp+4]
[8282]2010 mov [esi._parm ], ecx
2011 mov [esi._parm+4h], eax
2012 mov [esi._parm+8h], edx
2013 mov dword ptr [esi]._command, 2
[8280]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
[8282]2026ifdef FS_FIXES_3
2027 pop fs
2028endif
[8280]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.