Fantastic Symbols and Where to Find Them (Part 2)

In the first blog post, we learned about the fantastic symbols (debug symbols), how the symbolization process works, and lastly, how to find the symbolic names of addresses in a compiled binary.

The actual location of the symbolic information depends on the programming language implementation the program is written in. We can categorize the programming language implementations into three groups: compiled languages (with or without a runtime), interpreted languages, and JIT-compiled languages.

A Brief Note on Log4perl

The Java world had an....interesting weekend when security researchers revealed on December 9 a vulnerability in the popular Apache Log4j 2 software library for recording and debugging events. Systems as diverse as Amazon Web Services, Apple iCloud, and the Minecraft video game could be exploited to run arbitrary code on a server merely by sending a specially-crafted string of text. Information technology professionals have been scrambling ever since the initial disclosure to patch, upgrade, reconfigure, or otherwise protect affected servers. It's bad, and past unpatched vulnerabilities like this have been responsible for the exposure of millions of people's sensitive data.

Many Perl applications use the similarly-named and ‑designed Log::Log4perl library, and the good news is that, as far as I can tell, the latter doesn't suffer from the type of vulnerability described above. This doesn't mean poorly-written or ‑configured Perl-based systems are immune to all exploits, just this particular one. You should be safe to continue using Log4perl unless someone has deliberately configured it otherwise, and in fact, my work uses it extensively.

Reverse Debugging – What You Should Know

Reverse debugging is a debugging system that makes it possible to stop code execution and move backward (and forward) in the code’s history to discover the cause of failure in a program. Reverse debugging involves remote debugging, debugging on the same machine, or debugging on a simulator.

Not all debuggers are capable of reverse debugging it is a vital tool to have in your arsenal. It empowers developers to record program operations and then rewind and replay to check the program state for failures. 

9 Best Practices for Effective Code Review

The code writing process requires great mental effort and concentration, which makes it very difficult to achieve a flawless result. However, it’s important to remember there is no such thing as perfect code — programmers should strive to achieve "better" code that constantly can be improved. Reviewing the code author’s work can’t guarantee the prevention of all bugs, but it can protect users from experiencing it. That’s why integrating the code review into the development process helps to deliver high-quality applications that companies expect to get while outsourcing their software development.

Code review is a systematic examination of software source code used to detect mistakes, spot early bugs, track possible defects, and improve general code quality and consistency — this process helps code remain more maintainable. Conducted by fellow programmers and quality assurance specialists, code review aims to accelerate and streamline the software development process. The clean, well-designed, and easy-to-maintain codebase is the foundation for any high-quality, secure, and reliable application.