【发布时间】:2012-01-22 21:32:35
【问题描述】:
我有一个由 main 调用的函数。假设函数的名称是funct1。 funct1 调用另一个名为 read_input 的函数。
现在假设funct1 开头如下:
push %rbp
push %rbx
sub $0x28, %rsp
mov $rsp, %rsi
callq 4014f0 read_input
cmpl $0x0, (%rsp)
jne (some terminating function)
所以只是几个问题:
- 在这种情况下,
read_input是否只有一个参数,即%rbx? - 此外,如果堆栈指针减少
0x28,这意味着一个大小为0x28的字符串被推送到 堆? (我知道这是一个字符串)。 - 还有什么意义
mov %rsp, %rsi在调用函数之前? - 最后,当
read_input返回时,返回值放在哪里?
感谢您提出的问题,但我刚刚开始学习 x86!
【问题讨论】:
-
你的代码来自哪里?你是从 C 源代码生成的吗?
-
减少堆栈指针可能意味着局部变量被分配在堆栈上。
-
To 4:可能返回值在栈上,因为在调用 read_input 之后的指令中将栈顶与 0 进行比较。
-
@Giorgio 是使用 objdump -d 从 C 源代码生成的。
-
@Giorgio 我只能访问 C 代码的
main函数,其余的对我隐藏。我不应该看到它。