gpt4 book ai didi

c - 获取环境变量的地址

转载 作者:太空狗 更新时间:2023-10-29 11:09:50 29 4
gpt4 key购买 nike

我有一个环境变量,我正在尝试获取它的内存地址。我有

memset(&buffer, 0x90, 517);
memcpy(&buffer[517-strlen(shellcode)],shellcode,strlen(shellcode));
setenv("EGG",buffer,1);
putenv(buffer);
printf("EGG address: 0x%1x\n", getenv("EGG"));
system("bash");

它打印出的内存地址是0x804b00c。那看起来不正确。我用 GDB x/x 0x804b00c 检查了它。它说无法访问 0x804b00c 处的内存。所以 getenv 基本上是给我垃圾内存。我已调用 env 以确保设置了 EGG 变量,而且确实如此。

为什么我获取不到EGG的内存地址?

最佳答案

感谢这个问题,另一个学习机会!

将您的代码提炼为以下内容:

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

void main()
{
const char shellcode[] = "EGG=whatever";

putenv(shellcode);

printf("EGG address @%08X\n", getenv("EGG"));

printf("EGG value is <%s>.", getenv("EGG"));

}

此代码在 Eclipse/Microsoft C 编译器环境中运行。请注意,我不必调用 setenv 或 bash 或发出系统命令。在本例中,为进程设置了环境变量 EGG。

此外,请注意 EGG 的地址与其实际值之间的差异。在第一种情况下,getenv 返回一个 char *这是一个指向由 %08X 定义的存储的指针printf 语句的一部分,而 %s本质上取消引用 getenv 返回的 char 指针。此外,通过 #include <stdlib.h> 找到 getenv()声明。

关于c - 获取环境变量的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14885716/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com