Extending /proc/*/maps

Ryan Johnson ryan.johnson@cs.utoronto.ca
Tue Apr 19 15:38:00 GMT 2011


Hi all,

While trying to diagnose the problems with DLL placement during fork(), 
I extended the implementation of the procfs maps file to be much more 
complete, because I noticed the existing one was not showing even close 
to everything that was going on (comparison below).

The official version can be summarized as follows:
- It lists a subset of loaded dlls, as well as cygwin-mapped files. No 
other memory is shown.
- Each mapped image or file has only one entry, with the listed 
permissions coming from the last mapped page in the file.
- It calls GetWorkingSet, which retrieves an entry for every mapped page 
but ignores addresses which are only reserved.
- It also calls GetModuleInformation and GetModuleFileNameExW to learn 
about loaded DLLs.

My version:
- Uses VirtualQueryEx to identify all memory segments (reserved or 
mapped), identifying those belonging to heap or shared memory
- Lists all loaded dlls and all mapped files, using GetMappedFileNameW
- Uses CreateToolhelp32Snapshot to identify heap segments

I'm not sending a patch because I haven't (yet) signed the copyright 
release form, but if people are interested I will do so. Otherwise, I'll 
keep using it to debug but not bother cygwin-patches.

BTW, /cygdrive/c/Windows/System32/locale.nls seems to be the reason that 
even statically linked dlls don't always load in the same place twice in 
a row.

Thoughts?
Ryan

Upstream cygwin output:
> $ cat /proc/self/maps
> 00400000-00414000 r-xs 00401000 2C36:17C8 281474977270964     
> /usr/bin/cat.exe
> 775E0000-77760000 r-xs 00000000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 75650000-75760000 r-xs 756632D3 2C36:17C8 281474976927037     
> /cygdrive/c/Windows/syswow64/kernel32.dll
> 75350000-75396000 r-xs 75357478 2C36:17C8 281474976925120     
> /cygdrive/c/Windows/syswow64/KERNELBASE.dll
> 61000000-61450000 r-xs 6106F960 2C36:17C8 844424930325032     
> /usr/bin/cygwin1.dll
> 75A60000-75B00000 r-xs 75A749E5 2C36:17C8 281474976927159     
> /cygdrive/c/Windows/syswow64/ADVAPI32.DLL
> 75050000-750FC000 rw-p 7505A472 2C36:17C8 281474976749314     
> /cygdrive/c/Windows/syswow64/msvcrt.dll
> 76840000-76859000 r-xs 76844975 2C36:17C8 281474976749841     
> /cygdrive/c/Windows/SysWOW64/sechost.dll
> 76750000-76840000 r-xs 76760569 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/syswow64/RPCRT4.dll
> 74CD0000-74D30000 r-xs 74CEA3B3 2C36:17C8 281474976924512     
> /cygdrive/c/Windows/syswow64/SspiCli.dll
> 74CC0000-74CCC000 r-xs 74CC10E1 2C36:17C8 281474976748415     
> /cygdrive/c/Windows/syswow64/CRYPTBASE.dll
> 6C5F0000-6C6EA000 rw-s 6C606930 2C36:17C8 281474977291653     
> /usr/bin/cygiconv-2.dll
> 67F00000-67F0F000 rw-s 67F08920 2C36:17C8 562949954003711     
> /usr/bin/cyggcc_s-1.dll
> 73FA0000-73FAD000 r-xs 73FA6030 2C36:17C8 281474977291659     
> /usr/bin/cygintl-8.dll
> 76980000-76985000 rw-p 76981438 2C36:17C8 281474976749672     
> /cygdrive/c/Windows/system32/psapi.dll

The new version:
> $ cat /proc/self/maps
> 00010000-00020000 rw-p 00000000 0000:0000 0                   [shared]
> 00020000-00030000 rw-p 00000000 0000:0000 0                   [shared]
> 00030000-00031000 rw-p 00000000 0000:0000 0                   [shared]
> 00040000-00041000 r--p 00000000 2C36:17C8 281474976748229     
> /cygdrive/c/Windows/System32/apisetschema.dll
> 00050000-00089000 ---p 00000000 0000:0000 0
> 00089000-0008C000 rw-s 00039000 0000:0000 0
> 0008C000-00090000 rw-p 0003C000 0000:0000 0
> 00090000-0027B000 ---p 00000000 0000:0000 0
> 0027B000-0027C000 rw-s 001EB000 0000:0000 0
> 0027C000-00290000 rw-p 001EC000 0000:0000 0
> 00290000-00294000 r--p 00000000 0000:0000 0                   [shared]
> 002A0000-002A1000 rw-p 00000000 0000:0000 0
> 002B0000-00317000 r--p 00000000 2C36:17C8 281474976927380     
> /cygdrive/c/Windows/System32/locale.nls
> 00320000-00326000 rw-p 00000000 0000:0000 0
> 00326000-003A0000 ---p 00006000 0000:0000 0
> 003D9000-003DC000 rw-s 00039000 0000:0000 0
> 003DC000-003E0000 rw-p 0003C000 0000:0000 0
> 00400000-00401000 r--p 00000000 2C36:17C8 281474977525743     
> /usr/bin/cat.exe
> 00401000-0040F000 r-xp 00001000 2C36:17C8 281474977525743     
> /usr/bin/cat.exe
> 0040F000-00410000 rw-p 0000F000 2C36:17C8 281474977525743     
> /usr/bin/cat.exe
> 00490000-004C9000 rw-p 00000000 0000:0000 0                   [heap]
> 004C9000-00590000 ---p 00039000 0000:0000 0                   [heap]
> 006D0000-006D3000 rw-p 00000000 0000:0000 0                   [heap]
> 006D3000-006E0000 ---p 00003000 0000:0000 0                   [heap]
> 00AE0000-00B50000 rw-p 00400000 0000:0000 0                   [heap]
> 00B50000-18AE0000 ---p 00470000 0000:0000 0
> 18CDB000-18CDC000 rw-s 001FB000 0000:0000 0
> 18CDC000-18CE0000 rw-p 001FC000 0000:0000 0
> 60FB0000-60FB8000 rw-p 00000000 0000:0000 0                   [shared]
> 60FC0000-60FC5000 rw-p 00000000 0000:0000 0                   [shared]
> 60FE0000-60FF1000 rw-p 00000000 0000:0000 0                   [shared]
> 61000000-61001000 r--p 00000000 2C36:17C8 1125899907652206    
> /usr/bin/cygwin1.dll
> 61001000-61162000 r-xp 00001000 2C36:17C8 1125899907652206    
> /usr/bin/cygwin1.dll
> 61162000-61164000 rwxp 00162000 2C36:17C8 1125899907652206    
> /usr/bin/cygwin1.dll
> 61164000-61165000 rw-p 00164000 2C36:17C8 1125899907652206    
> /usr/bin/cygwin1.dll
> 61184000-611E2000 r--p 00184000 2C36:17C8 1125899907652206    
> /usr/bin/cygwin1.dll
> 611E2000-611E3000 rw-p 001E2000 2C36:17C8 1125899907652206    
> /usr/bin/cygwin1.dll
> 61217000-61221000 r--p 00217000 2C36:17C8 1125899907652206    
> /usr/bin/cygwin1.dll
> 61221000-61222000 rw-p 00221000 2C36:17C8 1125899907652206    
> /usr/bin/cygwin1.dll
> 61222000-6123B000 r--p 00222000 2C36:17C8 1125899907652206    
> /usr/bin/cygwin1.dll
> 6123B000-61246000 rw-p 0023B000 2C36:17C8 1125899907652206    
> /usr/bin/cygwin1.dll
> 61246000-61247000 r--p 00246000 2C36:17C8 1125899907652206    
> /usr/bin/cygwin1.dll
> 61247000-61248000 rw-p 00247000 2C36:17C8 1125899907652206    
> /usr/bin/cygwin1.dll
> 674C0000-674C1000 r--p 00000000 2C36:17C8 281474977544257     
> /usr/bin/cygiconv-2.dll
> 674C1000-674D7000 r-xp 00001000 2C36:17C8 281474977544257     
> /usr/bin/cygiconv-2.dll
> 674D7000-674D8000 rw-p 00017000 2C36:17C8 281474977544257     
> /usr/bin/cygiconv-2.dll
> 675B6000-675B7000 r--p 000F6000 2C36:17C8 281474977544257     
> /usr/bin/cygiconv-2.dll
> 675B7000-675B8000 rw-p 000F7000 2C36:17C8 281474977544257     
> /usr/bin/cygiconv-2.dll
> 675B9000-675BA000 r--p 000F9000 2C36:17C8 281474977544257     
> /usr/bin/cygiconv-2.dll
> 67F00000-67F01000 r--p 00000000 2C36:17C8 281474977543786     
> /usr/bin/cyggcc_s-1.dll
> 67F01000-67F09000 r-xp 00001000 2C36:17C8 281474977543786     
> /usr/bin/cyggcc_s-1.dll
> 67F09000-67F0A000 rw-p 00009000 2C36:17C8 281474977543786     
> /usr/bin/cyggcc_s-1.dll
> 67F0C000-67F0D000 r--p 0000C000 2C36:17C8 281474977543786     
> /usr/bin/cyggcc_s-1.dll
> 67F0D000-67F0E000 rw-p 0000D000 2C36:17C8 281474977543786     
> /usr/bin/cyggcc_s-1.dll
> 67F0E000-67F0F000 r--p 0000E000 2C36:17C8 281474977543786     
> /usr/bin/cyggcc_s-1.dll
> 6F5C0000-6F5C1000 r--p 00000000 2C36:17C8 281474977544263     
> /usr/bin/cygintl-8.dll
> 6F5C1000-6F5C7000 r-xp 00001000 2C36:17C8 281474977544263     
> /usr/bin/cygintl-8.dll
> 6F5C7000-6F5C8000 rw-p 00007000 2C36:17C8 281474977544263     
> /usr/bin/cygintl-8.dll
> 6F5C8000-6F5C9000 r--p 00008000 2C36:17C8 281474977544263     
> /usr/bin/cygintl-8.dll
> 6F5C9000-6F5CA000 rw-p 00009000 2C36:17C8 281474977544263     
> /usr/bin/cygintl-8.dll
> 6F5CA000-6F5CB000 r--p 0000A000 2C36:17C8 281474977544263     
> /usr/bin/cygintl-8.dll
> 6F5CB000-6F5CC000 rw-p 0000B000 2C36:17C8 281474977544263     
> /usr/bin/cygintl-8.dll
> 6F5CC000-6F5CD000 r--p 0000C000 2C36:17C8 281474977544263     
> /usr/bin/cygintl-8.dll
> 73420000-73421000 r--p 00000000 0000:0000 0                   
> /cygdrive/c/Windows/System32/wow64cpu.dll
> 73421000-73424000 r-xp 00001000 0000:0000 0                   
> /cygdrive/c/Windows/System32/wow64cpu.dll
> 73424000-73425000 rw-p 00004000 0000:0000 0                   
> /cygdrive/c/Windows/System32/wow64cpu.dll
> 73425000-73428000 r--p 00005000 0000:0000 0                   
> /cygdrive/c/Windows/System32/wow64cpu.dll
> 73430000-73431000 r--p 00000000 0000:0000 0                   
> /cygdrive/c/Windows/System32/wow64win.dll
> 73431000-7347E000 r-xp 00001000 0000:0000 0                   
> /cygdrive/c/Windows/System32/wow64win.dll
> 7347E000-7347F000 rw-p 0004E000 0000:0000 0                   
> /cygdrive/c/Windows/System32/wow64win.dll
> 73483000-7348C000 r--p 00053000 0000:0000 0                   
> /cygdrive/c/Windows/System32/wow64win.dll
> 73490000-73491000 r--p 00000000 0000:0000 0                   
> /cygdrive/c/Windows/System32/wow64.dll
> 73491000-734C9000 r-xp 00001000 0000:0000 0                   
> /cygdrive/c/Windows/System32/wow64.dll
> 734C9000-734CB000 rw-p 00039000 0000:0000 0                   
> /cygdrive/c/Windows/System32/wow64.dll
> 734CB000-734CF000 r--p 0003B000 0000:0000 0                   
> /cygdrive/c/Windows/System32/wow64.dll
> 74CC0000-74CC1000 r--p 00000000 2C36:17C8 281474976748415     
> /cygdrive/c/Windows/SysWOW64/cryptbase.dll
> 74CC1000-74CC9000 r-xp 00001000 2C36:17C8 281474976748415     
> /cygdrive/c/Windows/SysWOW64/cryptbase.dll
> 74CC9000-74CCA000 rw-p 00009000 2C36:17C8 281474976748415     
> /cygdrive/c/Windows/SysWOW64/cryptbase.dll
> 74CCA000-74CCC000 r--p 0000A000 2C36:17C8 281474976748415     
> /cygdrive/c/Windows/SysWOW64/cryptbase.dll
> 74CD0000-74CD1000 r--p 00000000 2C36:17C8 281474976924512     
> /cygdrive/c/Windows/SysWOW64/sspicli.dll
> 74CD1000-74CE0000 ---p 00001000 2C36:17C8 281474976924512     
> /cygdrive/c/Windows/SysWOW64/sspicli.dll
> 74CE0000-74CF6000 r-xp 00010000 2C36:17C8 281474976924512     
> /cygdrive/c/Windows/SysWOW64/sspicli.dll
> 74CF6000-74D00000 ---p 00026000 2C36:17C8 281474976924512     
> /cygdrive/c/Windows/SysWOW64/sspicli.dll
> 74D00000-74D01000 rw-p 00030000 2C36:17C8 281474976924512     
> /cygdrive/c/Windows/SysWOW64/sspicli.dll
> 74D01000-74D10000 ---p 00031000 2C36:17C8 281474976924512     
> /cygdrive/c/Windows/SysWOW64/sspicli.dll
> 74D10000-74D11000 r--p 00040000 2C36:17C8 281474976924512     
> /cygdrive/c/Windows/SysWOW64/sspicli.dll
> 74D11000-74D20000 ---p 00041000 2C36:17C8 281474976924512     
> /cygdrive/c/Windows/SysWOW64/sspicli.dll
> 74D20000-74D22000 r--p 00050000 2C36:17C8 281474976924512     
> /cygdrive/c/Windows/SysWOW64/sspicli.dll
> 74D22000-74D30000 ---p 00052000 2C36:17C8 281474976924512     
> /cygdrive/c/Windows/SysWOW64/sspicli.dll
> 75050000-75051000 r--p 00000000 2C36:17C8 281474976749314     
> /cygdrive/c/Windows/SysWOW64/msvcrt.dll
> 75051000-750F0000 r-xp 00001000 2C36:17C8 281474976749314     
> /cygdrive/c/Windows/SysWOW64/msvcrt.dll
> 750F0000-750F1000 rw-p 000A0000 2C36:17C8 281474976749314     
> /cygdrive/c/Windows/SysWOW64/msvcrt.dll
> 750F7000-750FC000 r--p 000A7000 2C36:17C8 281474976749314     
> /cygdrive/c/Windows/SysWOW64/msvcrt.dll
> 75350000-75351000 r--p 00000000 2C36:17C8 281474976925120     
> /cygdrive/c/Windows/SysWOW64/KernelBase.dll
> 75351000-75390000 r-xp 00001000 2C36:17C8 281474976925120     
> /cygdrive/c/Windows/SysWOW64/KernelBase.dll
> 75390000-75392000 rw-p 00040000 2C36:17C8 281474976925120     
> /cygdrive/c/Windows/SysWOW64/KernelBase.dll
> 75392000-75396000 r--p 00042000 2C36:17C8 281474976925120     
> /cygdrive/c/Windows/SysWOW64/KernelBase.dll
> 75650000-75651000 r--p 00000000 2C36:17C8 281474976927037     
> /cygdrive/c/Windows/SysWOW64/kernel32.dll
> 75651000-75660000 ---p 00001000 2C36:17C8 281474976927037     
> /cygdrive/c/Windows/SysWOW64/kernel32.dll
> 75660000-75721000 r-xp 00010000 2C36:17C8 281474976927037     
> /cygdrive/c/Windows/SysWOW64/kernel32.dll
> 75721000-75730000 ---p 000D1000 2C36:17C8 281474976927037     
> /cygdrive/c/Windows/SysWOW64/kernel32.dll
> 75730000-75731000 rw-p 000E0000 2C36:17C8 281474976927037     
> /cygdrive/c/Windows/SysWOW64/kernel32.dll
> 75732000-75740000 ---p 000E2000 2C36:17C8 281474976927037     
> /cygdrive/c/Windows/SysWOW64/kernel32.dll
> 75740000-75741000 r--p 000F0000 2C36:17C8 281474976927037     
> /cygdrive/c/Windows/SysWOW64/kernel32.dll
> 75741000-75750000 ---p 000F1000 2C36:17C8 281474976927037     
> /cygdrive/c/Windows/SysWOW64/kernel32.dll
> 75750000-7575B000 r--p 00100000 2C36:17C8 281474976927037     
> /cygdrive/c/Windows/SysWOW64/kernel32.dll
> 7575B000-75760000 ---p 0010B000 2C36:17C8 281474976927037     
> /cygdrive/c/Windows/SysWOW64/kernel32.dll
> 75A60000-75A61000 r--p 00000000 2C36:17C8 281474976927159     
> /cygdrive/c/Windows/SysWOW64/advapi32.dll
> 75A61000-75AD3000 r-xp 00001000 2C36:17C8 281474976927159     
> /cygdrive/c/Windows/SysWOW64/advapi32.dll
> 75AD3000-75AD4000 rw-p 00073000 2C36:17C8 281474976927159     
> /cygdrive/c/Windows/SysWOW64/advapi32.dll
> 75AD7000-75B00000 r--p 00077000 2C36:17C8 281474976927159     
> /cygdrive/c/Windows/SysWOW64/advapi32.dll
> 76750000-76751000 r--p 00000000 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/SysWOW64/rpcrt4.dll
> 76751000-76760000 ---p 00001000 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/SysWOW64/rpcrt4.dll
> 76760000-767F6000 r-xp 00010000 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/SysWOW64/rpcrt4.dll
> 767F6000-76800000 ---p 000A6000 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/SysWOW64/rpcrt4.dll
> 76800000-76803000 r-xp 000B0000 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/SysWOW64/rpcrt4.dll
> 76803000-76810000 ---p 000B3000 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/SysWOW64/rpcrt4.dll
> 76810000-76811000 rw-p 000C0000 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/SysWOW64/rpcrt4.dll
> 76811000-76820000 ---p 000C1000 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/SysWOW64/rpcrt4.dll
> 76820000-76824000 r--p 000D0000 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/SysWOW64/rpcrt4.dll
> 76824000-76830000 ---p 000D4000 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/SysWOW64/rpcrt4.dll
> 76830000-76835000 r--p 000E0000 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/SysWOW64/rpcrt4.dll
> 76835000-76840000 ---p 000E5000 2C36:17C8 281474976924963     
> /cygdrive/c/Windows/SysWOW64/rpcrt4.dll
> 76840000-76841000 r--p 00000000 2C36:17C8 281474976749841     
> /cygdrive/c/Windows/SysWOW64/sechost.dll
> 76841000-76854000 r-xp 00001000 2C36:17C8 281474976749841     
> /cygdrive/c/Windows/SysWOW64/sechost.dll
> 76854000-76855000 rw-p 00014000 2C36:17C8 281474976749841     
> /cygdrive/c/Windows/SysWOW64/sechost.dll
> 76857000-76859000 r--p 00017000 2C36:17C8 281474976749841     
> /cygdrive/c/Windows/SysWOW64/sechost.dll
> 76980000-76981000 r--p 00000000 2C36:17C8 281474976749672     
> /cygdrive/c/Windows/SysWOW64/psapi.dll
> 76981000-76982000 r-xp 00001000 2C36:17C8 281474976749672     
> /cygdrive/c/Windows/SysWOW64/psapi.dll
> 76982000-76983000 rw-p 00002000 2C36:17C8 281474976749672     
> /cygdrive/c/Windows/SysWOW64/psapi.dll
> 76983000-76985000 r--p 00003000 2C36:17C8 281474976749672     
> /cygdrive/c/Windows/SysWOW64/psapi.dll
> 76D20000-76E1A000 ---p 00000000 0000:0000 0
> 77190000-772AF000 ---p 00000000 0000:0000 0
> 77400000-77401000 r--p 00000000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/System32/ntdll.dll
> 77401000-77503000 r-xp 00001000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/System32/ntdll.dll
> 77503000-77532000 r--p 00103000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/System32/ntdll.dll
> 77532000-77533000 rw-p 00132000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/System32/ntdll.dll
> 7753E000-775A9000 r--p 0013E000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/System32/ntdll.dll
> 775E0000-775E1000 r--p 00000000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 775E1000-775F0000 ---p 00001000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 775F0000-776C6000 r-xp 00010000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 776C6000-776D0000 ---p 000E6000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 776D0000-776D1000 r-xp 000F0000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 776D1000-776E0000 ---p 000F1000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 776E0000-776E1000 rw-p 00100000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 776E9000-776F0000 ---p 00109000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 776F0000-77747000 r--p 00110000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 77747000-77750000 ---p 00167000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 77750000-77755000 r--p 00170000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 77755000-77760000 ---p 00175000 2C36:17C8 281474976927378     
> /cygdrive/c/Windows/SysWOW64/ntdll.dll
> 7EFB0000-7EFD3000 r--p 00000000 0000:0000 0                   [shared]
> 7EFD8000-7EFDB000 rw-p 00000000 0000:0000 0
> 7EFDB000-7EFDE000 rw-p 00000000 0000:0000 0
> 7EFDE000-7EFDF000 rw-p 00000000 0000:0000 0
> 7EFDF000-7EFE0000 rw-p 00000000 0000:0000 0
> 7EFE0000-7EFE5000 r--p 00000000 0000:0000 0                   [shared]
> 7EFE5000-7F0E0000 ---p 00005000 0000:0000 0                   [shared]
> 7FFE0000-7FFE1000 r--p 00000000 0000:0000 0
> 7FFE1000-7FFF0000 ---p 00001000 0000:0000 0



More information about the Cygwin-developers mailing list