C之bssdata存储位置区分,使用objdump -t反汇编查看变量所处存储位置

Posted weiyouqing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C之bssdata存储位置区分,使用objdump -t反汇编查看变量所处存储位置相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stdlib.h>

int wei;               //未初始化的全局变量,bss区
int you = 0;            //初始化为0的全局变量,bss区
int qing = 1;            //初始化非0的全局变量,data区
int main()
{    
    static int ai;         //未初始化的静态局部变量,bss区
    static int ni = 0;      //初始化为0的静态局部变量,bss区
    static int everyday = 2;   //初始化为非0的静态局部变量,data区
    int forever;          //栈(stacks)
    
    return 0;
}
将main.c编译为汇编语言:gcc main.c -o main.o 

objdump -t main.o | grep ".data"
0000000000600800 l d .data 0000000000000000 .data 0000000000600808 l O .data 0000000000000004 everyday.2553 0000000000600800 w .data 0000000000000000 data_start 0000000000600800 g .data 0000000000000000 __data_start 0000000000600804 g O .data 0000000000000004 qing
objdump -t main.o | grep ".bss" 
0000000000600810 l    d  .bss   0000000000000000              .bss
0000000000600810 l     O .bss   0000000000000001              completed.6364
0000000000600818 l     O .bss   0000000000000008              dtor_idx.6366
0000000000600824 l     O .bss   0000000000000004              ni.2552
0000000000600828 l     O .bss   0000000000000004              ai.2551
0000000000600820 g     O .bss   0000000000000004              you
000000000060082c g     O .bss   0000000000000004              wei

 

以上是关于C之bssdata存储位置区分,使用objdump -t反汇编查看变量所处存储位置的主要内容,如果未能解决你的问题,请参考以下文章

objdump 输出中的直接和间接调用/跳转

binutils工具集之---objdump

objdump 和 objcopy 作为 c/c++ 库

使用 objdump 或 gcc -c 将汇编指令转换为二进制

objdump -d -l

objdump -d -l