【问题标题】:How do I run a program under GDB with an environment variable set to the contents of a file?如何在 GDB 下运行将环境变量设置为文件内容的程序?
【发布时间】:2020-09-27 13:15:41
【问题描述】:

如何在设置环境变量的情况下运行 gdb,如下例所示?

gdb (env -i SHELLCODE="`cat ~/shellcode.bin`" ./vulnerable)

【问题讨论】:

    标签: c linux linux-kernel gdb shellcode


    【解决方案1】:

    一般情况下,您可以在启动要调试的程序之前使用set environment command

    set environment MYVAR abc
    

    但是,从您的问题来看,您似乎想从文件中获取环境变量的内容,而 GDB shell 无法做到这一点。但是,您可以使用已设置的变量启动 GDB,并且在启动程序进行调试时将保留该变量。您可以使用show environment 命令验证这一点。

    $ MYVAR="$(cat x.txt)" gdb ./vulnerable
    

    或:

    $ export MYVAR="$(cat x.txt)"
    $ gdb ./vulnerable
    

    甚至使用env:

    $ env -i MYVAR="$(cat x.txt)" gdb ./vulnerable
    

    然后:

    (gdb) show environment MYVAR
    MYVAR=...
    (gdb) run
    

    您可能需要检查您的 shellcode 是否不包含 \x00 字节,因为这可能会导致一些问题(不是 100% 确定,因为我没有测试它)。

    【讨论】:

    • set env MYVAR=abc 设置一个名为 MYVAR=abc 的变量。您想要set env MYVAR abc 或(等效)set env MYVAR = abc= 符号周围有空格)。
    • @EmployedRussian 我链接的 GDB 文档指出 “'=' 周围的空格在这里用于清楚起见。实际上并不需要它们”。你说不是这样吗?反正我已经编辑过了。
    • 嗯,这一定已经修复了——我没有看到使用 GDB-10.0 的问题,但我很确定这在 GDB-7.x 版本中不起作用。
    猜你喜欢
    • 1970-01-01
    • 2012-09-15
    • 2019-01-09
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多