<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Fun on Zach Alexander</title><link>https://zpalexander.com/tags/fun/</link><description>Recent content in Fun on Zach Alexander</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 15 Apr 2017 16:14:11 -0800</lastBuildDate><atom:link href="https://zpalexander.com/tags/fun/index.xml" rel="self" type="application/rss+xml"/><item><title>Switching to ZSH</title><link>https://zpalexander.com/posts/switching-to-zsh/</link><pubDate>Sat, 15 Apr 2017 16:14:11 -0800</pubDate><guid>https://zpalexander.com/posts/switching-to-zsh/</guid><description>&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Jeff_Atwood"&gt;Jeff Atwood&lt;/a&gt; once famously proclaimed &lt;a href="https://blog.codinghorror.com/we-are-typists-first-programmers-second/"&gt;&amp;ldquo;we are typists first, programmers second&amp;rdquo;&lt;/a&gt;. While I think software development is &lt;a href="https://developers.slashdot.org/story/10/12/25/2034201/Does-Typing-Speed-Really-Matter-For-Programmers"&gt;a little more complicated than that&lt;/a&gt;, this quote brings up an important point: efficiency in software development hinges on the tooling we choose.&lt;/p&gt;&#10;&lt;p&gt;For the longest time I used &lt;a href="https://en.wikipedia.org/wiki/Bash_%28Unix_shell%29"&gt;Bash&lt;/a&gt; as my UNIX shell. It got the job done. I would occasionally feel frustrated by a repetitive command or a missing feature, but there was usually an &lt;a href="http://www.tldp.org/LDP/abs/html/aliases.html"&gt;alias&lt;/a&gt; or &lt;a href="http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html"&gt;script&lt;/a&gt; I could apply like a bandaid to minimize the pain enough to keep going. I even switched to &lt;a href="https://iterm2.com/"&gt;iTerm&lt;/a&gt; several years back to improve my terminal emulator GUI. I worked with Bash for long enough that I managed to amass a pretty fancy &lt;a href="http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html"&gt;.bash_profile&lt;/a&gt; config. If you&amp;rsquo;re curious about my config, &lt;a href="https://gist.github.com/zpalexander/213a0b53b4bc128c0410195a79a6ea51"&gt;you can check it out for yourself&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Binary Bomb Lab :: Phase 6</title><link>https://zpalexander.com/posts/binary-bomb-lab-phase-6/</link><pubDate>Sat, 10 Jan 2015 12:09:45 -0800</pubDate><guid>https://zpalexander.com/posts/binary-bomb-lab-phase-6/</guid><description>&lt;p&gt;A note to the reader: For explanation on how to set up the lab environment see the &lt;a href="https://zpalexander.com/posts/binary-bomb-lab-set-up/"&gt;&amp;ldquo;Introduction&amp;rdquo;&lt;/a&gt; section of the post.&lt;/p&gt;&#10;&lt;p&gt;If you&amp;rsquo;re looking for a specific phase:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-1/"&gt;Here is Phase 1&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-2/"&gt;Here is Phase 2&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-3/"&gt;Here is Phase 3&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-4/"&gt;Here is Phase 4&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-5/"&gt;Here is Phase 5&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-6/"&gt;Here is Phase 6&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;This phase is definitely the trickiest out of all of the other bomb lab phases. Prepare for data structures…&lt;/p&gt;</description></item><item><title>Binary Bomb Lab :: Phase 5</title><link>https://zpalexander.com/posts/binary-bomb-lab-phase-5/</link><pubDate>Fri, 09 Jan 2015 12:09:45 -0800</pubDate><guid>https://zpalexander.com/posts/binary-bomb-lab-phase-5/</guid><description>&lt;p&gt;A note to the reader: For explanation on how to set up the lab environment see the &lt;a href="https://zpalexander.com/posts/binary-bomb-lab-set-up/"&gt;&amp;ldquo;Introduction&amp;rdquo;&lt;/a&gt; section of the post.&lt;/p&gt;&#10;&lt;p&gt;If you&amp;rsquo;re looking for a specific phase:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-1/"&gt;Here is Phase 1&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-2/"&gt;Here is Phase 2&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-3/"&gt;Here is Phase 3&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-4/"&gt;Here is Phase 4&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-5/"&gt;Here is Phase 5&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-6/"&gt;Here is Phase 6&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;Ok, let’s get right to it and dig into the &lt;code&gt;&amp;lt;phase_5&amp;gt;&lt;/code&gt; code:&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://zpalexander.com/images/binary-bomb/phase-5-overview.png" alt="Phase 5 overview"&gt;&lt;/p&gt;&#10;&lt;p&gt;So, what have we got here? First things first, we can see from the call to &lt;code&gt;&amp;lt;string_length&amp;gt;&lt;/code&gt; at &lt;code&gt;&amp;lt;phase_5+23&amp;gt;&lt;/code&gt; and subsequent jump equal statement our string should be six characters long.&lt;/p&gt;</description></item><item><title>Binary Bomb Lab :: Phase 4</title><link>https://zpalexander.com/posts/binary-bomb-lab-phase-4/</link><pubDate>Thu, 08 Jan 2015 12:09:45 -0800</pubDate><guid>https://zpalexander.com/posts/binary-bomb-lab-phase-4/</guid><description>&lt;p&gt;A note to the reader: For explanation on how to set up the lab environment see the &lt;a href="https://zpalexander.com/posts/binary-bomb-lab-set-up/"&gt;&amp;ldquo;Introduction&amp;rdquo;&lt;/a&gt; section of the post.&lt;/p&gt;&#10;&lt;p&gt;If you&amp;rsquo;re looking for a specific phase:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-1/"&gt;Here is Phase 1&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-2/"&gt;Here is Phase 2&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-3/"&gt;Here is Phase 3&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-4/"&gt;Here is Phase 4&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-5/"&gt;Here is Phase 5&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-6/"&gt;Here is Phase 6&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h4 id="phase-4"&gt;Phase 4&lt;/h4&gt;&#10;&lt;p&gt;In my opinion, this is where things start to get tricky. In this phase, it is not enough to simply understand the assembly. Some pattern-recognition will be required. As usual, let&amp;rsquo;s start by taking a look at the code for this phase&amp;rsquo;s function to see if we can find a vector through which to understand what&amp;rsquo;s happening. I&amp;rsquo;m going to do so by running gdb with a test string and using disas:&lt;/p&gt;</description></item><item><title>Binary Bomb Lab :: Phase 3</title><link>https://zpalexander.com/posts/binary-bomb-lab-phase-3/</link><pubDate>Wed, 07 Jan 2015 12:09:45 -0800</pubDate><guid>https://zpalexander.com/posts/binary-bomb-lab-phase-3/</guid><description>&lt;p&gt;A note to the reader: For explanation on how to set up the lab environment see the &lt;a href="https://zpalexander.com/posts/binary-bomb-lab-set-up/"&gt;&amp;ldquo;Introduction&amp;rdquo;&lt;/a&gt; section of the post.&lt;/p&gt;&#10;&lt;p&gt;If you&amp;rsquo;re looking for a specific phase:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-1/"&gt;Here is Phase 1&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-2/"&gt;Here is Phase 2&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-3/"&gt;Here is Phase 3&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-4/"&gt;Here is Phase 4&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-5/"&gt;Here is Phase 5&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-6/"&gt;Here is Phase 6&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;By now you know the drill. Off to our objdump file!&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://zpalexander.com/images/binary-bomb/phase-3-objdump.gif" alt="Phase 3 object dump"&gt;&lt;/p&gt;&#10;&lt;p&gt;Woah. There are a lot of conditionals here. Maybe you’re an IA32 warrior who can take one look at this code and immediately tell what is going on, but for the rest of us, an iterative approach might work better here.&lt;/p&gt;</description></item><item><title>Binary Bomb Lab :: Phase 2</title><link>https://zpalexander.com/posts/binary-bomb-lab-phase-2/</link><pubDate>Tue, 06 Jan 2015 06:48:00 -0800</pubDate><guid>https://zpalexander.com/posts/binary-bomb-lab-phase-2/</guid><description>&lt;p&gt;A note to the reader: For explanation on how to set up the lab environment see the &lt;a href="https://zpalexander.com/posts/binary-bomb-lab-set-up/"&gt;&amp;ldquo;Introduction&amp;rdquo;&lt;/a&gt; section of the post.&lt;/p&gt;&#10;&lt;p&gt;If you&amp;rsquo;re looking for a specific phase:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-1/"&gt;Here is Phase 1&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-2/"&gt;Here is Phase 2&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-3/"&gt;Here is Phase 3&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-4/"&gt;Here is Phase 4&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-5/"&gt;Here is Phase 5&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-6/"&gt;Here is Phase 6&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;Ok, now things get a lot more interesting a lot more quickly. Let’s get started the same way we did last time, by looking at our objdump file for clues:&lt;/p&gt;</description></item><item><title>Binary Bomb Lab :: Phase 1</title><link>https://zpalexander.com/posts/binary-bomb-lab-phase-1/</link><pubDate>Mon, 05 Jan 2015 12:09:45 -0800</pubDate><guid>https://zpalexander.com/posts/binary-bomb-lab-phase-1/</guid><description>&lt;p&gt;A note to the reader: For explanation on how to set up the lab environment see the &lt;a href="https://zpalexander.com/posts/binary-bomb-lab-set-up/"&gt;&amp;ldquo;Introduction&amp;rdquo;&lt;/a&gt; section of the post.&lt;/p&gt;&#10;&lt;p&gt;If you&amp;rsquo;re looking for a specific phase:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-1/"&gt;Here is Phase 1&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-2/"&gt;Here is Phase 2&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-3/"&gt;Here is Phase 3&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-4/"&gt;Here is Phase 4&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-5/"&gt;Here is Phase 5&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://zpalexander.com/posts/binary-bomb-lab-phase-6/"&gt;Here is Phase 6&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;Phase 1 is sort of the “Hello World” of the Bomb Lab. You will have to run through the reverse engineering process, but there won’t be much in the way of complicated assembly to decipher or tricky mental hoops to jump through. To begin, let’s take a look at the &lt;code&gt;&amp;lt;phase_1&amp;gt;&lt;/code&gt; function in our objdump file:&lt;/p&gt;</description></item><item><title>Binary Bomb Lab :: Set Up</title><link>https://zpalexander.com/posts/binary-bomb-lab-set-up/</link><pubDate>Sun, 04 Jan 2015 12:09:42 -0800</pubDate><guid>https://zpalexander.com/posts/binary-bomb-lab-set-up/</guid><description>&lt;p&gt;The first step on your way to getting through the bomb lab will be setting up your environment. This page will assume that you have decided to do the lab for fun and profit. If you are a student, you’ve probably already been given these materials by your professor. Get to work.&lt;/p&gt;&#10;&lt;p&gt;You can find all the necessary files on the &lt;a href="http://csapp.cs.cmu.edu/public/labs.html"&gt;“Lab Assignments” page of Bryant and O’Hallaron’s website&lt;/a&gt;, or you can download all the pieces individually.&lt;/p&gt;</description></item><item><title>10 Tech Movies To Get You Coding Again</title><link>https://zpalexander.com/posts/10-tech-movies-to-get-you-coding-again/</link><pubDate>Tue, 30 Dec 2014 23:43:50 -0800</pubDate><guid>https://zpalexander.com/posts/10-tech-movies-to-get-you-coding-again/</guid><description>&lt;p&gt;Every creative person goes through phases where they question their commitment to their work, and software developers are no different. Maybe a recent project failed, maybe a simple app turned into a beast, or maybe you&amp;rsquo;ve been up to your eyeballs in debugging for weeks and you&amp;rsquo;re wondering, &amp;ldquo;Why do I do this again?&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;During these times of disrelish, we tend to forget about the spark of excitement that got us coding in the first place. We become so focused on the excruciating details of whatever issue we&amp;rsquo;re fighting with that we fail to see the magic we create when we write software.&lt;/p&gt;</description></item><item><title>You Can't JavaScript Under Pressure</title><link>https://zpalexander.com/posts/you-cant-javascript-under-pressure/</link><pubDate>Sun, 20 Jul 2014 18:50:00 -0700</pubDate><guid>https://zpalexander.com/posts/you-cant-javascript-under-pressure/</guid><description>&lt;p&gt;A fun little Javascript game was forwarded around my office recently, and I had a great time revisiting my elementary programming skills while defeating each of its levels. It’s called &lt;a href="http://games.usvsth3m.com/javascript-under-pressure/"&gt;“You Can’t Javascript Under Pressure”&lt;/a&gt;. I would recommend that everyone take the next 10-30 minutes out of their life to check it out.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="http://games.usvsth3m.com/javascript-under-pressure/"&gt;&lt;img src="https://zpalexander.com/images/you-cant-javascript-under-pressure/Screen-Shot-2014-07-19-at-19-25-24.png" alt="Game screenshot"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;While I found the game relatively easy, I figured it might be nice to share my solutions with the web. This game is great practice for the elementary-level software developer, and working through tough problems with a cheat sheet can be an excellent way to learn new topics. Even if you don’t need any help solving these problems, it can always be fun to see solutions that are different than your own. So, without any further ado, here are my solutions to each of the 5 levels:&lt;/p&gt;</description></item></channel></rss>