As the title says, ltrace does not work properly on my system. It shows no output in most cases, like
$ltrace ls
[usual ls output]
+++ exited (status 0) +++
$gcc hello.c
$ltrace ./a.out
Hello world!
+++ exited (status 0) +++
I'm using the latest ltrace version (from package 0.7.3-5.1ubuntu4
), I even tried recompiling from source with no difference.
I'm using Ubuntu 16.10
, kernel 4.8.0-42-generic
. gcc version is 6.2.0
.
Weird thing is, binaries downloaded from the Internet seem to work, correctly displaying the library calls.
What am I missing? Is anyone able to reproduce the issue?
This may have to do with binaries being compiled with "relro now". I created a quick test program (I'm using Ubuntu 16.04):
If I compile it with
gcc -O2 test.c -o test
then ltrace works:However when I compile with
gcc -O2 test.c -Wl,-z,relro -Wl,-z,now -o test2
then it doesn't:You can check if a binary was compiled like so using
scanelf
from thepax-utils
package on Ubuntu:Note the
LAZY
(ltrace works) versusNOW
(ltrace doesn't).There is a little bit more discussion (but no resolution) here:
https://bugzilla.redhat.com/show_bug.cgi?id=1333481