我有一个环境variables,我试图得到它的内存地址。 我有
memset(&buffer,0x90,517); memcpy(&buffer[517-strlen(shellcode)],shellcode,strlen(shellcode)); setenv("EGG",buffer,1); putenv(buffer); printf("EGG address: 0x%1xn",getenv("EGG")); system("bash");
它打印的内存地址是0x804b00c 。 这看起来不正确。 我用GDB x / x 0x804b00c检查了它。 它说在0x804b00c不能访问内存。 所以getenv基本上给我垃圾回忆。 我已经调用了env来确保EGGvariables已经设置好了。
为什么我不能得到EGG的内存地址?
Opengl linux未定义的基本function参考
呼叫被被叫方拒绝
无法设置图像打开我的程序,为什么不?
如何通过代理服务器环境获得非标准服务?
系统返回码()
挂钩sendto()导致崩溃取决于代码sorting
如何以编程方式打开/closuresCaps Lock,Scroll Lock和Num Lock
感谢这个问题,另一个学习的机会!
#include <stdio.h> #include <stdlib.h> void main() { const char shellcode[] = "EGG=whatever"; putenv(shellcode); printf("EGG address @%08Xn",getenv("EGG")); printf("EGG value is <%s>.",getenv("EGG")); }
此代码在Eclipse / Microsoft C编译器环境中工作。 请注意,我不必调用setenv或bash或发出系统命令。 在这个例子中,为进程设置了环境变量EGG。
另外,请注意EGG的地址和实际值之间的差异。 在第一种情况下,getenv返回一个char * ,它是指向存储的指针,由printf语句的%08X部分定义,而%s实际上是对getenv返回的char指针的引用。 此外,通过#include <stdlib.h>语句找到getenv()。
初步的答案是你有小小的硬件。 因此,单词(4个字节,在字边界对齐)与半字和字节中的半字和字节一起存储,SWAPPED。 0x0804b00c更可能真的在0x0cb04b80。
将尝试写我自己的C代码做你想做的,并会发表第二个音符。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。