微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

arm64汇编语言无法访问共享内存

如何解决arm64汇编语言无法访问共享内存

我有以下例程:

getSharedMemory:                            // x0 => digits                     
    push2   x29,x30                        // push FP & LR     
    mov     x29,x0                         // x29 => digits

    mov     x0,#key_digits
    mov     x1,#FOUR
    mov     x2,0666
    bl      shmget
    cmp     w0,wzr                         // x0 = shmid
    bmi     gsm_end

    mov     x1,xzr
    mov     x2,xzr
    bl      shmat
    cmp     x0,MINUS_ONE
    beq     gsm_end
    str     x0,[x29]                       // save shared mem

gsm_end:    
    pop2    x29,x30                        // pop fb & lr
    ret

createSharedMemory 看起来就像这样,除了 IPC_CREAT | 0666

我有 2 个汇编语言程序。一个创建共享内存,另一个获取它。
当我调用 getSharedMemorycreateShareMemory 时,我会这样做:

adr x0,digits
bl  getSharedMemory

并期望以数字形式找到指向内存的指针。
我也是在创建后将4个0字节写入共享内存中。

我的两个程序中的每一个都有:

.section .data
  digits:    .dword 0

当我尝试访问共享内存时,我这样做:

adr x12,digits

我使用调试器查看它是否有 4 个零 (x/4b $x12),我看到的是随机数而不是 4 个零。我已经尝试了建议的修改

adrp  x12,digits
add   x12,x12,#:lo12:digits

我将 mod 放在创建共享内存和访问它的位置,但我仍然没有看到我的 4 个零。

有什么明显的我做错了吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。