Yes, that's pretty close...
You can also think of dynamic binary modification as a process level emulation. This gives you a lightweight tool that enables you to observe (e.g. profiling) and tinker (e.g. instruction hooking) a binary at run time.
Sometimes you might not have the high-level source code of the binary. In case you want to better understand its behavior, you could run it with a DBM tool and let it print out the ordered sequence of the function calls at run time for a given input (sometimes this could take a lot of analysis if you want to do it statically -- due to all the branch instructions, and for each branch instruction, you might need to treat every program flow equally...).