📄 00000023.htm
字号:
描述 <br />.text <br /> 代码 <br />.rsrc <br /> 资源数据 <br />.data <br /> 数据 <br />.pdata <br /> 在代码部分每个函数的调试和异常处理信息 <br />.CRT <br /> 特殊部分——C++结构 <br />.KDATA <br /> 特殊部分——仅出现在核心当中(Nk.exe) <br />Romimage是一个命令行工具。从一个典型的Romimage部分输出的头几行包括:程序的标 <br />题、页面大小和MODULES部分的起始位置等。 <br />Windows CE ROM Image Builder v1.0 Copyright Microsoft 1995. <br />Copying d:\WINCE\release\odo2bpp.dll to d:\WINCE\release\ddi.dll for debugge <br />r. <br />Copying d:\WINCE\release\odo2bpp.pdb to d:\WINCE\release\ddi.pdb for debugge <br />r. <br />Setting PageSize to 1024 <br />DumpSymbols: pTOC found at00000e50 <br />MODULES Section <br />Module <br /> Section <br /> Start <br /> Length <br /> psize <br /> vsize <br /> Filler <br />nk.exe <br /> .text <br /> 8c600400h <br /> 116736 <br /> 116736 <br /> 116268 <br />nk.exe <br /> .pdata <br /> 8c61cc00h <br /> 4096 <br /> 4096 <br /> 3864 <br />coredll.dll <br /> .text <br /> 8c61dc00h <br /> 119808 <br /> 119296 <br /> 118987 <br />coredll.dll <br /> .rsrc <br /> 8c63b000h <br /> 1024 <br /> 1024 <br /> 528 <br /> 在MODULES部分的第一个条目,Nk.exe ,的大小为116268 = 0x1c62c字节。这个实 <br />际的大小被扩大到下一个1024字节的边界上,116736 = 0x1c800,并且被放置到ROM中。 <br />这便留下了一个468字节的“洞”,可以提供给其他文件使用。同样,在0x8c63b210地址 <br />处有一个496字节的“洞”,它出现在Coredll.dll .rsrc 部分的最后一个页面的末尾。 <br /> <br /> 在放置完所有的.text(代码)部分后,Romimage开始将小于一页的数据部分放置到 <br />这些“洞”中。例如,在稍后的MODULES部分中,相同的Romimage日志包含了下列信息: <br /> <br />Module <br /> Section <br /> Start <br /> Length <br /> psize <br /> vsize <br /> Filler <br />coredll.dll <br /> .data <br /> 8c61ca2ch <br /> 4 <br /> 4 <br /> 200 <br /> FILLER <br />coredll.dll <br /> .pdata <br /> 8cb32800h <br /> 4868 <br /> 4866 <br /> 8064 <br />filesys.exe <br /> .data <br /> 8cb33b04h <br /> 12236 <br /> 12234 <br /> 21376 <br />filesys.exe <br /> .pdata <br /> 8cb36ad0h <br /> 2152 <br /> 2149 <br /> 2640 <br />gwes.exe <br /> .data <br /> 8cb37338h <br /> 10796 <br /> 10794 <br /> 17828 <br />gwes.exe <br /> .pdata <br /> 8cb39d64h <br /> 12456 <br /> 12456 <br /> 15768 <br />device.exe <br /> .data <br /> 8c61ca30h <br /> 213 <br /> 213 <br /> 276 <br /> FILLER <br />device.exe <br /> .pdata <br /> 8c63b210h <br /> 341 <br /> 341 <br /> 424 <br /> FILLER <br />fatfs.dll <br /> .data <br /> 8c659c84h <br /> 366 <br /> 366 <br /> 504 <br /> FILLER <br />fatfs.dll <br /> .pdata <br /> 8cb3ce0ch <br /> 1324 <br /> 1322 <br /> 1624 <br />shell.exe <br /> .data <br /> 8cb3d338h <br /> 1608 <br /> 1605 <br /> 2864 <br />shell.exe <br /> .pdata <br /> 8c61cb05h <br /> 183 <br /> 183 <br /> 208 <br /> FILLER <br />Coredll.dll的第一个.data数据部分的大小是4字节,被放置在第一个可以使用的“洞” <br />中,0x8c600400 + 0x1c62c = 0x8c61ca2c 。它仅用了4个字节,将下一个要填充的地址 <br />移动到0x8c61ca30并将该“洞”缩小为464字节。 <br />下一个小于一页的.data数据部分是Device.exe的数据部分,它需要213 = 0xd5字节,而 <br />且在第一个“洞”剩余的空间足够容纳它。它被放置到此处,将地址变为0x8c61cb05, <br />将该“洞”缩小为251字节。 <br />device.exe .data 8c61ca30h 213 213 276 FILLER <br />Device.exe的.pdata部分为341字节,比这个“洞”剩余的空间大,因此它被放置到另一 <br />个“洞”—— Coredll.dll资源部分最后一个页面上的“洞”,起始位置是0x8c63b210 <br />。 <br />device.exe .pdata 8c63b210h 341 341 424 FILLER <br />接下来的.data或.pdata部分都比第一个“洞”剩余的251字节小,其中调试器命令解释 <br />器Shell.exe的.data部分为183字节。它被放于第一个“洞”的下一个有效的起始地址0 <br />x8c61cb05处。 <br />shell.exe .pdata 8c61cb05h 183 183 208 FILLER <br />Romimage工具按照这种方式继续工作直到所有的部分全都被放置好。任何剩下未被使用 <br />的“洞”都被列在报告中: <br />Unfilled ROM Holes(Address,Length): <br />8c9cfbf8h <br /> 8 8caef3f8h <br /> 8 8cb253f8h <br /> 8 8cb2bff8h <br /> 8 <br />8c769bf9h <br /> 7 8c8d4ffah <br /> 6 8c8f37fah <br /> 6 8c98dffah <br /> 6 <br />8cb16ffah <br /> 6 8cb1d7fah <br /> 6 8cb327fah <br /> 6 8c61dbfbh <br /> 5 <br />8c6e6ffbh <br /> 5 8c763ffbh <br /> 5 8c855ffbh <br /> 5 8c935bfbh <br /> 5 <br />8c9877fbh <br /> 5 8c7537fch <br /> 4 8c765bfch <br /> 4 8c7bcffch <br /> 4 <br />8c7d3bfch <br /> 4 8c80dbfch <br /> 4 8c82f3fch <br /> 4 8c8f27fch <br /> 4 <br />8c938ffch <br /> 4 8c9c17fch <br /> 4 8c9e23fch <br /> 4 8ca6e7fch <br /> 4 <br />8cacfbfch <br /> 4 8cb20bfch <br /> 4 8c61cbfdh <br /> 3 8c659ffdh <br /> 3 <br />8c6e13fdh <br /> 3 8c6e23fdh <br /> 3 8c6e87fdh <br /> 3 8c6ee7fdh <br /> 3 <br />8c63b3feh <br /> 2 8c74fffeh <br /> 2 8c785ffeh <br /> 2 8c7b8ffeh <br /> 2 <br />8c7c23feh <br /> 2 8c9717feh <br /> 2 8c99d7feh <br /> 2 8cb09ffeh <br /> 2 <br />8cb227feh <br /> 2 8c63afffh <br /> 1 8c65a3ffh <br /> 1 8c6ea7ffh <br /> 1 <br />8c788fffh <br /> 1 8c793fffh <br /> 1 8c9727ffh <br /> 1 8c9a8bffh <br /> 1 <br />8ca83bffh <br /> 1 8cacf7ffh <br /> 1 8cb047ffh <br /> 1 8cb0bfffh <br /> 1 <br /> 识别FILLER部分的能力是十分重要的,因为执行体和DLLs的大小和数量对于不同的 <br />配置有所不同。这将影响可使用的“洞”的大小,并影响所需的全部内存量。 <br /> 要确定每个模块的ROM使用情况,可以根据Romimage工具输出的该模块各部分的大小 <br />计算出总和——并且除去那些作为填充“漏洞”的部分。因为填充部分是被插入到可以 <br />使用的“洞”中的,所以它不会增加该模块的内存需求量。 <br />查看虚拟内存 <br /> 使用Memtool工具可以查看每个虚拟内存页面。Memtool提供了对每个进程都有效的 <br />32(MB)内存的一个完整映象。内存映象可以看出代码和数据是否在ROM或RAM。 <br /> Memtool还可以显示出当前堆栈使用情况的摘要。堆栈的大小可以根据需要动态增大 <br />或缩小。显示出的堆栈数可能并不代表最大需求量。它们描述了堆栈在使用Memtool工具 <br />检查时的状态。 <br /> 例如,Filesys.exe进程内存映象的头几行显示了各种不同的用法。每个符号表示一 <br />个内存页面并指示出该页面的使用情况: <br /> Memory usage for Process 8c056d2c: 'filesys.exe' pid 1 <br /> Slot base 04000000 Section ptr 8cfe4c00 <br /> 04000000(1): ----------------------r------------------------------------ <br />----- <br /> 04010000(0): -CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC <br />CCCCC <br /> 04020000(0): CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC <br />CCCCC <br /> 04030000(0): CCCCCCCCCCWWWWWWWWWWWWWWWWWWWWW---R <br /> 04040000(0): -------------------------------------------------SSS----SSS <br />S <br /> 04050000(0): PPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO <br />OOOOO <br /> 连字符(-)表示该页面被保留;小写r表示在RAM中的数据;大写C表示ROM中的代码; <br />大写W表示在RAM中的可读/写数据;大写R表示ROM中的数据;大写S表示堆栈;大写P表示 <br />外围设备的内存(不能被核心分配但是可以被Gwes或设备驱动程序映射);大写O表示目 <br />标存储设备。除了这些符号外,小写c表示正在RAM中执行的代码。 <br /> 在内存映象后,Memtool工具显示了摘要信息。类似的信息还可以用Ppsh工具和MI命 <br />令得到,这些信息显示如下: <br /> Memory usage for Process 8c036d2c: 'filesys.exe' pid 1 <br /> Slot base 04000000 Section ptr 8c5e7000 <br /> Page summary: code=207(0) datar/o=2 r/w=7 stack=1 reserved=13963 <br /> 在页面摘要中,code后面的值表示ROM中的页面数。圆括号中的数字表示了RAM中的 <br />页面数。数据页面中分别表示了只读或读/写页面数。Stack后面的值表示了堆栈所用的 <br />页面数。 <br /> 要得到其他微处理器和其他平台上的内存需求信息,可以使用ROM Image Builder、 <br />Ppsh或Memtool工具来查看它们的输出信息。这些工具的完整文档可以在Microsoft Win <br />dows CE Embedded Toolkit for Visual C++? 5.0中找到。 <br /> <br /> <br />-- <br />※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.61.53] <br /><a href="00000022.htm">上一篇</a><a href="javascript:history.go(-1)">返回上一页</a><a href="index.htm">回到目录</a><a href="#top">回到页首</a><a href="00000024.htm">下一篇</a></h1></center><center><h1>BBS 水木清华站∶精华区</h1></center></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -