0

据我了解,在 Windows 中,命令行参数保存在 Process Environment Block 中。

1) 它们是如何存储在类 Unix 系统中的?

2)它们以什么格式/结构保存在那里?这个概念有通用/通用名称吗?

在大多数语言中,命令行参数已经以类似于数组的形式提供。

3)是什么将它们解析成那个,什么时候?

(例如,对于 Windows 上的 C 程序;也欢迎其他语言和平台。)

4) PEB 中的数据与“数组”中的数据有什么关系?

5) 哪些约束(例如,最大大小、ro 等)对命令行参数有效,它依赖于什么,存储此信息的内容以及它是如何(通过什么)生效的?

6) 像 Bash(带有 readline)这样的 shell 是否打算做的不仅仅是帮助人类用户以更方便的方式输入参数?IE。shell 在处理命令行参数时通常有一些更“主动”的作用吗?

7) 管道(在命令行中)如何与命令行参数相关?

8)还有其他值得一提的信息吗?

(当然,如果问题有错误的假设或不正确,请纠正我。)

4

1 回答 1

2

1)它们存储在堆栈中,由内核准备。

2)内核中有副本,用户空间的栈中有副本。在用户空间中,它是一个简单的指针数组,所有指针都指向以空字符结尾的字符串。不能比这更简单了。内核的副本仅供参考。即在/proc 中使用。如果它太长,它会被截断(对此不太确定)。

3)当您在shell中键入命令时,shell会对其进行解析。当你调用时system(),libc 会解析它。当您调用 execve 时,您在调用之前对其进行了解析。在任何情况下,内核都不会解析它。

5)堆栈的大小限制了它。ulimit -a

7) 管道和重定向不是 cmdline arg 的一部分。解析器处理这个。

于 2012-11-01T06:44:05.367 回答