小编C0D*_*3IL的帖子

从机器的角度理解汇编程序中的指针

这是我在 godbolt 编译器上编写的一个基本程序,它很简单:

#include<stdio.h>

void main()
{
    int a = 10;
    int *p = &a;
    printf("%d", *p);
}
Run Code Online (Sandbox Code Playgroud)

编译后我得到的结果:

.LC0:
        .string "%d"
main:
        push    rbp
        mov     rbp, rsp
        sub     rsp, 16
        mov     DWORD PTR [rbp-12], 10
        lea     rax, [rbp-12]
        mov     QWORD PTR [rbp-8], rax
        mov     rax, QWORD PTR [rbp-8]
        mov     eax, DWORD PTR [rax]
        mov     esi, eax
        mov     edi, OFFSET FLAT:.LC0
        mov     eax, 0
        call    printf
        nop
        leave
        ret
Run Code Online (Sandbox Code Playgroud)

问题:推送 rbp,通过创建 16 字节块来创建堆栈帧,如何从寄存器将值移动到堆栈位置,反之亦然,LEA 的工作是如何计算出地址,我得到了这部分。

问题:

            lea     rax, [rbp-12]
            mov     QWORD …
Run Code Online (Sandbox Code Playgroud)

c assembly stack gcc pointers

1
推荐指数
1
解决办法
883
查看次数

标签 统计

assembly ×1

c ×1

gcc ×1

pointers ×1

stack ×1