【问题标题】:Do I need to copy command line arguments in assembly我需要在程序集中复制命令行参数吗
【发布时间】:2021-07-03 03:46:06
【问题描述】:

我使用 fasm,但也许这个问题不依赖于汇编语言版本。命令行参数字符串存储在哪里?我需要在程序启动时复制这个字符串还是保证它无限期地存在?我的程序中的缓冲区溢出等可以覆盖原来的吗?

【问题讨论】:

  • 您为什么架构和操作系统编程?细节各不相同,但通常操作系统会将命令行参数放在堆栈上供您使用。
  • 操作系统:Win7 x64 ___
  • 很遗憾我对 Windows 不熟悉。也许其他人可以帮助你。
  • 我的程序中的缓冲区溢出等是否会覆盖原始程序? - 如果你明白了,那么这一切都可以了。根本不需要缓冲区溢出

标签: windows assembly x86-64 command-line-arguments


【解决方案1】:

命令行参数是process environment block (PEB) 的一部分,在进程启动后不会更改。可以通过GetCommandLineW访问命令行,也可以自己解析参数。还有CommandLineToArgvW 会为你做一些解析。

字符串数据在可写内存中,所以是的,如果您有修改一个 arg 的错误/不安全代码,其中的溢出可能会修改另一个。

【讨论】:

  • 一般来说是的,在广义上的 PEB 中(更准确地说是RTL_USER_PROCESS_PARAMETERS,但这没有任何改变)。是的,内置的 Windows dll 不会改变这一点。但没有什么能阻止其他代码(比如自己)修改命令行,如果需要
猜你喜欢
  • 2015-10-07
  • 1970-01-01
  • 2013-12-04
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
相关资源
最近更新 更多