【问题标题】:what APIs are used to get command line arguments哪些 API 用于获取命令行参数
【发布时间】:2021-10-09 21:51:59
【问题描述】:

我有几个关于哪些 API 采用命令行参数的问题?通过使用 x64dbg 调试。我看到类似 之类的函数。真正接受命令行参数数据的 API 是什么? 对不起,我的表达混乱,我不懂英语,所以我必须使用谷歌翻译:>

【问题讨论】:

  • 一些工具建立在argcargv 的参数上。这些构成了非常基本的 API (int main(int argc, char **argv))。
  • 是的,也许。但是我正在寻找一些低级别的东西,例如机器代码。那些 API 是什么,在哪个 .dll 文件等......
  • 标准库中的代码在托管实现中在main() 之前调用,负责填充argcargv。这取决于您的特定编译器/操作系统。在独立实现中,没有 API。
  • low level like machine code for example. what are those API 那么机器码对应哪台机器?你可能想研究crt0

标签: c api


【解决方案1】:

C 语言要求命令行参数可用作main 函数的参数:int main(int argc, char *argv[]) 其中:

  • argc 是argv 数组的非空元素个数
  • argv 指向一个至少包含argc+1 字符指针的数组,第一个argc 指向各个参数,最后一个(argv[argc]) 为NULL。按照惯例,第一个参数 argv[0] 应该是命令名本身

但在 Windows 中,GUI 程序通常没有 main 函数,而是带有不相关参数 (ref.) 的 WinMain(ANSI 字符串版本)或 wWinMain(UNICODE 字符串版本)。在这种情况下,可以使用 (Win32) API 函数 GetCommandLineA (ANSI) 或 GetCommandLineW (UNICODE) 提取未拆分的命令行。事实上,现实世界的程序只使用GetCommandLine,它是一个别名,它会根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本 (ref.)。

如果要拆分命令行,只有 unicode API 可用:CommandLineToArgvW

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2018-06-14
    • 2016-05-02
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多