【问题标题】:set environment variable in GDB from output of command根据命令输出在 GDB 中设置环境变量
【发布时间】:2016-04-16 00:54:18
【问题描述】:

我试图在挑战中利用缓冲区溢出,缓冲区从环境变量中获取它的值。 在 GDB 中,我知道您可以使用以下命令设置环境变量:

set environment username = test

但是我需要传递用户名变量特殊字符,所以我需要执行以下操作:

set environment username= $(echo -e '\xff\x4c......')

但是该命令没有被执行,并且用户名变量包含我写下的字面意思,有人知道将特殊字符传递给环境变量的技巧吗?

【问题讨论】:

标签: linux command-line gdb environment-variables command-substitution


【解决方案1】:

好吧,如果你真的需要从 GDB 做,这里有一个例子:

hello.c

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv) {
    printf("argv[1]=%s\n", argv[1]);
    printf("VAR=%s\n", getenv("VAR"));
    return 0;
}

例子:

$ gcc -g -o hello hello.c
$ gdb ./hello
...
(gdb) set exec-wrapper bash -c 'exec env VAR="`echo myEnv`" "$@"' --
(gdb) r myArg
...
argv[1]=myArg
VAR=myEnv

VARecho myEnv 更改为您需要的变量和命令。


但请注意,在启动 GDB 之前从 shell 设置 VAR 也可以:

$ VAR=`echo Hey there` gdb ./hello
...
(gdb) r myArg
...
argv[1]=myArg
VAR=Hey there

【讨论】:

    【解决方案2】:

    从shell命令行启动gdb时,可以指定运行哪个程序with which arguments (with --args),甚至可以借助env修改程序的环境!

    我就是这样成功的:

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

    --ex=run是让gdb立即运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      相关资源
      最近更新 更多