【问题标题】:Push command line arguments (C) on the call stack?在调用堆栈上推送命令行参数(C)?
【发布时间】:2013-03-07 00:01:29
【问题描述】:

我想知道命令行参数的参数传递是如何工作的?我的组件有点生锈。我知道一个函数的参数是由它的调用者推入堆栈的。命令行参数呢?它们是如何被推入主函数的堆栈框架的?

谢谢

【问题讨论】:

  • 我在去年了解了这一切,但并没有完全坚持下去。然而,我确实了解到,您可以通过编写简单的函数并通过带有 -S 标志的 g++ 运行它们来去地方,这会产生汇编代码作为输出。
  • 没有你所在的搜索引擎?
  • 谷歌搜索..但只找到有关常规参数的答案,而不是命令行参数..

标签: command-line parameters callstack


【解决方案1】:

在标准 C 中,main 至少可以使用两个参数——第一个是命令行参数的数量,第二个是指向它们的指针数组。它们出现在堆栈上的顺序是实现定义的,但 C 的一个常见约定是将它们从右向左推送,因此后续 args 出现在更高的地址。

就原始组装而言,虽然...就像大多数与组装相关的东西一样,它依赖于平台。 Linux 会为您解析命令行参数,并在堆栈上传递指向它们的指针。在 Windows 中,通过调用操作系统(GetCommandLineAGetCommandLineW)检索命令行,然后您自己解析它。如果您在 Windows 应用中使用 C 或 C++,命令行也是 WinMain 的参数之一。

【讨论】:

  • @user1640669:同样,这取决于平台。由于您甚至还没有提及有关您的特定环境的任何内容,因此我无法确定它的作用。 Linux 显然可以(至少在某种程度上);窗户没有。其他的,我不知道。这就是我能说的,直到你想出更多的信息。 :P
猜你喜欢
  • 2018-10-16
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
  • 2014-08-04
  • 2012-03-04
相关资源
最近更新 更多