通常在反汇编ARM文件时,我会看到一些具有以下模式的代码片段:
loc_BB30:
.text:C0 FE 5F 88 LDAXR WZR, W0, [X22]
.text:00 04 00 51 SUB W0, W0, #1
.text:C0 FE 01 88 STLXR W1, W0, [X22]
.text:A1 FF FF 35 CBNZ W1, loc_BB30
这被翻译成以下反编译代码:
do
{
v2 = __ldaxr((unsigned int *)v1);
v1 = (unsigned int)(v1 - 1);
}
while ( __stlxr(v1, v3) );
这段代码的含义是什么?什么样的 c 代码实际上会产生这种片段?