<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ARM on soffensive blog</title><link>https://soffensive.github.io/tags/arm/</link><description>Recent content in ARM on soffensive blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 07 Dec 2017 10:29:00 -0800</lastBuildDate><atom:link href="https://soffensive.github.io/tags/arm/index.xml" rel="self" type="application/rss+xml"/><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 11</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-07-practical-reverse-engineering-exercise-solutions-page-79-exercise-11/</link><pubDate>Thu, 07 Dec 2017 10:29:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-07-practical-reverse-engineering-exercise-solutions-page-79-exercise-11/</guid><description>&lt;p>Exercise 11 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery11&lt;/code> - the last exercise of the ARM chapter:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">B0&lt;/span> &lt;span class="nv">mystery11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">B0&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">E9&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="nv">F&lt;/span> &lt;span class="nv">PUSH.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="err">–&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LR&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">B4&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">F2&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="mb">0B&lt;/span> &lt;span class="nv">ADDW&lt;/span> &lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x20&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">B8&lt;/span> &lt;span class="nv">B0&lt;/span> &lt;span class="nv">F9&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">A&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="nv">LDRSH.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x5A&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">BC&lt;/span> &lt;span class="mi">07&lt;/span> &lt;span class="mi">46&lt;/span> &lt;span class="nv">MOV&lt;/span> &lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">BE&lt;/span> &lt;span class="mi">90&lt;/span> &lt;span class="mi">46&lt;/span> &lt;span class="nv">MOV&lt;/span> &lt;span class="nv">R8&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">C0&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="nv">EB&lt;/span> &lt;span class="mi">83&lt;/span> &lt;span class="mi">03&lt;/span> &lt;span class="nv">ADD.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LSL#2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">C4&lt;/span> &lt;span class="nv">D3&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">84&lt;/span> &lt;span class="nv">A0&lt;/span> &lt;span class="nv">LDR.W&lt;/span> &lt;span class="nv">R10&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x84&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">C8&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="nv">B&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">F&lt;/span> &lt;span class="nv">LDRH&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x3A&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">CA&lt;/span> &lt;span class="mi">89&lt;/span> &lt;span class="mi">46&lt;/span> &lt;span class="nv">MOV&lt;/span> &lt;span class="nv">R9&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">CC&lt;/span> &lt;span class="nv">CB&lt;/span> &lt;span class="nv">B9&lt;/span> &lt;span class="nv">CBNZ&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">loc_1018602&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">CE&lt;/span> &lt;span class="nv">B0&lt;/span> &lt;span class="nv">F9&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">A&lt;/span> &lt;span class="mi">40&lt;/span> &lt;span class="nv">LDRSH.W&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x5A&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">D2&lt;/span> &lt;span class="mi">17&lt;/span> &lt;span class="nv">F1&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="mi">02&lt;/span> &lt;span class="nv">ADDS.W&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x20&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">D6&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="nv">EB&lt;/span> &lt;span class="mi">44&lt;/span> &lt;span class="mi">03&lt;/span> &lt;span class="nv">ADD.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LSL#1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">DA&lt;/span> &lt;span class="nv">B3&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">C&lt;/span> &lt;span class="mi">50&lt;/span> &lt;span class="nv">LDRH.W&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x5C&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">DE&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="nv">EB&lt;/span> &lt;span class="mi">84&lt;/span> &lt;span class="mi">03&lt;/span> &lt;span class="nv">ADD.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LSL#2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">E2&lt;/span> &lt;span class="nv">D3&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">84&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="nv">LDR.W&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x84&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">E6&lt;/span> &lt;span class="mi">83&lt;/span> &lt;span class="mi">89&lt;/span> &lt;span class="nv">LDRH&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0xC&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">19:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">E8&lt;/span> &lt;span class="mi">06&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="nv">C&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x40&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">20:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">EA&lt;/span> &lt;span class="mi">03&lt;/span> &lt;span class="nv">EB&lt;/span> &lt;span class="mi">45&lt;/span> &lt;span class="mi">03&lt;/span> &lt;span class="nv">ADD.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LSL#1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">21:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">EE&lt;/span> &lt;span class="mi">9&lt;/span>&lt;span class="nv">B&lt;/span> &lt;span class="mi">19&lt;/span> &lt;span class="nv">ADDS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">22:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">F0&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="nv">C&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">23:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">F2&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">B&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">24:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">F4&lt;/span> &lt;span class="mi">43&lt;/span> &lt;span class="nv">EA&lt;/span> &lt;span class="mi">04&lt;/span> &lt;span class="mi">24&lt;/span> &lt;span class="nv">ORR.W&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LSL#8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">25:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">F8&lt;/span> &lt;span class="mi">43&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">A&lt;/span> &lt;span class="nv">LDRH&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x12&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">26:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">FA&lt;/span> &lt;span class="mi">23&lt;/span> &lt;span class="mi">40&lt;/span> &lt;span class="nv">ANDS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">27:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">FC&lt;/span> &lt;span class="mi">99&lt;/span> &lt;span class="mi">19&lt;/span> &lt;span class="nv">ADDS&lt;/span> &lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">28:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">FE&lt;/span> &lt;span class="nv">FD&lt;/span> &lt;span class="nv">F7&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">FF&lt;/span> &lt;span class="nb">BL&lt;/span> &lt;span class="nv">sub_101651C&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">29:&lt;/span> &lt;span class="err">01018602&lt;/span> &lt;span class="nf">loc_1018602&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">30:&lt;/span> &lt;span class="err">01018602&lt;/span> &lt;span class="nf">BA&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">E&lt;/span> &lt;span class="nv">LDRH&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x34&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">31:&lt;/span> &lt;span class="err">01018604&lt;/span> &lt;span class="nf">BB&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="nv">A&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x28&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">32:&lt;/span> &lt;span class="err">01018606&lt;/span> &lt;span class="nf">D0&lt;/span> &lt;span class="mi">18&lt;/span> &lt;span class="nv">ADDS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">33:&lt;/span> &lt;span class="err">01018608&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">02&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="nv">LDRB.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R10&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">34:&lt;/span> &lt;span class="err">0101860&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="mb">0B&lt;/span> &lt;span class="nv">B1&lt;/span> &lt;span class="nv">CBZ&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">loc_1018612&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">35:&lt;/span> &lt;span class="err">0101860&lt;/span>&lt;span class="nf">E&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="mi">22&lt;/span> &lt;span class="nv">MOVS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">36:&lt;/span> &lt;span class="err">01018610&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="nf">E0&lt;/span> &lt;span class="nv">B&lt;/span> &lt;span class="nv">loc_1018614&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">37:&lt;/span> &lt;span class="err">01018612&lt;/span> &lt;span class="nf">loc_1018612&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">38:&lt;/span> &lt;span class="err">01018612&lt;/span> &lt;span class="err">3&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="nv">A&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x20&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">39:&lt;/span> &lt;span class="err">01018614&lt;/span> &lt;span class="nf">loc_1018614&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">40:&lt;/span> &lt;span class="err">01018614&lt;/span> &lt;span class="nf">FB&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">E&lt;/span> &lt;span class="nv">LDRH&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x36&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">41:&lt;/span> &lt;span class="err">01018616&lt;/span> &lt;span class="nf">B8&lt;/span> &lt;span class="nv">F1&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="nv">F&lt;/span> &lt;span class="nv">CMP.W&lt;/span> &lt;span class="nv">R8&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">42:&lt;/span> &lt;span class="err">0101861&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="mi">01&lt;/span> &lt;span class="nv">D0&lt;/span> &lt;span class="nv">BEQ&lt;/span> &lt;span class="nv">loc_1018620&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">43:&lt;/span> &lt;span class="err">0101861&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="mi">80&lt;/span> &lt;span class="mi">18&lt;/span> &lt;span class="nv">ADDS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">44:&lt;/span> &lt;span class="err">0101861&lt;/span>&lt;span class="nf">E&lt;/span> &lt;span class="mi">9&lt;/span>&lt;span class="nv">B&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="nv">A&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">45:&lt;/span> &lt;span class="err">01018620&lt;/span> &lt;span class="nf">loc_1018620&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">46:&lt;/span> &lt;span class="err">01018620&lt;/span> &lt;span class="nf">C9&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="nv">STR.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R9&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">47:&lt;/span> &lt;span class="err">01018624&lt;/span> &lt;span class="nf">BD&lt;/span> &lt;span class="nv">E8&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">F&lt;/span> &lt;span class="nv">POP.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="err">–&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">PC&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">48:&lt;/span> &lt;span class="err">01018624&lt;/span> &lt;span class="c1">; End of function mystery11&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>According to the exercise description, the called subroutine &lt;code>sub_101651C&lt;/code> in line 28 takes three arguments and does not return anything. Thus, we know the registers &lt;code>R0&lt;/code>, &lt;code>R1&lt;/code> and &lt;code>R2&lt;/code> are prepared and passed to the function.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 10</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-06-practical-reverse-engineering-exercise-solutions-page-79-exercise-10/</link><pubDate>Wed, 06 Dec 2017 06:19:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-06-practical-reverse-engineering-exercise-solutions-page-79-exercise-10/</guid><description>&lt;p>Exercise 10 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery10&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">E9&lt;/span> &lt;span class="mi">70&lt;/span> &lt;span class="mi">48&lt;/span> &lt;span class="nv">PUSH.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="err">–&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LR&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">F2&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="nv">C&lt;/span> &lt;span class="mb">0B&lt;/span> &lt;span class="nv">ADDW&lt;/span> &lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0xC&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">37&lt;/span> &lt;span class="nf">F0&lt;/span> &lt;span class="nv">CC&lt;/span> &lt;span class="nv">F9&lt;/span> &lt;span class="nb">BL&lt;/span> &lt;span class="nv">__security_push_cookie&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">84&lt;/span> &lt;span class="nf">B0&lt;/span> &lt;span class="nv">SUB&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="mi">46&lt;/span> &lt;span class="nv">MOV&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">24&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="err">10&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">16&lt;/span> &lt;span class="err">46&lt;/span> &lt;span class="nf">MOV&lt;/span> &lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="nv">D3&lt;/span> &lt;span class="nv">BCC&lt;/span> &lt;span class="nv">loc_1010786&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="nv">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">__imp_GetSystemTime&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="err">68&lt;/span> &lt;span class="err">46&lt;/span> &lt;span class="nf">MOV&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">68&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="err">98&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BLX&lt;/span> &lt;span class="nv">R3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">var_1C&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="err">10&lt;/span> &lt;span class="err">24&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="err">33&lt;/span> &lt;span class="err">60&lt;/span> &lt;span class="nf">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">var_18&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">19:&lt;/span> &lt;span class="err">73&lt;/span> &lt;span class="err">60&lt;/span> &lt;span class="nf">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">20:&lt;/span> &lt;span class="err">02&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">var_14&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">21:&lt;/span> &lt;span class="nf">B3&lt;/span> &lt;span class="mi">60&lt;/span> &lt;span class="nv">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">22:&lt;/span> &lt;span class="err">03&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">var_10&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">23:&lt;/span> &lt;span class="nf">F3&lt;/span> &lt;span class="mi">60&lt;/span> &lt;span class="nv">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0xC&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">24:&lt;/span> &lt;span class="nf">loc_1010786&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">25:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mb">1B&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">26:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">27:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="nf">D3&lt;/span> &lt;span class="nv">BCC&lt;/span> &lt;span class="nv">loc_1010796&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">28:&lt;/span> &lt;span class="err">11&lt;/span> &lt;span class="err">4&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">__imp_GetCurrentProcessId&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">29:&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">68&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">30:&lt;/span> &lt;span class="err">98&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BLX&lt;/span> &lt;span class="nv">R3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">31:&lt;/span> &lt;span class="err">30&lt;/span> &lt;span class="err">51&lt;/span> &lt;span class="nf">STR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">32:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="err">34&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">33:&lt;/span> &lt;span class="nf">loc_1010796&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">34:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mb">1B&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">35:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">36:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="nf">D3&lt;/span> &lt;span class="nv">BCC&lt;/span> &lt;span class="nv">loc_10107A6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">37:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="nv">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">__imp_GetTickCount&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">38:&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">68&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">39:&lt;/span> &lt;span class="err">98&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BLX&lt;/span> &lt;span class="nv">R3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">40:&lt;/span> &lt;span class="err">30&lt;/span> &lt;span class="err">51&lt;/span> &lt;span class="nf">STR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">41:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="err">34&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">42:&lt;/span> &lt;span class="nf">loc_10107A6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">43:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mb">1B&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">44:&lt;/span> &lt;span class="err">08&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">45:&lt;/span> &lt;span class="err">09&lt;/span> &lt;span class="nf">D3&lt;/span> &lt;span class="nv">BCC&lt;/span> &lt;span class="nv">loc_10107C0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">46:&lt;/span> &lt;span class="err">07&lt;/span> &lt;span class="err">4&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">__imp_QueryPerformanceCounter&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">47:&lt;/span> &lt;span class="err">68&lt;/span> &lt;span class="err">46&lt;/span> &lt;span class="nf">MOV&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">48:&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">68&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">49:&lt;/span> &lt;span class="err">98&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BLX&lt;/span> &lt;span class="nv">R3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">50:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">var_1C&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">51:&lt;/span> &lt;span class="err">32&lt;/span> &lt;span class="err">19&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">52:&lt;/span> &lt;span class="err">33&lt;/span> &lt;span class="err">51&lt;/span> &lt;span class="nf">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">53:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">var_18&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">54:&lt;/span> &lt;span class="err">08&lt;/span> &lt;span class="err">34&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">55:&lt;/span> &lt;span class="err">53&lt;/span> &lt;span class="err">60&lt;/span> &lt;span class="nf">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">56:&lt;/span> &lt;span class="nf">loc_10107C0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">57:&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="err">46&lt;/span> &lt;span class="nf">MOV&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">58:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="nf">B0&lt;/span> &lt;span class="nv">ADD&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">59:&lt;/span> &lt;span class="err">37&lt;/span> &lt;span class="nf">F0&lt;/span> &lt;span class="nv">A4&lt;/span> &lt;span class="nv">F9&lt;/span> &lt;span class="nb">BL&lt;/span> &lt;span class="nv">__security_pop_cookie&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">60:&lt;/span> &lt;span class="nf">BD&lt;/span> &lt;span class="nv">E8&lt;/span> &lt;span class="mi">70&lt;/span> &lt;span class="mi">88&lt;/span> &lt;span class="nv">POP.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="err">–&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">PC&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">61:&lt;/span> &lt;span class="c1">; End of function mystery10&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Although the function looks complicated at first, we notice it does not contain any kind of loops and only executes sequentially with a couple of conditionals.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 9</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-05-practical-reverse-engineering-exercise-solutions-page-79-exercise-9/</link><pubDate>Tue, 05 Dec 2017 06:47:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-05-practical-reverse-engineering-exercise-solutions-page-79-exercise-9/</guid><description>&lt;p>Exercise 9 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery9&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">E9&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="mi">48&lt;/span> &lt;span class="nv">PUSH.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LR&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">F2&lt;/span> &lt;span class="mi">08&lt;/span> &lt;span class="mb">0B&lt;/span> &lt;span class="nv">ADDW&lt;/span> &lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">09&lt;/span> &lt;span class="err">4&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="kt">byte&lt;/span>&lt;span class="nv">Array&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">06&lt;/span> &lt;span class="nf">E0&lt;/span> &lt;span class="nv">B&lt;/span> &lt;span class="nv">loc_100E312&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="nf">loc_100E304&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="err">5&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">63&lt;/span> &lt;span class="err">5&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">93&lt;/span> &lt;span class="err">42&lt;/span> &lt;span class="nf">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="nf">D1&lt;/span> &lt;span class="nv">BNE&lt;/span> &lt;span class="nv">loc_100E318&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">30&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">31&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="nf">loc_100E312&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="err">78&lt;/span> &lt;span class="nf">LDRB&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="nf">F5&lt;/span> &lt;span class="nv">D1&lt;/span> &lt;span class="nv">BNE&lt;/span> &lt;span class="nv">loc_100E304&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="nf">loc_100E318&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">19:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">20:&lt;/span> &lt;span class="err">5&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">21:&lt;/span> &lt;span class="err">03&lt;/span> &lt;span class="err">78&lt;/span> &lt;span class="nf">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">22:&lt;/span> &lt;span class="err">5&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">23:&lt;/span> &lt;span class="err">98&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">24:&lt;/span> &lt;span class="nf">BD&lt;/span> &lt;span class="nv">E8&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="mi">88&lt;/span> &lt;span class="nv">POP.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">PC&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">25:&lt;/span> &lt;span class="c1">; End of function mystery9&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>First of all, &lt;code>mystery9&lt;/code> has a striking similarity to the previously decompiled function &lt;code>mystery8&lt;/code>. Its disassembly uses Thumb mode, as we can see for instance from the 16 bit instruction width.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 8</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-05-practical-reverse-engineering-exercise-solutions-page-79-exercise-8/</link><pubDate>Tue, 05 Dec 2017 02:30:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-05-practical-reverse-engineering-exercise-solutions-page-79-exercise-8/</guid><description>&lt;p>Exercise 8 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery8&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">E9&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="mi">48&lt;/span> &lt;span class="nv">PUSH.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="err">–&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LR&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">F2&lt;/span> &lt;span class="mi">10&lt;/span> &lt;span class="mb">0B&lt;/span> &lt;span class="nv">ADDW&lt;/span> &lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="nv">E&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="kt">byte&lt;/span>&lt;span class="nv">Array&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">09&lt;/span> &lt;span class="nf">E0&lt;/span> &lt;span class="nv">B&lt;/span> &lt;span class="nv">loc_100E34C&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="nf">loc_100E338&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">05&lt;/span> &lt;span class="err">78&lt;/span> &lt;span class="nf">LDRB&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">3&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">4&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">B1&lt;/span> &lt;span class="nv">CBZ&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">loc_100E352&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="nf">AB&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="nf">A3&lt;/span> &lt;span class="mi">42&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="nf">D1&lt;/span> &lt;span class="nv">BNE&lt;/span> &lt;span class="nv">loc_100E352&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">30&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">31&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="nf">loc_100E34C&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">19:&lt;/span> &lt;span class="nf">F3&lt;/span> &lt;span class="nv">DC&lt;/span> &lt;span class="nv">BGT&lt;/span> &lt;span class="nv">loc_100E338&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">20:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">3&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">21:&lt;/span> &lt;span class="nf">loc_100E352&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">22:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">23:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="nf">DA&lt;/span> &lt;span class="nv">BGE&lt;/span> &lt;span class="nv">loc_100E35A&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">24:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">25:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="nf">E0&lt;/span> &lt;span class="nv">B&lt;/span> &lt;span class="nv">locret_100E364&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">26:&lt;/span> &lt;span class="nf">loc_100E35A&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">27:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">28:&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">29:&lt;/span> &lt;span class="err">03&lt;/span> &lt;span class="err">78&lt;/span> &lt;span class="nf">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">30:&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">31:&lt;/span> &lt;span class="err">98&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">32:&lt;/span> &lt;span class="nf">locret_100E364&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">33:&lt;/span> &lt;span class="nf">BD&lt;/span> &lt;span class="nv">E8&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="mi">88&lt;/span> &lt;span class="nv">POP.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="err">–&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">PC&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">34:&lt;/span> &lt;span class="c1">; End of function mystery8&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The function was compiled in Thumb mode, as we can see from the presence of 16 bit instructions, &lt;code>PUSH&lt;/code> and &lt;code>POP&lt;/code> instructions and Thumb-specific instructions, e.g. &lt;code>CBZ&lt;/code> and instructions with the &lt;code>.W&lt;/code> suffix.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 7</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-04-practical-reverse-engineering-exercise-solutions-page-79-exercise-7/</link><pubDate>Mon, 04 Dec 2017 06:14:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-04-practical-reverse-engineering-exercise-solutions-page-79-exercise-7/</guid><description>&lt;p>Exercise 7 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery7&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">02&lt;/span> &lt;span class="err">46&lt;/span> &lt;span class="nf">MOV&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">08&lt;/span> &lt;span class="nf">B9&lt;/span> &lt;span class="nv">CBNZ&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">loc_100E1D8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="nf">loc_100E1D8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">90&lt;/span> &lt;span class="nf">F9&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="nv">LDRSB.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="err">02&lt;/span> &lt;span class="nf">E0&lt;/span> &lt;span class="nv">B&lt;/span> &lt;span class="nv">loc_100E1E4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="nf">loc_100E1DE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">32&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">92&lt;/span> &lt;span class="nf">F9&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="nv">LDRSB.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R2&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="nf">loc_100E1E4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="nf">FA&lt;/span> &lt;span class="nv">D1&lt;/span> &lt;span class="nv">BNE&lt;/span> &lt;span class="nv">loc_100E1DE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="err">10&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="err">6&lt;/span>&lt;span class="nf">F&lt;/span> &lt;span class="nv">F3&lt;/span> &lt;span class="mi">9&lt;/span>&lt;span class="nv">F&lt;/span> &lt;span class="mi">70&lt;/span> &lt;span class="nv">BFC.W&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x1E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="c1">; End of function mystery7&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Again, the function provided is executed in Thumb mode, due to several 16 bit instructions and instructions specific to Thumb mode such as &lt;code>CBNZ&lt;/code> and the &lt;code>.W&lt;/code> suffix such as in line 7, 11 and 16.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 6</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-04-practical-reverse-engineering-exercise-solutions-page-79-exercise-6/</link><pubDate>Mon, 04 Dec 2017 03:17:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-04-practical-reverse-engineering-exercise-solutions-page-79-exercise-6/</guid><description>&lt;p>Exercise 6 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery6&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">E9&lt;/span> &lt;span class="mi">18&lt;/span> &lt;span class="mi">48&lt;/span> &lt;span class="nv">PUSH.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LR&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">F2&lt;/span> &lt;span class="mi">08&lt;/span> &lt;span class="mb">0B&lt;/span> &lt;span class="nv">ADDW&lt;/span> &lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="err">68&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">22&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">06&lt;/span> &lt;span class="kd">DD&lt;/span> &lt;span class="nb">BL&lt;/span>&lt;span class="nv">E&lt;/span> &lt;span class="nv">loc_103B3B6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="nf">loc_103B3A8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">50&lt;/span> &lt;span class="nf">F8&lt;/span> &lt;span class="mi">04&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="nv">F&lt;/span> &lt;span class="nv">LDR.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="err">!&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">8&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">42&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">06&lt;/span> &lt;span class="nf">D0&lt;/span> &lt;span class="nv">BEQ&lt;/span> &lt;span class="nv">loc_103B3BE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">32&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="nf">A2&lt;/span> &lt;span class="mi">42&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="nf">F8&lt;/span> &lt;span class="nv">DB&lt;/span> &lt;span class="nb">BL&lt;/span>&lt;span class="nv">T&lt;/span> &lt;span class="nv">loc_103B3A8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="nf">loc_103B3B6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">21&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="nf">locret_103B3BA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">19:&lt;/span> &lt;span class="nf">BD&lt;/span> &lt;span class="nv">E8&lt;/span> &lt;span class="mi">18&lt;/span> &lt;span class="mi">88&lt;/span> &lt;span class="nv">POP.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">PC&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">20:&lt;/span> &lt;span class="nf">loc_103B3BE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">21:&lt;/span> &lt;span class="nf">B2&lt;/span> &lt;span class="nv">F1&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="mi">03&lt;/span> &lt;span class="nv">SUBS.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0X20&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">22:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">21&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">23:&lt;/span> &lt;span class="err">99&lt;/span> &lt;span class="err">40&lt;/span> &lt;span class="nf">LSLS&lt;/span> &lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">24:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">23&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">25:&lt;/span> &lt;span class="err">13&lt;/span> &lt;span class="nf">FA&lt;/span> &lt;span class="mi">02&lt;/span> &lt;span class="nv">F0&lt;/span> &lt;span class="nv">LSLS.W&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">26:&lt;/span> &lt;span class="nf">F5&lt;/span> &lt;span class="nv">E7&lt;/span> &lt;span class="nv">B&lt;/span> &lt;span class="nv">locret_103B3BA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">27:&lt;/span> &lt;span class="c1">; End of function mystery6&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Due to the presence of 16 bit instructions, instructions having the &lt;code>.W&lt;/code> suffix and function prologue and epilogue with &lt;code>PUSH&lt;/code> and &lt;code>POP&lt;/code> respectively, we are dealing with code in Thumb state.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 5</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-03-practical-reverse-engineering-exercise-solutions-page-79-exercise-5/</link><pubDate>Sun, 03 Dec 2017 00:01:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-03-practical-reverse-engineering-exercise-solutions-page-79-exercise-5/</guid><description>&lt;p>Exercise 5 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery5&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">03&lt;/span> &lt;span class="err">46&lt;/span> &lt;span class="nf">MOV&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">06&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">D0&lt;/span> &lt;span class="nv">BEQ&lt;/span> &lt;span class="nv">loc_1032596&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">07&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">09&lt;/span> &lt;span class="nf">D0&lt;/span> &lt;span class="nv">BEQ&lt;/span> &lt;span class="nv">loc_1032592&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">08&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="err">05&lt;/span> &lt;span class="nf">D0&lt;/span> &lt;span class="nv">BEQ&lt;/span> &lt;span class="nv">loc_103258E&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">09&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="nf">D0&lt;/span> &lt;span class="nv">BEQ&lt;/span> &lt;span class="nv">loc_103258A&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">09&lt;/span> &lt;span class="err">48&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">aA&lt;/span> &lt;span class="c1">; &amp;#34;A&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="nf">loc_103258A&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="err">07&lt;/span> &lt;span class="err">48&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">aB&lt;/span> &lt;span class="c1">; &amp;#34;B&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="nf">loc_103258E&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="err">05&lt;/span> &lt;span class="err">48&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">ac&lt;/span> &lt;span class="c1">; &amp;#34;C&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">19:&lt;/span> &lt;span class="nf">loc_1032592&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">20:&lt;/span> &lt;span class="err">03&lt;/span> &lt;span class="err">48&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">aD&lt;/span> &lt;span class="c1">; &amp;#34;D&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">21:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">22:&lt;/span> &lt;span class="nf">loc_1032596&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">23:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">48&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">aE&lt;/span> &lt;span class="c1">; &amp;#34;E&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">24:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">25:&lt;/span> &lt;span class="c1">; End of function mystery5&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>All instructions have a width of 16 bits, so we are dealing with code in Thumb state.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 4</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-02-practical-reverse-engineering-exercise-solutions-page-79-exercise-4/</link><pubDate>Sat, 02 Dec 2017 05:21:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-02-practical-reverse-engineering-exercise-solutions-page-79-exercise-4/</guid><description>&lt;p>Exercise 4 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function &lt;code>mystery4&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">08&lt;/span> &lt;span class="nf">B9&lt;/span> &lt;span class="nv">CBNZ&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">loc_100C3DA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="nf">loc_100C3DA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">50&lt;/span> &lt;span class="nf">F8&lt;/span> &lt;span class="mi">08&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="nv">C&lt;/span> &lt;span class="nv">LDR.W&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#–&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="c1">; End of function mystery4&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The disassembly is in Thumb mode, as there are instructions having a width of 16 bits and some instructions specific to this mode (e.g. &lt;code>CBNZ&lt;/code> and the &lt;code>.W&lt;/code> suffix).&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 3</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-02-practical-reverse-engineering-exercise-solutions-page-79-exercise-3/</link><pubDate>Sat, 02 Dec 2017 05:20:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-02-practical-reverse-engineering-exercise-solutions-page-79-exercise-3/</guid><description>&lt;p>Exercise 3 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function &lt;code>mystery3&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">83&lt;/span> &lt;span class="err">68&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">60&lt;/span> &lt;span class="nv">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="nf">C3&lt;/span> &lt;span class="mi">68&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0xC&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">4&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">60&lt;/span> &lt;span class="nv">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="c1">; End of function mystery3&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>It is provided in Thumb mode, as we can see from the instruction width, which is consistently 16 bits. Furthermore, the decompilation is greatly facilitated thanks to the lack of any conditional statements. Any kind of NULL-checks, for instance, are omitted.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 78 / Exercise 2</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-02-practical-reverse-engineering-exercise-solutions-page-78-exercise-2/</link><pubDate>Sat, 02 Dec 2017 04:40:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-02-practical-reverse-engineering-exercise-solutions-page-78-exercise-2/</guid><description>&lt;p>Exercise 2 of the ARM chapter has a rather short disassembly compared to the first exercise. Again, we are tasked with the decompilation of the provided function &lt;code>mystery2&lt;/code>.&lt;/p>
&lt;p>The disassembly is as follows:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">28&lt;/span> &lt;span class="nf">B1&lt;/span> &lt;span class="nv">CBZ&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">loc_C672&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">90&lt;/span> &lt;span class="nf">F8&lt;/span> &lt;span class="mi">63&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="nv">LDRB.W&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x63&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">38&lt;/span> &lt;span class="nf">SUBS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">18&lt;/span> &lt;span class="nf">BF&lt;/span> &lt;span class="nv">IT&lt;/span> &lt;span class="nv">NE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVNE&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="nf">loc_C672&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="c1">; End of function mystery2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>First of all, we notice that the function has been compiled in Thumb mode, as there are several instructions having a width of 16 bits, which is not possible in ARM mode. Furthermore, the instructions &lt;code>CBZ&lt;/code> and &lt;code>IT&lt;/code> are specific to Thumb mode and not available in ARM mode.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 78 / Exercise 1</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-01-practical-reverse-engineering-exercise-solutions-page-78-exercise-1/</link><pubDate>Fri, 01 Dec 2017 04:59:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-01-practical-reverse-engineering-exercise-solutions-page-78-exercise-1/</guid><description>&lt;p>This is the first blog post to a series of ARM challenges from the book Practical Reverse Engineering. In addition to the official ARM manual, the following web page turned out to be very helpful when solving the exercises, as it describes the different ARM instructions in great detail.&lt;/p>
&lt;p>&lt;a href="https://www.heyrick.co.uk/armwiki/Main_Page" target="_blank" rel="noopener noreffer ">https://www.heyrick.co.uk/armwiki/Main_Page&lt;/a>&lt;/p>
&lt;p>Without further ado, let us explore the first function. The extract below shows the ARM disassembly of a function named mystery1, which we are supposed to decompile into C code.&lt;/p></description></item></channel></rss>