I have a closed source binary with debug symbols compiled against QT 5.3.2. I tried to run it on Debian Bookworm, using the QT version in the repository (5.15.8). It starts up but crashes with a segmentation fault. I then used gdb and IDA to figure out what was going on, and for some reason the destructor QDebug::~QDebug
is included in the binary, while the constructor is called from the imported QMessageLogger::debug
. During the destructor, there is a null pointer accessed.
I have never seen something like this before, so I am wondering: How can the destructor of a library suddenly end up in the main binary? I assume the only way to fix it would be to compile the matching QT version, so the destructor uses the correct addresses/offsets within the object?
1