【问题标题】:In asm, how does printf() knows how many variables are being passed in?在 asm 中,printf() 如何知道传入了多少个变量?
【发布时间】:2012-10-27 15:45:16
【问题描述】:

在汇编语言的世界里,当你调用printf()时,你会这样做:

push arg_N
push arg_N-1
..
push arg1
push format
call _printf

但是这里的printf() 怎么知道传入了多少个参数呢?

【问题讨论】:

  • printf 分析格式字符串以了解有多少参数以及预期的类型。这也是为什么不匹配的格式字符串和参数会导致非常奇怪的问题。
  • 没有,这就是为什么如果你不保持你的参数和你的格式字符串同步它可能是不安全的。格式字符串就是他们所要做的。
  • 请注意,它甚至不能在被调用者弹出参数的调用约定中实现(例如 _pascal)。只有调用者可以知道有多少参数。

标签: c assembly compiler-construction printf


【解决方案1】:

它只是沿着字符串走,在找到 %-format 项目时使用参数。如果参数少于 %-items,就会发生可怕的事情。

【讨论】:

    猜你喜欢
    • 2019-05-07
    • 2020-07-09
    • 2017-03-24
    • 2022-11-22
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多