【发布时间】:2018-12-17 08:19:27
【问题描述】:
您好,我使用的是 Ubuntu,刚刚关闭了我的 ASLR 以检查 2 个文件(dumb.c 和dumber.c)
dumb正在创建文件并输入变量地址
笨蛋正在阅读并打印我有一个问题,无法理解为什么在某些计算机上打印 16 而其他计算机打印 32767
哑巴.c
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
int i = 7;
int j = 12;
int k = 15;
int *p = &j;
FILE *fp;
if(0 == (fp = fopen("dumb.txt", "w")))
{
printf("well, that didn\'t work!\n");
return -1;
}
fprintf(fp, "%p\n", (void*)p);
printf("Address from Dumb: %p, value: %d\n", (void *)p, *p);
if(fclose(fp))
{
printf("oh well.");
return -1;
}
sleep(300);
return EXIT_SUCCESS;
}
dumber.c
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
int i = 8;
int j = 16;
int k = 32;
int *p = &j;
FILE *fp;
if(0 == (fp = fopen("dumb.txt", "r")))
{
printf("well, that didn\'t work!\n");
return -1;
}
fscanf(fp, "%p\n", &p);
if(fclose(fp))
{
printf("oh well.");
return -1;
}
printf("\nDumber Address: %p\n", (void *)p);
printf("p points to: %d\n", *p);
return EXIT_SUCCESS;
}
【问题讨论】:
-
fscanf(fp, "%p\n", &p);...你确定吗?&不是额外的吗? -
谢谢你的回答,是的,我很确定.. :/
-
在多个
dumber运行中使用的dumb.txt文件(生成一次)是否相同? -
请澄清并给我们所有打印的值...哪些打印给出了 16 或 32767?
-
再次感谢您的快速回复!!,在dumber.c 文件中,值p 的pritnf 指向我的笔记本电脑上我得到32767 而在另一台计算机上得到16 在同一行。