macOS彙編語言摘要

C++

int global_value = 1;
static int static_value = 2;

void foo()
{
  static_value = 3;
}

int global_value_uninitialized;
static int static_value_uninitialized;

int main()
{
  static_value_uninitialized = 4;
}

在Terminal中執行

cc -arch i386 -S hello.cpp

得到彙編語言

.section    __TEXT,__text,regular,pure_instructions
    .globl  __Z3foov
    .p2align    4, 0x90
__Z3foov:
    pushl   %ebp
    movl    %esp, %ebp
    calll   L0$pb
L0$pb:
    popl    %eax
    movl    $3, __ZL12static_value-L0$pb(%eax)
    popl    %ebp
    retl

    .globl  _main
    .p2align    4, 0x90
_main:
    pushl   %ebp
    movl    %esp, %ebp
    calll   L1$pb
L1$pb:
    popl    %eax
    xorl    %ecx, %ecx
    movl    $4, __ZL26static_value_uninitialized-L1$pb(%eax)
    movl    %ecx, %eax
    popl    %ebp
    retl

    .section    __DATA,__data
    .globl  _global_value
    .p2align    2
_global_value:
    .long   1

    .p2align    2
__ZL12static_value:
    .long   2

    .globl  _global_value_uninitialized
.zerofill __DATA,__common,_global_value_uninitialized,4,2
.zerofill __DATA,__bss,__ZL26static_value_uninitialized,4,2

可以看到代碼放在(__TEXT,__text)
global_value和static_value放在(__DATA,__data)
global_value_uninitialized放在(__DATA,__common)
static_value_uninitialized放在(__DATA,__bss)

代碼

.section    __TEXT,__text,regular,pure_instructions

有個簡寫的等價directive

.text

代碼

.section    __DATA,__data

有個簡寫的等價directive

.data

代碼

.zerofill __DATA,__common,_global_value_uninitialized,4,2

有個簡寫的等價directive

.comm _global_value_uninitialized,4

代碼

.zerofill __DATA,__bss,__ZL26static_value_uninitialized,4,2

有個簡寫的等價directive

.lcomm __ZL26static_value_uninitialized,4,2
發佈了34 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章