在这个例子中的C程序,我打印出了什么地址?
int main (int argc, char* argv[]) {
printf("%p\n");
return 0;
}
我很困惑,究竟我打印。每次运行程序时,它打印的地址都会发生变化,所以我认为地址与堆栈有关,比如可能从哪里开始或什么地方,但我不确定。
编辑:上面的程序来自Michael Howard和David LeBlanc(2003)编写的“编写安全代码”(第2版)的简单缓冲区溢出攻击的更详细示例。在foo方法中,第一个printf表示“我的堆栈看起来像:\ n%p ...等等,所以我想知道这是如何实现的,因为没有参数传递给printf函数,但我在这里问了,因为可能有这是我失踪了。我的道歉不包括其在原岗位。
#include <stdio.h>
#include <string.h>
void foo (const char* input)
{
char buf[10];
printf("My stack looks like:\n%p\n%p\n%p\n%p\n%p\n%p\n\n");
strcpy(buf, input);
printf("%s\n", buf);
printf("Now the stack looks like:\n%p\n%p\n%p\n%p\n%p\n%p\n\n");
}
void bar (void)
{
printf("Augh! I've been hacked!\n");
}
int main(int argc, char* argv[])
{
printf("Address of foo = %p\n", foo);
printf("Address of bar = %p\n", bar);
if (argc != 2) {
printf("Please supply a string as an argument!\n");
return -1;
}
foo (argv[1]);
return 0;
}
@LeeDanielCrocker因为OP没有意识到它是错误的代码。这就是他/她提出这个问题的原因。 – Daniel 2014-10-28 20:28:43