开帖研究WINCE之EBOOT

[复制链接]
1982|3
 楼主| sxggj 发表于 2008-9-19 10:14 | 显示全部楼层 |阅读模式
void&nbsp;BootloaderMain&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ROMHDR&nbsp;*pRomHdr&nbsp;=&nbsp;NULL;&nbsp;&nbsp;//&nbsp;pTOC&nbsp;for&nbsp;NK&nbsp;image.&nbsp;MUST&nbsp;COPY&nbsp;IT&nbsp;OR&nbsp;CLEANBOOT&nbsp;may&nbsp;erase&nbsp;it<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwAction,&nbsp;dwpToc;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwImageStart&nbsp;=&nbsp;0,&nbsp;dwImageLength&nbsp;=&nbsp;0,&nbsp;dwLaunchAddr&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bDownloaded&nbsp;=&nbsp;FALSE;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;relocate&nbsp;globals&nbsp;to&nbsp;RAM<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!KernelRelocate&nbsp;(pTOC))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;spin&nbsp;forever<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HALT&nbsp;(BLERR_KERNELRELOCATE);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />**********************************<br />static&nbsp;BOOL&nbsp;KernelRelocate&nbsp;(ROMHDR&nbsp;*const&nbsp;pTOC)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;loop;<br />&nbsp;&nbsp;&nbsp;&nbsp;COPYentry&nbsp;*cptr;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pTOC&nbsp;==&nbsp;(ROMHDR&nbsp;*const)&nbsp;-1)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;FALSE;&nbsp;//&nbsp;spin&nbsp;forever!<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;This&nbsp;is&nbsp;where&nbsp;the&nbsp;data&nbsp;sections&nbsp;become&nbsp;valid...&nbsp;don't&nbsp;read&nbsp;globals&nbsp;until&nbsp;after&nbsp;this<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(loop&nbsp;=&nbsp;0;&nbsp;loop&nbsp;&lt&nbsp;pTOC-&gtulCopyEntries;&nbsp;loop++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cptr&nbsp;=&nbsp;(COPYentry&nbsp;*)(pTOC-&gtulCopyOffset&nbsp;+&nbsp;loop*sizeof(COPYentry));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(cptr-&gtulCopyLen)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy((LPVOID)cptr-&gtulDest,(LPVOID)cptr-&gtulSource,cptr-&gtulCopyLen);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(cptr-&gtulCopyLen&nbsp;!=&nbsp;cptr-&gtulDestLen)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset((LPVOID)(cptr-&gtulDest+cptr-&gtulCopyLen),0,cptr-&gtulDestLen-cptr-&gtulCopyLen);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;TRUE;<br />}<br />**********************************<br />第一个问题:ROMHDR结构体内容分析:<br />typedef&nbsp;struct&nbsp;ROMHDR&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;dllfirst;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;first&nbsp;DLL&nbsp;address<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;dlllast;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;last&nbsp;DLL&nbsp;address<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;physfirst;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;first&nbsp;physical&nbsp;address<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;physlast;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;highest&nbsp;physical&nbsp;address<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;nummods;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;number&nbsp;of&nbsp;TOCentry's<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulRAMStart;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;start&nbsp;of&nbsp;RAM<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulRAMFree;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;start&nbsp;of&nbsp;RAM&nbsp;free&nbsp;space<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulRAMEnd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;end&nbsp;of&nbsp;RAM<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulCopyEntries;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;number&nbsp;of&nbsp;copy&nbsp;section&nbsp;entries<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulCopyOffset;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;offset&nbsp;to&nbsp;copy&nbsp;section<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulProfileLen;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;length&nbsp;of&nbsp;PROFentries&nbsp;RAM&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulProfileOffset;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;offset&nbsp;to&nbsp;PROFentries<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;numfiles;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;number&nbsp;of&nbsp;FILES<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulKernelFlags;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;optional&nbsp;kernel&nbsp;flags&nbsp;from&nbsp;ROMFLAGS&nbsp;.bib&nbsp;config&nbsp;option<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulFSRamPercent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Percentage&nbsp;of&nbsp;RAM&nbsp;used&nbsp;for&nbsp;filesystem&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;from&nbsp;FSRAMPERCENT&nbsp;.bib&nbsp;config&nbsp;option<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;byte&nbsp;0&nbsp;=&nbsp;#4K&nbsp;chunks/Mbyte&nbsp;of&nbsp;RAM&nbsp;for&nbsp;filesystem&nbsp;0-2Mbytes&nbsp;0-255<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;byte&nbsp;1&nbsp;=&nbsp;#4K&nbsp;chunks/Mbyte&nbsp;of&nbsp;RAM&nbsp;for&nbsp;filesystem&nbsp;2-4Mbytes&nbsp;0-255<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;byte&nbsp;2&nbsp;=&nbsp;#4K&nbsp;chunks/Mbyte&nbsp;of&nbsp;RAM&nbsp;for&nbsp;filesystem&nbsp;4-6Mbytes&nbsp;0-255<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;byte&nbsp;3&nbsp;=&nbsp;#4K&nbsp;chunks/Mbyte&nbsp;of&nbsp;RAM&nbsp;for&nbsp;filesystem&nbsp;&gt&nbsp;6Mbytes&nbsp;0-255<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulDrivglobStart;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;device&nbsp;driver&nbsp;global&nbsp;starting&nbsp;address<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulDrivglobLen;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;device&nbsp;driver&nbsp;global&nbsp;length<br />&nbsp;&nbsp;&nbsp;&nbsp;USHORT&nbsp;&nbsp;usCPUType;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;CPU&nbsp;(machine)&nbsp;Type<br />&nbsp;&nbsp;&nbsp;&nbsp;USHORT&nbsp;&nbsp;usMiscFlags;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Miscellaneous&nbsp;flags<br />&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;pExtensions;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;pointer&nbsp;to&nbsp;ROM&nbsp;Header&nbsp;extensions<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulTrackingStart;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;tracking&nbsp;memory&nbsp;starting&nbsp;address<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulTrackingLen;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;tracking&nbsp;memory&nbsp;ending&nbsp;address<br />}&nbsp;ROMHDR;
 楼主| sxggj 发表于 2008-9-19 10:58 | 显示全部楼层

关于COPYentry

//&nbsp;&nbsp;Copy&nbsp;Section&nbsp;Structure<br />//<br />#ifdef&nbsp;ASM_ONLY<br />#define&nbsp;COPYentry_ulSource&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />#define&nbsp;COPYentry_ulDest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<br />#define&nbsp;COPYentry_ulCopyLen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8<br />#define&nbsp;COPYentry_ulDestLen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12<br />#define&nbsp;SIZEOF_COPYentry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16<br />#else<br />typedef&nbsp;struct&nbsp;COPYentry&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulSource;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;copy&nbsp;source&nbsp;address<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulDest;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;copy&nbsp;destination&nbsp;address<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulCopyLen;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;copy&nbsp;length<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;ulDestLen;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;copy&nbsp;destination&nbsp;length&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;(zero&nbsp;fill&nbsp;to&nbsp;end&nbsp;if&nbsp;&gt&nbsp;ulCopyLen)<br />}&nbsp;COPYentry;<br />#endif
 楼主| sxggj 发表于 2008-9-19 12:28 | 显示全部楼层

memcpy与memset

void&nbsp;*memcpy(&nbsp;void&nbsp;*dest,&nbsp;const&nbsp;void&nbsp;*src,&nbsp;size_t&nbsp;count&nbsp;);<br />void&nbsp;*memset(&nbsp;void&nbsp;*dest,&nbsp;int&nbsp;c,&nbsp;size_t&nbsp;count&nbsp;);<br />这两个函数只有参数说明,没有源码,因为这部分属于操作系统内核部分,而且微软并未公布源码,只能看汇编
发表于 2008-9-19 16:49 | 显示全部楼层

ding...

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

230

主题

1397

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部