实验——系统调用execve时的用户空间堆栈情况

本文通过调试示例程序探究了在Linux系统调用execve执行新程序时,子进程用户空间堆栈的情况。详细分析了参数如何传递,从堆栈地址0xbfffff04开始,展示了参数列表的内容,包括待执行文件名./test1及其后续的参数。同时,文中引用《深入理解Linux内核》进行理论解释,并提出环境字符串在简单程序中未体现的问题,引发对环境变量处理的思考。
摘要由CSDN通过智能技术生成

创建的新的子进程在调用execv执行新的程序段(开始独立于父进程执行)的时候,子进程用户空间栈的安排应该是怎样的呢?参数是如何传递的呢?

编写如下两个程序:

程序一:test1.c

#include <stdio.h>
int main(int args, char* argv[]) {
	char s[5] = "ABCD";
	while(1) {
		printf("%s\n", s);
		printf("%s\n", argv[1]);	
	}
	return;
}

gcc -g -o test1 test1.c

程序二:test.c

#include "../include/apue.h"

void main() {
  pid_t pid;
  char *args[] = {"/bin/echo", "Hello", "World!", NULL};
  if((pid = fork()) < 0) 
	err_sys("fail to fork!");
  else if(pid == 0) {
        execve("./test1", args, NULL);
  }
}
gcc -g -o test test.c

我们来调试一下parent,涉及到多进程程序的调试,可以参考文章http://w

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值