Part 30 – Debugging Float Variables
For a complete table of contents of all the lessons please click below as it will give you a brief of each lesson in addition to the topics it will cover. https://github.com/mytechnotalent/Reverse-Engineering-Tutorial
Let’s re-examine our code.
#include <iostream> int main(void) { float myNumber = 1337.1; std::cout << myNumber << std::endl; return 0; }
Let’s debug!
Let’s break on main+20 and continue to that point.
Let’s examine what value is inside r11-8. We clearly see it is 1337.09998 which approximates our value in our original c++ code. Keep in mind a float has roughly 7 decimal digits of precision and that is why we do not see 1337.1 so please remember that as we go forward.
We can also see this value in high memory.
Let’s break on main+28 and continue.
We see a strange new instruction. We see vldr and the value within r11, #8 being moved into s0. So what is s0? We have a math co-processor which has a series of additional registers that work with decimal or floating-point numbers. Here we see an example of such to which the value of 1337.09998 is being moved into s0. The vldr instruction loads a constant value into every element of a single-precision or double-precision register such as s0.
We can only see these special registers if we do a info registers all command as we do below.
Below we see the value now being moved into s0.
Next week we will dive into Hacking Float Variables.