gpt4 book ai didi

assembly - sscanf 是如何工作的? ( assembly 中)

转载 作者:行者123 更新时间:2023-12-01 11:49:14 24 4
gpt4 key购买 nike

我正在尝试解码从二进制文件生成的一些汇编代码。代码中调用了sscanf函数:

 400f08:       e8 13 fc ff ff          callq  400b20 <sscanf@plt>
400f0d: 89 45 fc mov %eax,-0x4(%rbp)

你能告诉我 sscanf 在汇编中是如何工作的吗?我很确定参数的数量存储在 %eax 中......它是否以相反的顺序将输入插入堆栈?所以假设我的输入是 0 1,在运行 sscanf 之后,%eax=2 并且堆栈如下所示:

1
0 <----%rsp (top of the stack)

这是正确的吗?谢谢!

最佳答案

照常遵循平台的调用约定。 32 位 Linux 默认使用 cdecl,它让您以相反的顺序将所有参数压入堆栈。 64 位 Linux 使用 System V AMD64 ABI 约定,它使用 RDIRSIRDXRCXR8R9 用于整数和地址,XMM 寄存器用于浮点参数(多余的参数进入堆栈)。

参数的数量不会被推到任何地方; AFAIK sscanf 从格式字符串中确定这一点(尽管我很高兴得到纠正)。 System V AMD64 ABI(64 位)确实指定 AL 用于存储使用的 XMM 寄存器的数量(从 0 到 8),但这仅适用于浮点参数(应该永远不要成为 sscanf 的参数。

关于assembly - sscanf 是如何工作的? ( assembly 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13096934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com