Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set environment variable within GDB using shell command?

I want to run gdb with only a single variable MyVar in its environment.

However, the variable's contents are rather complex, containing non-printable ASCII, and so is best set using e.g. MyVar=$(python -c 'print("\xff...")').

I'm left with two options:

  1. Set the MyVar in bash before running gdb. Then inside gdb, remove all other environment variables individually using unset environment NAME (very tedious!).

  2. Clear all environment variables using unset environment. Then inside gdb, set MyVar using a shell command (as above) (how?)

Any ideas?

like image 895
Shuzheng Avatar asked Apr 09 '19 12:04

Shuzheng


2 Answers

Option 2 is possible.

(gdb) unset environment
(gdb) python gdb.execute("set environment Myvar=\xff")
(gdb) show environment 
Myvar=ÿ

Option 1 can be done with env(1).

$ env -i MyVar=$(python -c 'print("xyz")') gdb
(gdb) show environment
MyVar=xyz
LINES=35
COLUMNS=80

Then you just have to clear LINES and COLUMNS.

like image 63
jamieguinan Avatar answered Oct 06 '22 22:10

jamieguinan


When starting gdb from shell command-line, you can specify which program to run, with which arguments (with --args), and even modify the environment of the program with the help of env!

I just did it successfully like this:

gdb --ex=run --args env LD_BIND=now LD_DEBUG=libs \
apt-get install --yes $(cat pkgs-to-install-to-crash-apt)

--ex=run is to ask gdb to run it immediately.

In your case, you would do env -i.

It differs from the suggested env -i VAR=... gdb program in that only your examined program is under the special environment, but not gdb.

like image 28
imz -- Ivan Zakharyaschev Avatar answered Oct 06 '22 23:10

imz -- Ivan Zakharyaschev