在x86汇编中在栈上分配变量。rbp和rsp vs esp和ebp。

在x86汇编中在栈上分配变量。rbp和rsp vs esp和ebp。

我最近开始学习汇编语言,并决定反汇编一些自己的可执行文件进行学习。我注意到在线资源经常引用esp和ebp,即堆栈和基指针。我写了这个程序:

int comp(int a, int b) {

return a == b;

}

int main() {

int a = 1;

int b = 2;

comp(a, b);

}

在Radare 2中,这个代码反汇编成:

0x0040050e 55 push rbp

| 0x0040050f 4889e5 mov rbp, rsp

| 0x00400512 4883ec10 sub rsp, 0x10

| 0x00400516 c745f801000. mov dword [rbp-0x8], 0x1

| 0x0040051d c745fc02000. mov dword [rbp-0x4], 0x2

| 0x00400524 8b55fc mov edx, [rbp-0x4]

| 0x00400527 8b45f8 mov eax, [rbp-0x8]

| 0x0040052a 89d6 mov esi, edx

| 0x0040052c 89c7 mov edi, eax

| 0x0040052e e8c3ffffff call sym.comp

| sym.comp(unk)

| 0x00400533 b800000000 mov eax, 0x0

| 0x00400538 c9 leave

\ 0x00400539 c3 ret

为什么要使用rbp和rsp?这只是我的编译器喜欢的方式吗?另外,为什么使用rbp-value在堆栈上创建空间,而不是使用rbp + value来分配更多空间?

相关推荐

陌陌添加位置的详细步骤解析
36566666

陌陌添加位置的详细步骤解析

⌛ 07-16 👁️ 6556
蝴蝶扣怎么打开
365速发在线注册

蝴蝶扣怎么打开

⌛ 07-14 👁️ 9217
红米Note3官网几点开抢?红米Note3开售时间是多久?红米Note3需要提前预约吗?