跳转至内容
  • C 0x01(C语言是如何进行函数调用的)

    pinkie_ctfer's Blog
    2
    1 赞同
    2 帖子
    38 浏览
    sunrisepeakS

    PC寄存器基本都是有限制的, 一般可以通过间接的方式修改。而且它一般指一个逻辑上的寄存器, 可能每个架构下实现和名字有所不同。总之, 感觉记住它是存储CPU下一条要执行的指令(在机器语言中)的内存地址就可以了

    架构 PC 名称 可否直接读取 可否直接写入 位数 x86 EIP 间接 ❌ 32 x86_64 RIP 间接 ❌ 64 ARM32 R15 / PC ✅ ✅ 32 ARM64 PC ✅ ⚠️ 限制 64 RISC-V pc ✅(模拟器) ⚠️ 部分支持 32/64 MIPS PC ❌ ❌ 32 PowerPC NIP ✅ ✅(特权) 32/64

    https://en.wikipedia.org/wiki/Program_counter

  • 怎么理解aarch64里的堆栈和寄存器?

    已锁定 已解决 General Discussion | 综合讨论
    3
    1 赞同
    3 帖子
    72 浏览
    sunrisepeakS

    @lu9943 在 怎么理解aarch64里的堆栈和寄存器? 中说:

    这我就很纳闷了,要是往上生长,那不就是开辟空间是add吗?然后sp不是往上移动了吗?真的被这个绕晕了呀!(文章出处链接文本)

    其实用 往上生长 这个词是不合适的, 因为这设计到 内存图怎么画
    而使用 往低地址生长 进行记忆。 那么:

    如果内存图最上面是地址0, 那就是 往上生长 反之, 如果 内存地址0在最下面 那么就是 往下生长

    333561cb-e053-42a0-8ad7-ed23ac3f7933-image.png