c - 这两个环境变量 (a) environ b) envp) 的实际字符串存储在哪里?
问题描述
我知道在运行时,environ
是一个全局指针变量,最终存储在数据部分中。envp
是main中定义的局部变量,所以存放在栈中或者栈顶。如果我错了,请纠正我。
但问题是,这两个环境的实际字符串信息存储在哪里?两者都在堆栈中?
我附上使用这两个环境变量的两个代码段。对于environ
:
#include <stdlib.h>
#include <stdio.h>
extern char **environ;
int main(int argc, char **argv)
{ char **env_variable_ptr;
env_variable_ptr = environ;
while (*env_variable_ptr != NULL)
{ printf("%s\n", *env_variable_ptr);
env_variable_ptr++;
}
printf("\n");
}
对于envp
:
int main(int argc, char **argv, char **envp){
while(*envp != NULL){
printf("%s\n", *envp);
envp++;
}
printf("\n");
}
解决方案
参数向量、环境字符串和一些额外信息(基于 ELF 的系统上的“辅助向量”)通常放置在初始线程堆栈的底部之上。之所以使用这个位置,是因为操作系统必须在进程启动期间为堆栈创建一个读写地址范围并向其写入内容,因此它也可以将所有因调用而异的数据放在那里。
这可以在您的 CPU 和操作系统的“特定于处理器的应用程序二进制接口”(psABI) 文档中指定。例如,请参阅x86-64/ELF psABI的“进程初始化”部分,该部分用于大多数基于 x86-64 的操作系统(Windows 除外),特别是第 32 页,其中讨论了“信息块。 "
推荐阅读
- javascript - 有没有办法以编程方式检查 iframe 的元素?
- python - 如何持续跟踪我钱包中特定代币的余额
- amazon-web-services - 如何最好地维护 Redshift 集群
- python - matplotlib 散点图,带有非连续 y 轴刻度,数据类型为整数
- php - 当在 PHP 中命中 API 端点时,如何编写 HTML 模板并使用自定义用户名作为 files_names 创建该 HTML 文件?
- javascript - django中使用choiceField的动态表单
- android - Android Fragment 避免在后按时刷新
- c# - 从 SOAP c# 扩展 wsdl 类
- python - Python 没有在生成的进程上清理 TemporaryDirectory
- azure - Azure - 使用 replyUrlsWithType 创建应用注册