一般 *** 作系统中,进程的每个段内部地址均连续,但段与段的相对次序可能不同。
用C/C++语言写一个小程序,探测一个 *** 作系统中进程的各段的相对位置(输出次序即可)
代码 C语言
#include
#include
#include
int i = 5, j;
int stack,BSS,data,code,heap;
void subfunc(int a)
{
stack = &a;//stack
}
int main(void)
{
int tmp = i - 1;
char *p = "abcde";
int a[5];
data = &i;
BSS = &j;
p = malloc(sizeof(a) / sizeof(a[0]));
heap = p;//heap
for (; tmp >= 0; tmp--)
{
p[tmp] = a[tmp];
}
code = main;//code
subfunc(tmp);
free(p);
int sor[5],N[5];
sor[0] = stack;
sor[1] = heap;
sor[2] = data;
sor[3] = code;
sor[4] = BSS;
for(int k=0;k<5;k++)
{
N[k] = sor[k];
}
char * str[5] = {"stack","heap","data","text","BSS"};
//sort
int temp;
for(int k=0;k<5;k++)
{
for(int n=k+1;n<5;n++)
{
if(sor[k]<sor[n])
{
temp = sor[k];
sor[k] = sor[n];
sor[n] = temp;
}
}
}
printf("Segment\t Address\n");
for(int k=0;k<5;k++)
{
for(int n=0;n<5;n++)
{
if(sor[k]==N[n])
{
printf("%s \t %d\n",str[n],N[n]);
}
}
}
return 0;
}
测试
探测结果:
参考:http://clem.is-programmer.com/posts/7769.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)