侧边栏壁纸
  • 累计撰写 25 篇文章
  • 累计创建 11 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

C 语言中 static 在汇编中的实现

LinJHS
2024-03-18 / 0 评论 / 0 点赞 / 42 阅读 / 1913 字 / 正在检测是否收录...

C 语言中 static 在汇编中的实现

介绍

先看 C 语言代码

int func(int i)
{
    static int a = i;
    static int b = i+1;
    // other code
}

下面是汇编代码:

    xor eax, eax
    mov al, byte_4255D8 ; 这个存储 static 是否被赋值
    and eax, 1 ; 只保留最低位
    test eax, eax
    jnz short loc_40105E

    ; 如果没有初始化过这个 static
    mov cl, byte_4255D8
    or cl, 1 ; 将最低位赋值为 1
    mov byte_4255D8, cl
    mov edx, [ebp+arg_0]
    mov dword_4255DC, edx ; 初始化static为函数第一个参数

loc_40105E:
    xor eax, eax
    mov al, byte_4255D8 ; 这个存储 static 是否被赋值
    and eax, 2 ; 只保留倒数第二位
    test eax, eax
    jnz short loc_401087

    ; 如果没有初始化过这个 static
    mov cl, byte_4255D8
    or cl, 2 ; 将倒数第二位赋值为 1
    mov byte_4255D8, cl
    mov edx, [ebp+arg_0]
    add edx, 1
    mov dword_4255E0, edx ; 初始化static为函数第一个参数+1

基本都在注释里面了,

0

评论区