<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>HoppeRx - the cure for your ailing device : mapfile</title><link>http://blogs.msdn.com/hopperx/archive/tags/mapfile/default.aspx</link><description>Tags: mapfile</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Map File Breakpoints</title><link>http://blogs.msdn.com/hopperx/archive/2007/02/14/map-file-breakpoints.aspx</link><pubDate>Wed, 14 Feb 2007 17:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1676674</guid><dc:creator>shende</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/hopperx/comments/1676674.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hopperx/commentrss.aspx?PostID=1676674</wfw:commentRss><description>&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;While debugging, I am often faced with trying to set breakpoints in module code that I do not control. Said modules rarely have current symbols and access to source files either not possible or practical. I usually face these issues armed only with a call stack and a [possibly ancient] map file in which to determine the root cause of the error. I like to convince myself that single-stepping through code would be too easy and debugging ASM to find the problem makes things more interesting. Sometimes it works.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;To get started, you need to guess where it is you would like to go – if you have a call stack, this is the function name at the top of the list. First try to set this breakpoint in the breakpoint window using the following format:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE class=Section1&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;{,,ModuleName.dll} FunctionName&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Please note that the FunctionName &lt;B&gt;&lt;I&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;is&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt; case sensitive, but the ModuleName is not. If you run through your repro and the debugger did not break, we need to dig a little deeper and make sure we are actually using the correct module name. First, load the Platform Builder “Modules” window (View-&amp;gt;Debug-&amp;gt;Modules) and look for the module name in the list – remember that during makeimg, modules will often be renamed as they are added to the ROM. If you are certain of the module name, lets find the “base” of this module by breaking at DllMain (or WinMain for EXE’s).&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE class=Section1&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;{,,ModuleName.DLL} DllMain&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Or&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE class=Section1&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;{,,ModuleName.EXE} WinMain&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;DllMain is often a convenient breakpoint since it is called often, not just on load/unload. Once we are stopped at DllMain, the ease of finding other breakpoints within this module will depend on how old your map file is. If the module has undergone significant changes, the below may not work, but in my experience map files are usually “close enough” to get what you need. Open the map file and find the function you are trying to break at:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;
&lt;DIV class=Section1 style="BORDER-TOP: #fefefe 2px solid; MARGIN-LEFT: 25px; WORD-BREAK: keep-all; POSITION: relative; BACKGROUND-COLOR: #cccccc" ;&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;...&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;0001:0002fab4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?ParseGetCallerIdSettings@@YAJPBDAAPAXAAI@Z"&gt;?ParseGetCallerIdSettings@@YAJPBDAAPAXAAI@Z&lt;/A&gt; 10030ab4 f&amp;nbsp;&amp;nbsp; supsvc.obj&lt;BR&gt;&amp;nbsp;0001:0002fdd4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?ParseGetHideIdSettings@@YAJPBDAAPAXAAI@Z"&gt;?ParseGetHideIdSettings@@YAJPBDAAPAXAAI@Z&lt;/A&gt; 10030dd4 f&amp;nbsp;&amp;nbsp; supsvc.obj&lt;BR&gt;&amp;nbsp;0001:00030138&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?ParseGetDialedIdSettings@@YAJPBDAAPAXAAI@Z"&gt;?ParseGetDialedIdSettings@@YAJPBDAAPAXAAI@Z&lt;/A&gt; 10031138 f&amp;nbsp;&amp;nbsp; supsvc.obj&lt;BR&gt;&amp;nbsp;0001:000303f8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?ParseGetClosedGroupSettings@@YAJPBDAAPAXAAI@Z"&gt;?ParseGetClosedGroupSettings@@YAJPBDAAPAXAAI@Z&lt;/A&gt; 100313f8 f&amp;nbsp;&amp;nbsp; supsvc.obj&lt;BR&gt;&amp;nbsp;0001:00030810&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?ParseGetCallForwardingSettings@@YAJPBDAAPAXAAI@Z"&gt;?ParseGetCallForwardingSettings@@YAJPBDAAPAXAAI@Z&lt;/A&gt; 10031820&amp;nbsp;&amp;lt;&amp;lt; HERE HERE HERE&lt;BR&gt;&amp;nbsp;0001:00031338&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?ParseGetCallWaitingSettings@@YAJPBDAAPAXAAI@Z"&gt;?ParseGetCallWaitingSettings@@YAJPBDAAPAXAAI@Z&lt;/A&gt; 10032338 f&amp;nbsp;&amp;nbsp; supsvc.obj&lt;BR&gt;&amp;nbsp;0001:00031920&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?BSCompareChars@@YAHPBX0@Z"&gt;?BSCompareChars@@YAHPBX0@Z&lt;/A&gt; 10032920 f&amp;nbsp;&amp;nbsp; util.obj&lt;BR&gt;&amp;nbsp;0001:00033018&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?ParseGetAudioGain@@YAJPBDAAPAXAAI@Z"&gt;?ParseGetAudioGain@@YAJPBDAAPAXAAI@Z&lt;/A&gt; 10034018 f&amp;nbsp;&amp;nbsp; voice.obj&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;...&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV class=Section1&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;The function I want to stop at is the RIL component ParseGetCallForwardingSettings() and is located at: &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; BACKGROUND: aqua; FONT-FAMILY: 'Courier New'"&gt;10031820&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;This number is not an address, but rather an offset that we can use to calculate how much code lies between this function and DllMain. Looking at the same map file, locate DllMain: &lt;/DIV&gt;
&lt;DIV class=Section1&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=Section1&gt;
&lt;DIV style="BORDER-TOP: #fefefe 2px solid; MARGIN-LEFT: 25px; WORD-BREAK: keep-all; POSITION: relative; BACKGROUND-COLOR: #cccccc" ;&gt;&amp;nbsp; 
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;…&lt;BR&gt;&amp;nbsp;0001:00029914&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?StartReadyStateQuery@CRilHandle@@QAAXXZ"&gt;?StartReadyStateQuery@CRilHandle@@QAAXXZ&lt;/A&gt; 1002a914 f&amp;nbsp;&amp;nbsp; rilhand.obj&lt;BR&gt;&amp;nbsp;0001:00029960&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?Register@CRilEventLog@@QAAJXZ"&gt;?Register@CRilEventLog@@QAAJXZ&lt;/A&gt; 1002a960 f i rilmain.obj&lt;BR&gt;&amp;nbsp;0001:000299c0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DllMain&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1002a9c0 f&amp;nbsp;&amp;nbsp; rilmain.obj&lt;BR&gt;&amp;nbsp;0001:00029a10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?RIL_Deinit@@YAHK@Z"&gt;?RIL_Deinit@@YAHK@Z&lt;/A&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1002aa10 f&amp;nbsp;&amp;nbsp; rilmain.obj&lt;BR&gt;&amp;nbsp;0001:00029aec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?RIL_Read@@YAKKPAXK@Z"&gt;?RIL_Read@@YAKKPAXK@Z&lt;/A&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1002aaec f&amp;nbsp;&amp;nbsp; rilmain.obj&lt;BR&gt;&amp;nbsp;0001:00029af4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:?RIL_Write@@YAKKPBXK@Z"&gt;?RIL_Write@@YAKKPBXK@Z&lt;/A&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1002aaf4 f&amp;nbsp;&amp;nbsp; rilmain.obj&lt;BR&gt;…&lt;BR&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Using calculator, find the amount of code that exists between these two functions. In this case, my function is later in the map file than DllMain so I Subtract:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 0.5in"&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; BACKGROUND: aqua; FONT-FAMILY: 'Courier New'"&gt;10031820&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; - &lt;SPAN style="BACKGROUND: yellow"&gt;1002a9c0&lt;/SPAN&gt; = 0x6E60&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;To get the code offset between these two functions. Going back to the debugger, locate the instruction address of DllMain and drag this into a watch window.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV class=Section1&gt;
&lt;TABLE class=MsoTableGrid style="BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=0 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 351pt; PADDING-TOP: 0in" vAlign=top width=468&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;IMG src="http://img.villagephotos.com/p/2005-7/1041592/watch1.jpg" mce_src="http://img.villagephotos.com/p/2005-7/1041592/watch1.jpg"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 351pt; PADDING-TOP: 0in" vAlign=top width=468&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;
&lt;DIV style="BORDER-TOP: #fefefe 2px solid; MARGIN-LEFT: 25px; WORD-BREAK: keep-all; POSITION: relative; BACKGROUND-COLOR: #cccccc" ;&gt;&amp;nbsp; 
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;…&lt;BR&gt;0102A9B8&amp;nbsp;&amp;nbsp;&amp;nbsp; bx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lr&lt;BR&gt;0102A9BC&amp;nbsp;&amp;nbsp;&amp;nbsp; andhi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r4, r0, r5&lt;BR&gt;DllMain:&lt;BR&gt;0102A9C0&amp;nbsp;&amp;nbsp;&amp;nbsp; stmdb&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sp!, {r4, lr}&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;lt;&amp;lt; HERE&lt;BR&gt;$M46300:&lt;BR&gt;0102A9C4&amp;nbsp;&amp;nbsp;&amp;nbsp; cmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r1, #1&lt;BR&gt;0102A9C8&amp;nbsp;&amp;nbsp;&amp;nbsp; bne&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |$M46300+18h (0102a9dc)|&lt;BR&gt;0102A9CC&amp;nbsp;&amp;nbsp;&amp;nbsp; ldr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0, [pc, #0x38]&lt;BR&gt;0102A9D0&amp;nbsp;&amp;nbsp;&amp;nbsp; bl&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |CRilEventLog::Register (0102a960)|&lt;BR&gt;…&lt;/P&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 351pt; PADDING-TOP: 0in" vAlign=top width=468&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 351pt; PADDING-TOP: 0in" vAlign=top width=468&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Next, use the watch window to help your function by adding your offset value to the instruction address of DllMain. Note: if your function was less than DllMain, you would actually subtract:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV class=Section1&gt;
&lt;TABLE class=MsoTableGrid style="BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=0 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 351pt; PADDING-TOP: 0in" vAlign=top width=468&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-language: EN-US"&gt;&lt;?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /&gt;&lt;v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&amp;nbsp;&lt;IMG src="http://img.villagephotos.com/p/2005-7/1041592/watch2.jpg" mce_src="http://img.villagephotos.com/p/2005-7/1041592/watch2.jpg"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"&gt;&lt;/v:path&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:lock aspectratio="t" v:ext="edit"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Click and drag this resulting value back to the ASM window to find code close to your function. Looking at the ASM, you will see that we are very close to the top of a function and should set a breakpoint here. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Hint: Look for &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;stmdb&lt;/SPAN&gt;&lt;/FONT&gt; instructions and SP register manipulation to show you the beginning and end of functions.&lt;/P&gt;
&lt;P class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 351pt; PADDING-TOP: 0in" vAlign=top width=468&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;
&lt;DIV style="BORDER-TOP: #fefefe 2px solid; MARGIN-LEFT: 25px; WORD-BREAK: keep-all; POSITION: relative; BACKGROUND-COLOR: #cccccc" ;&gt;... 
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;010317EC&amp;nbsp;&amp;nbsp;&amp;nbsp; ldmia&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sp!, {r4 - r8, lr}&lt;BR&gt;010317F0&amp;nbsp;&amp;nbsp;&amp;nbsp; bx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lr&lt;BR&gt;010317F4&amp;nbsp;&amp;nbsp;&amp;nbsp; andhi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r4, r0, r5&lt;BR&gt;010317F8&amp;nbsp;&amp;nbsp;&amp;nbsp; ???&lt;BR&gt;010317FC&amp;nbsp;&amp;nbsp;&amp;nbsp; smlabbeq&amp;nbsp;&amp;nbsp;&amp;nbsp; r0, r12, r3, r2&lt;BR&gt;01031800&amp;nbsp;&amp;nbsp;&amp;nbsp; ldreqd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r8, [r0, -r12]&lt;BR&gt;01031804&amp;nbsp;&amp;nbsp;&amp;nbsp; smlatteq&amp;nbsp;&amp;nbsp;&amp;nbsp; r0, r12, r2, r8&lt;BR&gt;01031808&amp;nbsp;&amp;nbsp;&amp;nbsp; andhi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0, r7, r7, asr r0&lt;BR&gt;0103180C&amp;nbsp;&amp;nbsp;&amp;nbsp; ???&lt;BR&gt;01031810&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r12, sp&amp;nbsp; &amp;lt;&amp;lt; Func begins here&lt;BR&gt;01031814&amp;nbsp;&amp;nbsp;&amp;nbsp; stmdb&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sp!, {r0 - r3}&lt;BR&gt;01031818&amp;nbsp;&amp;nbsp;&amp;nbsp; stmdb&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sp!, {r4 - r12, lr}&lt;BR&gt;0103181C&amp;nbsp;&amp;nbsp;&amp;nbsp; sub&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sp, sp, #0x86, 30&lt;BR&gt;01031820&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r7, r2&amp;nbsp;&amp;nbsp; &amp;lt;&amp;lt; HERE&lt;BR&gt;01031824&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r8, r1&lt;BR&gt;01031828&amp;nbsp;&amp;nbsp;&amp;nbsp; str&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r0, [sp, #0x240]&lt;BR&gt;0103182C&amp;nbsp;&amp;nbsp;&amp;nbsp; ldr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, [pc, #0x3C4]&lt;BR&gt;01031830&amp;nbsp;&amp;nbsp;&amp;nbsp; ldr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, [r3]&lt;BR&gt;01031834&amp;nbsp;&amp;nbsp;&amp;nbsp; str&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r3, [sp, #0x214]&lt;BR&gt;01031838&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r1, #0&lt;BR&gt;0103183C&amp;nbsp;&amp;nbsp;&amp;nbsp; str&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r1, [r8]&lt;BR&gt;01031840&amp;nbsp;&amp;nbsp;&amp;nbsp; str&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r1, [r7]&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;...&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;B&gt;&lt;/B&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 351pt; PADDING-TOP: 0in" vAlign=top width=468&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 351pt; PADDING-TOP: 0in" vAlign=top width=468&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face="Courier New" size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;The specific case above puts us very close to the top of a function – but is it the function we are looking for? It is hard to say without setting breakpoints and continuing to see if we stop. Don’t be shy about scrolling through the ASM looking for other functions nearby and setting multiply breakpoints (they are free!) on those as well. Function prologs have a certain “look” about them and your eye will train to identify them quickly. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;The above steps will not work under all conditions and significant module changes can render older map files useless. But, as the device matures and code churn is reduced – I have found this method very useful. Good Luck!&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1676674" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hopperx/archive/tags/KITL/default.aspx">KITL</category><category domain="http://blogs.msdn.com/hopperx/archive/tags/Platform+Builder/default.aspx">Platform Builder</category><category domain="http://blogs.msdn.com/hopperx/archive/tags/breakpoints/default.aspx">breakpoints</category><category domain="http://blogs.msdn.com/hopperx/archive/tags/mapfile/default.aspx">mapfile</category><category domain="http://blogs.msdn.com/hopperx/archive/tags/shende/default.aspx">shende</category></item></channel></rss>