如何解决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 个汇编语言程序。一个创建共享内存,另一个获取它。
当我调用 getSharedMemory
或 createShareMemory
时,我会这样做:
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 举报,一经查实,本站将立刻删除。