【发布时间】:2020-08-08 12:03:36
【问题描述】:
x86-64 系统的 C ABI 如下:寄存器 rdi、rsi、rdx、rcx、r8、r9 用于按顺序传递参数。堆栈用于第 7 个参数。返回值使用 rax 寄存器。 rsp 寄存器包含堆栈指针。
吹函数bloop中定义了多少个函数参数?
我认为只有一个函数参数rdi。这是正确的吗?
在下面的函数bloop中声明了多少个局部变量(不是参数)?
我认为没有局部变量。这是正确的吗?
0000000000001139 <bloop>:
1139: 55 push %rbp
113a: 48 89 e5 mov %rsp,%rbp
113d: 48 83 ec 10 sub $0x10,%rsp
1141: 48 89 7d f8 mov %rdi,-0x8(%rbp)
1145: 48 83 7d f8 29 cmpq $0x29,-0x8(%rbp)
114a: 7f 1b jg 1167 <bloop+0x2e>
114c: 48 8b 05 dd 2e 00 00 mov 0x2edd(%rip),%rax
1153: 48 89 c6 mov %rax,%rsi
1156: 48 8d 3d b5 0e 00 00 lea 0xeb5(%rip),%rdi
115d: b8 00 00 00 00 mov $0x0,%eax
1162: e8 c9 fe ff ff callq 1030 <printf@plt>
1167: 90 nop
1168: c9 leaveq
1169: c3 retq
【问题讨论】:
-
mov是一条指令。mov作为函数参数是什么意思?与nop相同。这也是一个指令。 -
鉴于您对汇编的基本概念(指令、寄存器、函数参数、变量等)感到困惑,阅读教程以正确理解基本术语可能会有所帮助。
-
很抱歉给您带来了困惑。我的意思是
rdi中的mov作为函数参数。
标签: assembly x86-64 reverse-engineering