wolfgunner
wolfgunner

Reputation: 129

call dlopen from gdb

I want to load shared library (.so) from gdb, I found this command :

(gdb) call dlopen("path/to/lib.so",..)

But it doesn't work, I link my program with -ldl.

The error I get is:

No symbol "dlopen" in current context

what did I miss ?

Upvotes: 0

Views: 3408

Answers (1)

wolfgunner
wolfgunner

Reputation: 129

I found a command that resolve the half of this topic. I explain: First, you should load the shared object into the process:

(gdb) set environment LD_PRELOAD /usr/lib/libdl.so

After that, we define the file to debbuging

(gdb) file pgm

For testing, we put breakpoint in main i.e

(gdb) break main

Now, we run the program

(gdb) run

and we call dlopen

(gdb) call dlopen("/path/to/lib.so",2)

until now it's work, but when I put the last command, I have:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7de7f09 in ?? () from /lib64/ld-linux-x86-64.so.2
The program being debugged was signaled while in a function called from GDB.
GDB remains in the frame where the signal was received.
To change this behavior use "set unwindonsignal on".
Evaluation of the expression containing the function 
(_gdb_expr) will be abandoned.
When the function is done executing, GDB will silently stop.

nothing changes when I modify 'unwindonsignal to (on/off)'

What did I forget this time ?

useful

Upvotes: 1

Related Questions