我有一个环境变量,我正在尝试获取它的内存地址。我有
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/