Exploring Object Records

We now explore the memory object record (VMOB) and the .MO command.

>>> There are two types of object managed by object records:
>>>     pseudo-objects
>>>     non-pseudo-object

>>> Non-pseudo-objects have an associated arena record. These are by
>>> far the most common type of memory object. They include code and
>>> data segments of application and system code. However, there is
>>> a draw-back in that arena records deal with page size quantities.
>>> For certain system control blocks it is useful to have distinct
>>> objects associated with each instance of them. But these objects
>>> are generally very much smaller than a page. To overcome these
>>> difficulties such objects are sub-allocated from the system
>>> heap and given an object type of pseudo-object. They have
>>> no associated arena record.

>>> We list a few pseudo-objects. Note the 'p' parameter of .mo to
>>> do this.


# .mop
 hob       va     flgs own  hmte  sown,cnt lt st xf
 0004  %fff13238  8000 ffe1 0000  0000 00  00 00 00 vmah
 0005  %fff13190  8000 ffe1 0000  0000 00  00 00 00 vmah
 0006  %fff0a891  8000 ffa6 0000  0000 00  00 00 00 mte       doscalls.dll
 0072  %ffe3c7d4  8000 ffcb 0000  0000 00  00 00 00 ptda 0001 *sysinit
 007a  %fff0b3fa  8000 ffa6 0000  0000 00  00 00 00 mte       mvdm.dll
 007b  %fff0b26b  8000 ffa6 0000  0000 00  00 00 00 mte       fshelper.dll
 007d  %fe720f60  8000 ffa6 0000  0000 00  00 00 00 mte       a:mini_fsd.fsd
 0086  %fe861ee0  8000 ffa6 0000  0000 00  00 00 00 mte       c:pmdd.sys
 0087  %fe861f30  8000 ffa6 0000  0000 00  00 00 00 mte       c:dos.sys
 0088  %fe861f58  8000 ffa6 0000  0000 00  00 00 00 mte       c:testcfg.sys
 008a  %fe860f9c  8000 ffa6 0000  0000 00  00 00 00 mte       c:pmshapim.dll
 0091  %7b9c484c  8000 ffcb ff79  0000 00  00 00 00 ptda 0003 c:pmshell.exe
 0096  %fe721fb8  8000 ffa6 0000  0000 00  00 00 00 mte       c:clock01.sys
 0097  %fe721f1c  8000 ffa6 0000  0000 00  00 00 00 mte       c:screen01.sys
 0098  %fe721eb0  8000 ffa6 0000  0000 00  00 00 00 mte       c:kbd01.sys
 0099  %fe7246bc  8000 ffa6 0000  0000 00  00 00 00 mte       c:print01.sys
 009f  %fe724f84  8000 ffa6 0000  0000 00  00 00 00 mte       c:ibm1flpy.add
 00a1  %fe725f88  8000 ffa6 0000  0000 00  00 00 00 mte       c:ibm1s506.add

#

>>> Pseudo-objects apply to four types of control block but in general
>>> we will only be concerned with the PTDA and the MTE.
>>> The pseudo-object record is distinugished by the presence of the
>>> 'va' field. The control block name is shown in column 11.
>>>  |                                               |
>>>  .......                                         |
>>>        |                                         |
>>>        V                                         V
# .mo 91
 hob       va     flgs own  hmte  sown,cnt lt st xf
 0091  %7b9c484c  8000 ffcb ff79  0000 00  00 00 00 ptda 0003 c:pmshell.exe

>>> The 'va' field gives the address of the object itself. In this
>>> it's a PTDA address. We can find the thread slots which correspond
>>> to this PTDA either by using .P and looking for a match in the
>>> pPTDA field or directly:

# dw %7b9c484c+pid-ptda_start l1
%7b9c5042  0003
>>> This is the pid. Note .mo 91 extracts this for us - the pid appears
>>> after 'ptda'

# dd %7b9c484c+ptda_pTCBHead-ptda_start l1
%7b9c486c  7b9a8a70
>>> This is the head of the TCB tree for pid 3.

# dw 7b9a8a70 l2
%7b9a8a70  0001 0008
>>> Words 0 and 1 of the TCB contain the thread ordinal and its slot
>>> number. This is tid 1 in slot 8.

# .p8
 Slot  Pid  Ppid Csid Ord  Sta Pri  pTSD     pPTDA    pTCB     Disp SG Name
 0008  0003 0001 0003 0001 rdy 061f 7b7b6000 7b9c484c 7b9a8a70 1eb8 01 PMSHL32

>>> The PTDA for slot 8 has pid 3, is at %7b9c484c which is hob 91.
>>> The handle of the PTDA (hptda) is defined to be the hob of the
>>> object it occupies. Thus this ptda is also identified by hptda=91

>>> The other most frequently encountered pseudo-object is the mte.

 hob       va     flgs own  hmte  sown,cnt lt st xf
 0193  %fe722dec  8000 ffa6 0000  0000 00  00 00 00 mte       c:pmshell.exe

>>> The MTE represents a loaded module. In this case the MTE control
>>> block is located at %fe722dec and is assigned the mte handle of its
>>> hob. In this case the MTE at %fe722dec is also referred to as
>>> hmte=193. The .LM command will respond to either hmte or MTE address
>>> and format the MTE for us ...
# .lm 193
hmte=0193 pmte=%fe722dec mflags=84903150 c:\os2\pmshell.exe

>>> .MO extracts the module name from the MTE and displays this to the
>>> right of 'mte'

>>> In each object record is the 'own' and 'hmte' fields. These are used
>>> to attribute ownership and associate a module or part of the system
>>> that was involved with the allocation request. In many cases
>>> these fields contain hobs of related objects. In some cases
>>> attribution needs to be made to a system resource. For this a
>>> number of generic system object Ids have been defined. They all
>>> are greater then 0xff00. .MO will translate system object Ids into
>>> a more meaningful text string. For example: in hob 193 the
>>> owner id ffa6
# .mo ffa6
ffa6 ldrmte

>>> Similarly in hob 91 the owner is ffcb
# .mo ffcb
ffcb ptda

>>> Both of these give an indication of the type of system object.
>>> In the first case a load MTE, in the second a PTDA. The 'own' and
>>> 'hmte' interpretation is used to form the description that appears
>>> to the right of each .MO line.


>>> We now turn our attention to non-pseudo obects or normal
>>> memory objects:


.mon
 hob   har hobnxt flgs own  hmte  sown,cnt lt st xf
 0001  0001 fec8  0000 fff1 0000  0000 00  00 00 00 vmob
 0002  0002 fec8  0000 ffe3 0000  0000 00  00 00 00 vmar
 0003  0003 fec8  0000 ffec 0000  0000 00  01 00 00 vmkrhrw
 0007  0006 0000  0000 ff6d 0000  0000 00  00 00 00 doshlp
 0008  0007 0000  0000 ffaa 0006  0000 00  00 00 00 os2krnl
 0009  0008 0000  0000 ffaa 0006  0000 00  00 00 00 os2krnl
 000a  0009 0000  0000 ffaa 0006  0000 00  00 00 00 os2krnl
 000b  000a 0000  0000 ffaa 0006  0000 00  00 00 00 os2krnl
 000c  000b 0000  0000 ffaa 0006  0000 00  00 00 00 os2krnl
 000d  000c 0000  0325 ffba 0000  0000 00  00 00 00 lock
 000e  000d 0000  0000 ffaa 0006  0000 00  00 00 00 os2krnl
 000f  000e 0000  0000 ffaa 0006  0000 00  00 00 00 os2krnl
 0010  0087 0000  402c 0091 019f  0000 00  00 00 00 priv 0003 c:pmshell.exe
 0011  0010 0000  0000 ffaa 0006  0000 00  00 00 00 os2krnl
 0012  0011 0000  0000 ffaa 0006  0000 00  00 00 00 os2krnl
 0013  0012 0000  0000 ffaa 0006  0000 00  00 00 00 os2krnl
 .
 .
 .
 .
 .
 009d  0096 0000  0225 ff8c 0000  0000 00  00 00 00 perfview
 009e  0097 0000  0524 ff88 ff54  0000 00  00 00 00 ptogdt    dd5
 00a0  0098 0000  0524 ff88 ff56  0000 00  00 00 00 ptogdt    dd7
 00a3  0099 0000  0524 ff88 ff56  0000 00  00 00 00 ptogdt    dd7
 00a4  009a 0000  0524 ff88 ff56  0000 00  00 00 00 ptogdt    dd7
 00a5  009b 0000  0524 ff88 ff56  0000 00  00 00 00 ptogdt    dd7
 00a6  009c 0000  0524 ff88 ff56  0000 00  00 00 00 ptogdt    dd7
 .
 .
 .

 00e1  00d5 0000  0324 ff93 0000  0000 00  00 00 00 fsbuf
 00e2  00d6 0000  482c fff7 019f  0000 00  00 00 04 giveget
 00e3  00d7 0000  0124 ff8f 0000  0000 00  00 00 00 resource
 00e4  01c8 0000  0824 0131 0131  0000 00  00 00 00 shared    c:display.dll
 hob   har hobnxt flgs own  hmte  sown,cnt lt st xf
 00e6  00d9 0000  082c 00e5 00e5  0000 00  00 00 00 shared    c:doscall1.dll
 00e7  00da 0000  0838 00e5 00e5  0000 00  00 00 00 shared    c:doscall1.dll
 00e8  00db 0000  0838 00e5 00e5  0000 00  00 00 00 shared    c:doscall1.dll
 00e9  00dc 0000  0838 00e5 00e5  0000 00  00 00 00 shared    c:doscall1.dll
 00ea  00dd 0000  0838 00e5 00e5  0000 00  00 00 00 shared    c:doscall1.dll
 00eb  00de 0000  0830 00e5 00e5  0000 00  00 00 00 shared    c:doscall1.dll
 00ec  00f1 0000  422c 0091 01b0  0000 00  00 00 00 priv 0003 c:pmshell.exe
 00ed  010d 0000  402c 0091 01b0  0000 00  00 00 00 priv 0003 c:pmshell.exe
 00ee  00e1 0000  082c 00f1 00f1  0000 00  00 00 00 shared    c:os2char.dll
 00f2  01c9 0000  0824 0131 0131  0000 00  00 00 00 shared    c:display.dll
 00f3  00e3 0000  0838 00f1 00f1  0000 00  00 00 00 shared    c:os2char.dll
 00f4  00e4 0000  482c fff7 00f1  0000 00  00 00 00 giveget
 00f6  00e5 0000  082c 00fb 00fb  0000 00  00 00 00 shared    c:sesmgr.dll
 00fc  00e6 0000  082c 00fb 00fb  0000 00  00 00 00 shared    c:sesmgr.dll
 00fd  00e7 0000  0838 00fb 00fb  0000 00  00 00 00 shared    c:sesmgr.dll
 00fe  00e8 0000  0838 00fb 00fb  0000 00  00 00 00 shared    c:sesmgr.dll
 00ff  00e9 0000  082c 0100 0100  0000 00  00 00 00 shared    c:quecalls.dll
 0101  00ea 0000  082c 0100 0100  0000 00  00 00 00 shared    c:quecalls.dll
 0102  00eb 0000  082c 0100 0100  0000 00  00 00 00 shared    c:quecalls.dll
 0103  00ec 0000  0838 0100 0100  0000 00  00 00 00 shared    c:quecalls.dll
 0104  00ed 0000  0838 0100 0100  0000 00  00 00 00 shared    c:quecalls.dll
 0105  00ee 0000  0838 0100 0100  0000 00  00 00 00 shared    c:quecalls.dll
 0106  01cd 0000  1024 0091 0131  0000 00  00 00 00 priv 0003 c:pmshell.exe
 hob   har hobnxt flgs own  hmte  sown,cnt lt st xf
 0107  00f0 0000  0124 ffc4 0000  0000 00  00 00 00 smdfh
 0108  010f 0000  4a2c fff5 01b0  0000 00  00 00 00 give
 0109  0085 0000  0524 ff88 ff5b  0000 00  00 00 00 ptogdt    dd12
 010b  0084 0000  0524 ff88 ff5b  0000 00  00 00 00 ptogdt    dd12
 010c  0083 0000  0524 ff88 ff5b  0000 00  00 00 00 ptogdt    dd12
 010d  00f2 0000  0524 ff88 ff5b  0000 00  00 00 00 ptogdt    dd12
 .
 .
 .

#

>>> Many of these objects have a system ID owners but those of current
>>> interest are objects allocated within the shared and private arenas
>>> by application programs.

>>> Private arena private data:
>>> --------------------------

>>> We start by examining hob 10 in more detail.

>>> We list the object and its associated arena record using the 'c'
>>> parameter of .MO
# .moc 10

*har     par      cpg        va    flg next prev link hash hob   hal
 0087 %feb1fba4 00000010 %00070000 169 01a0 019a 0000 0000 0010 0000 hptda=0091
 hob   har hobnxt flgs own  hmte  sown,cnt lt st xf
 0010  0087 0000  402c 0091 019f  0000 00  00 00 00 priv 0003 c:pmshell.exe

>>> We can tell from its location (%70000) that this is a private
>>> arena address in process hptda=91. The 'own' field of the object
>>> record is also hob 91 which again implies an object owned by the
>>> process. That means the object is either a dynamic allocation or
>>> a non-shared segment of the EXE load module, for example it's
>>> stack segment.


# .mo 91
 hob       va     flgs own  hmte  sown,cnt lt st xf
 0091  %7b9c484c  8000 ffcb ff79  0000 00  00 00 00 ptda 0003 c:pmshell.exe

>>> This tells us the owner is a PTDA (that is, a process private arena)
>>> and the PID is 3, which is executing PMSHELL.EXE
>>> Note: the PID and executable have been extracted from hob 91 and
>>> displayed in the description area of hob 10.

>>> Now look at the hmte for hob 10.

# .mo 19f
 hob       va     flgs own  hmte  sown,cnt lt st xf
 019f  %fe8629e0  8000 ffa6 0000  0000 00  00 00 00 mte       c:pmwin.dll

>>> This is the MTE for pmwin.dll.

>>> The 'own' and 'hmte' of hob 10 tell us that hob 10 was allocated in
>>> the private arena of process PID 3 by pmwin.dll as a result of a
>>> direct or indirect call to pmwin from pmshell.

>>> The flags in hob 10 can give us more information on the
>>> characteristics of hob 10
>>> 4    0    2    c
    0100 0000 0010 1100
     '          '  ''
     '          '  ''. writeable
     '          '  '...user storage
     '          '......executable
     '.................API located

>>> The combination writeable + executable should be interpreted as
>>> R/W storage rather than executable storage. Looking at the page
>>> table entry for %7000 in slot 8 (pid 3) will confirm this:
# .s8
Current slot number: 0008
# .p8
 Slot  Pid  Ppid Csid Ord  Sta Pri  pTSD     pPTDA    pTCB     Disp SG Name
 0008  0003 0001 0003 0001 rdy 061f 7b7b6000 7b9c484c 7b9a8a70 1eb8 01 PMSHL32
# dp %70000
 linaddr   frame   pteframe  state res Dc Au CD WT Us rW Pn state
%00070000* 012f3  frame=0120d  0    0  D  A        U  W  P  pageable
%00070000  0120d  frame=0120d  0    0  D  A        U  W  P  pageable
#
>>> Private arena shared data:
>>> -------------------------

# .moc 192
*har     par      cpg        va    flg next prev link hash hob   hal
 0249 %feb22250 00000010 %00010000 1c9 024a 0247 014e 0000 0192 0000 hptda=02a6
 014e %feb20cbe 00000010 %00010000 1d9 014f 008e 0000 0000 0192 0000 hptda=0091
 hob   har hobnxt flgs own  hmte  sown,cnt lt st xf
 0192  0249 0000  0838 0193 0193  0000 00  00 00 00 shared    c:pmshell.exe

>>> Object 192 has two private arena records pointing to it. One
>>> associated with hptda=2a6 and the other with hptda=91. We established
>>> earlier that hptda=91 is pid 3 and was running pmshell.exe

#.mo 2a6
 hob       va     flgs own  hmte  sown,cnt lt st xf
 02a6  %7b9c60d0  8000 ffcb 0000  0000 00  00 00 00 ptda 0006 c:pmshell.exe

>>> So hptda=2a6 refers to pid 6, which is also running pmshell.exe
>>> Note the use of the 'link' field in har=249 to point to har=14e. The two
>>> arena records are chained in this way to link all arena records that
>>> share a private data object. The object record points to the head of
>>> the chain.

>>> The 'own' and 'hmte' fields both point to object 193. This tells us
>>> that object 193 is a shared segment of the load module whose
>>> handle is 193.
>>> This may be verified as follows...

#.mo 193
 hob       va     flgs own  hmte  sown,cnt lt st xf
 0193  %fe722dec  8000 ffa6 0000  0000 00  00 00 00 mte       c:pmshell.exe

# .lmo 193
hmte=0193 pmte=%fe722dec mflags=84903150 c:\os2\pmshell.exe
obj   vsize    vbase    flags   ipagemap cpagemap hob  sel
0001 00000600 00010000 80002025 00000001 00000001 0192 000f r-x shr big
0002 0000005c 00020000 80002003 00000002 00000001 0000 0017 rw- big
0003 0000fa20 00030000 80002003 00000003 00000001 0000 001f rw- big

>>> We actually discover this is object 1 of the pmshell.exe load
>>> module.

>>> Examining the flags from hob 192 we see:
>>> 0    8    3    8
>>> 0000 1000 0011 1000
>>>      '      '' '
>>>      '      '' '.... User storage
>>>      '      ''...... Readable
>>>      '      '....... Execuable
>>>      '.............. Shared
>>>
>>> This is information summarised in the description field of hob 192.

>>> Finally we take a look at the page table entries for %10000 in pid 3
>>> and 6. We should see the same real storage frame being accessed by
>>> both processes:
# .s8
Current slot number: 0008
# .p8
 Slot  Pid  Ppid Csid Ord  Sta Pri  pTSD     pPTDA    pTCB     Disp SG Name
 0008  0003 0001 0003 0001 rdy 061f 7b7b6000 7b9c484c 7b9a8a70 1eb8 01 PMSHL32
# dp %10000
 linaddr   frame   pteframe  state res Dc Au CD WT Us rW Pn state
%00010000* 012f3  frame=011cb  0    0  c  A        U  r  P  pageable
%00010000  011cb  frame=011cb  0    0  c  A        U  r  P  pageable
# .s 1f
Current slot number: 001f
# .p 1f
 Slot  Pid  Ppid Csid Ord  Sta Pri  pTSD     pPTDA    pTCB     Disp SG Name
 001f# 0006 0003 0006 0001 rdy 062f 7b7e4000 7b9c60d0 7b9ab1f8 1eb8 11 PMSHL32
# dp %10000
 linaddr   frame   pteframe  state res Dc Au CD WT Us rW Pn state
%00010000* 0093d  frame=011cb  0    0  c  A        U  r  P  pageable
%00010000  011cb  frame=011cb  0    0  c  A        U  r  P  pageable
#

>>> In both processes %00010000 translates to %%011cb000



>>> Shared Arena, Global Data:
>>> -------------------------

# .moc e6

*har     par      cpg        va    flg next prev link hash hob   hal
 00d9 %feb202b0 00000010 %1a060000 379 00d8 00da 0000 0000 00e6 0000  hco=0075d
 hob   har hobnxt flgs own  hmte  sown,cnt lt st xf
 00e6  00d9 0000  082c 00e5 00e5  0000 00  00 00 00 shared    c:doscall1.dll
 hco=075d pco=fe6804ec  hconext=0084c hptda=050c f=16  pid=0019 e:ipfc.exe
 hco=084c pco=fe680997  hconext=006de hptda=04c6 f=16  pid=0018 c:epm.exe
 hco=06de pco=fe680271  hconext=00660 hptda=049c f=16  pid=0013 d:ibmavsd.exe
 hco=0660 pco=fe67fffb  hconext=00497 hptda=0410 f=16  pid=0012 c:pmdraw.exe
 hco=0497 pco=fe67f70e  hconext=0036b hptda=0420 f=16  pid=0010 c:cmd.exe
 hco=036b pco=fe67f132  hconext=00327 hptda=0380 f=16  pid=000d c:pulse.exe
 hco=0327 pco=fe67efde  hconext=001a0 hptda=036c f=16  pid=000c c:dinfo.exe
 hco=01a0 pco=fe67e83b  hconext=002c6 hptda=034e f=16  pid=000b c:mrfile32.exe
 hco=02c6 pco=fe67edf9  hconext=0014c hptda=0317 f=16  pid=000a c:pmdiary.exe
 hco=014c pco=fe67e697  hconext=000a2 hptda=02a6 f=16  pid=0006 c:pmshell.exe
 hco=00a2 pco=fe67e345  hconext=00033 hptda=0205 f=16  pid=0004 c:harderr.exe
 hco=0033 pco=fe67e11a  hconext=00029 hptda=0091 f=16  pid=0003 c:pmshell.exe
 hco=0029 pco=fe67e0e8  hconext=00000 hptda=0169 f=16  pid=0002 c:logdaem.exe


>>> We can tell immediately that this is shared arena global data from the
>>> presence of hco= in the arena record. The hco is the handle to the
>>> context record. These record the hptda of the process that is accessing
>>> shared global data. Each of the VMCOs, that's sharing the same object
>>> is chained in a single linked list from the arena record.
>>> The description to the right of each VMCO is derived from the hptda object.

>>> Note: the .MC command formats a VMCO. Under the Dump Formatter the VMCO
>>> chain is not run to completion so we must run the chain
>>> manually by using the hconext= field as the VMCO chain pointer.

>>> The 'own' and 'hmte' fields being equal indicate that the object is
>>> part of DOSCALL1.DLL. We can check out which object in DOSCALL1 using
>>> .lmo

#.lmo e5
hmte=00e5 pmte=%fe72dfac mflags=8498b594 c:\os2\dll\doscall1.dll
obj   vsize    vbase    flags   ipagemap cpagemap hob  sel
0001 00001354 1a010000 80009025 00000001 00000002 00eb d00e r-x shr alias iopl
0002 0000ced0 1a020000 80002025 00000003 0000000d 00ea d017 r-x shr big
0003 00001928 1a030000 80001025 00000010 00000002 00e9 d01f r-x shr alias
0004 000002ce 1a040000 80001025 00000012 00000001 00e8 d027 r-x shr alias
0005 000054f8 1a050000 8000d025 00000013 00000006 00e7 d02e r-x shr alias conf iopl
0006 00000280 1a060000 80001023 00000019 00000001 00e6 d037 rw- shr alias
0007 00001b40 1a070000 80001003 0000001a 00000002 0000 d03f rw- alias

>>> hob e6 is load module object 6 of doscall1.dll. Furthermore it is a
>>> read/write object. We can illustrate this by looking at the page table
>>> entries for two of the processes that are accessing hob e6.

# .s8
Current slot number: 0008
# .p8 Slot  Pid  Ppid Csid Ord  Sta Pri  pTSD     pPTDA    pTCB     Disp SG Name
 0008# 0003 0001 0003 0001 rdy 061f 7b7b6000 7b9c484c 7b9a8a70 1eb8 01 PMSHL32
# dp %1a060000
 linaddr   frame   pteframe  state res Dc Au CD WT Us rW Pn state
%1a060000* 012fe  frame=00e1e  0    0  D  u        U  W  P  pageable
%1a060000  00e1e  frame=00e1e  0    0  D  u        U  W  P  pageable
# .s1f
Current slot number: 001f
# .p1f
 Slot  Pid  Ppid Csid Ord  Sta Pri  pTSD     pPTDA    pTCB     Disp SG Name
 001f# 0006 0003 0006 0001 rdy 062f 7b7e4000 7b9c60d0 7b9ab1f8 1eb8 11 PMSHL32
# dp %1a060000
 linaddr   frame   pteframe  state res Dc Au CD WT Us rW Pn state
%1a060000* 0093e  frame=00e1e  0    0  c  A        U  W  P  pageable
%1a060000  00e1e  frame=00e1e  0    0  c  A        U  W  P  pageable
#
>>> As expected the same page frame (00e1e) is being referenced.

>>> Note also: frame e1e of slot 8 is dirty (Dc=D) and unaccessed (Au=u)
>>> while in slot 1f it is clean and accessed. This tends to suggest
>>> that frame e1e and therefore page %1a060000 was most recently
>>> updated by slot 8 and read by slot 1f before the update took place.

>>> Shared Arena, Instance Data:
>>> ---------------------------

#.moc 5ef
*har     par      cpg        va    flg next prev link hash hob   hal
 01c6 %feb2170e 00000010 %1a890000 139 01c5 01c7 0000 0000 05ef 0000      =0000
 hob   har hobnxt flgs own  hmte  sown,cnt lt st xf
 05ef  01c6 04e8  0024 050c 0131  0000 00  00 00 00 priv 0019 e:ipfc.exe
 04e8  01c6 02ec  0024 04c6 0131  0000 00  00 00 00 priv 0018 c:epm.exe
 02ec  01c6 0457  0024 049c 0131  0000 00  00 00 00 priv 0013 d:ibmavsd.exe
 0457  01c6 0432  0024 0410 0131  0000 00  00 00 00 priv 0012 c:pmdraw.exe
 0432  01c6 03d6  0024 0420 0131  0000 00  00 00 00 priv 0010 c:cmd.exe
 03d6  01c6 0390  0024 0380 0131  0000 00  00 00 00 priv 000d c:pulse.exe
 0390  01c6 03c8  0024 036c 0131  0000 00  00 00 00 priv 000c c:dinfo.exe
 03c8  01c6 03a7  0024 034e 0131  0000 00  00 00 00 priv 000b c:mrfile32.exe
 03a7  01c6 02c7  0024 0317 0131  0000 00  00 00 00 priv 000a c:pmdiary.exe
 02c7  01c6 0112  0024 02a6 0131  0000 00  00 00 00 priv 0006 c:pmshell.exe
 0112  01c6 0000  0024 0091 0131  0000 00  00 00 00 priv 0003 c:pmshell.exe

>>> Object 5ef is an example of shared arena instance data. Each instance
>>> of the object has its own object record (VMOB), but they all share the
>>> same arena record. Each of these VMOBs is chained from the 'hob'
>>> field of the arena record via their 'hobnxt' field.
>>> The VMOBs appear as private arena objects, but the arena record
>>> does not point to a specific hptda, which distinguishes this case as
>>> shared instance data.

>>> As would be expected with shared instance data the owners would differ
>>> for each instance object. They are infact the hptda's for each owner.
>>> The hmte's we would expect to be common to all the VMOBs.

#.mo 131
 hob       va     flgs own  hmte  sown,cnt lt st xf
 0131  %fe860978  8000 ffa6 0127  0000 00  00 00 00 mte       c:display.dll

>>> So, %1a890000 has been allocated by display.dll

>>> Again we can illustrate that we are really looking at instance data by
>>> examining the page tables of two examples:

.s8
Current slot number: 0008
# .p8
 Slot  Pid  Ppid Csid Ord  Sta Pri  pTSD     pPTDA    pTCB     Disp SG Name
 0008# 0003 0001 0003 0001 rdy 061f 7b7b6000 7b9c484c 7b9a8a70 1eb8 01 PMSHL32
# dp %1a890000
 linaddr   frame   pteframe  state res Dc Au CD WT Us rW Pn state
%1a890000* 01291  frame=01066  0    0  D  u        s  W  P  pageable
%1a890000  01066  frame=01066  0    0  D  u        s  W  P  pageable
# .s1f
Current slot number: 001f
# .p1f
 Slot  Pid  Ppid Csid Ord  Sta Pri  pTSD     pPTDA    pTCB     Disp SG Name
 001f# 0006 0003 0006 0001 rdy 062f 7b7e4000 7b9c60d0 7b9ab1f8 1eb8 11 PMSHL32
# dp %1a890000
 linaddr   frame   pteframe  state res Dc Au CD WT Us rW Pn state
%1a890000* 0093c  frame=008e4  0    0  D  u        s  W  P  pageable
%1a890000  008e4  frame=008e4  0    0  D  u        s  W  P  pageable
#
>>> In PID 3, %1a890000 translates to physical address %01066000, but
>>> in PID 6, %1a890000 translates to physical address %008e4000.


[Back: Exploring Arena Records]
[Next: Finding Who Owns Memory]