C语言 用汇编来看看变量和指针实现

本文通过汇编语言探讨C语言中变量的存储方式和指针的实现,讲解了如何获取变量地址,以及如何通过汇编进行值的赋入和读取。同时,通过不同示例分析了指针在栈空间中的布局和变化。
摘要由CSDN通过智能技术生成

这篇我们用汇编看看变量咋存储的,不需要知道太多汇编语句,懂了下面几条我们就可以出发了!

leal S,D  //D = &S  这个指令大部分出现在要存储指针的情况
movb $0x05, %al    //R[al] = 0x05
movl %eax, -4(%ebp)   //mem[R[ebp] -4] = R[eax]
movl -4(%ebp), %eax    //R[eax] = mem[R[ebp] -4]
movl $LC0, (%esp)   //mem[R[esp]] = $LC0 (a label)


Makefile

你需要加上 -g加入调试信息

print:aa
    ./aa
aa: aa.o
    gcc -g -o  aa aa.o                                                                                  
aa.o: aa.c
    gcc -g -c  aa.c


例子一:最简单的开始

#include <stdio.h>   
int main()  
{  
    int c=55;
    int a=16; 
}

GDB 中输入 "layout asm" 能够实时的打开汇编窗口
   │0x8048387 <frame_dummy+23>      je     0x8048392 <frame_dummy+34>                                  │
   │0x8048389 <frame_dummy+25>      movl   $0x8049524,(%esp)                                           │
   │0x8048390 <frame_dummy+32>      call   *%eax                                                       │
   │0x8048392 <frame_dummy+34>      leave                                                              │
   │0x8048393 <frame_dummy+35>      ret                                                                │
   │0x8048394 <main>                push   %ebp                                                        │
   │0x8048395 <main+1>              mov    %esp,%ebp                                                   │
   │0x8048397 <main+3>              sub    $0x10,%esp                                                  │
   │0x804839a <main+6>              movl   $0x37,-0x8(%ebp)//把55放到ebp值-8的地址内
   │0x80483a1 <main+13>             movl   $0x10,-0x4(%ebp)                             │
B+>│0x80483a8 <main+20>             mov    $0x0,%eax                            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值