簡體   English   中英

從命令輸出在 GDB 中設置環境變量

[英]set environment variable in GDB from output of command

我試圖在挑戰中利用緩沖區溢出,緩沖區從環境變量中獲取它的值。 在 GDB 中,我知道您可以使用以下命令設置環境變量:

set environment username = test

但是我需要傳遞用戶名變量特殊字符,所以我需要做類似的事情:

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

但是該命令沒有執行,用戶名變量實際上包含我寫下的內容,有人知道將特殊字符傳遞給環境變量的技巧嗎?

好吧,如果你真的需要從 GDB做,這里有一個例子:

你好ç

#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

更改VAR並將echo myEnv為您需要的變量和命令。


但請注意,在啟動 GDB 之前從 shell 設置VAR也有效:

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

當從 shell 命令行啟動 gdb 時,您可以指定運行哪個程序,使用哪些參數(使用--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立即運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM