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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值