当前位置: 技术问答>linux和unix
如何查看子进程调用其它程序后的程序段与数据段地址
来源: 互联网 发布时间:2016-05-17
本文导语: 我有如下程序 …… if(child_pid1==0) {execlp("echo","echo","child process1",(char *)0); perror("execl error. n"); exit(1); } …… 我想查看子进程调用其他程序前后的数据段与程序段地址,请问改怎么写? 我原本是想在execlp...
我有如下程序
……
if(child_pid1==0)
{execlp("echo","echo","child process1",(char *)0);
perror("execl error. n");
exit(1);
}
……
我想查看子进程调用其他程序前后的数据段与程序段地址,请问改怎么写?
我原本是想在execlp后面用
printf("etext:%8xt edata:%8xt end:%8xnn",&etext,&edata,&end);
的命令来显示地址的,为什么不执行?
……
if(child_pid1==0)
{execlp("echo","echo","child process1",(char *)0);
perror("execl error. n");
exit(1);
}
……
我想查看子进程调用其他程序前后的数据段与程序段地址,请问改怎么写?
我原本是想在execlp后面用
printf("etext:%8xt edata:%8xt end:%8xnn",&etext,&edata,&end);
的命令来显示地址的,为什么不执行?
|
if(child_pid1==0)
{execlp("echo","echo","child process1",(char *)0);
perror("execl error. n");
exit(1);
}
execlp执行后,执行的程序将被载入内容,将调用进程的数据段与代码段覆盖,所以perror()与exit(1)是不会被执行的。
在调用exec函数后,子进程的数据段地址与代码段地址应该是不会改变的。
{execlp("echo","echo","child process1",(char *)0);
perror("execl error. n");
exit(1);
}
execlp执行后,执行的程序将被载入内容,将调用进程的数据段与代码段覆盖,所以perror()与exit(1)是不会被执行的。
在调用exec函数后,子进程的数据段地址与代码段地址应该是不会改变的。
|
如楼上所说,EXEC后是看不到的.
想要看数据段和代码段地址,不需要执行程序的,直接看目标文件就是了,不过首先你得了解一下ELF格式
想要看数据段和代码段地址,不需要执行程序的,直接看目标文件就是了,不过首先你得了解一下ELF格式