#1143729 radare2 does not disassemble an instruction right

Package:
radare2
Source:
radare2
Description:
free and advanced command line hexadecimal editor
Submitter:
Rebel Zhang
Date:
2026-08-05 16:13:02 UTC
Severity:
normal
Tags:
#1143729#5
Date:
2026-08-05 16:09:59 UTC
From:
To:
Steps to reproduce the bug:

1. Obtain the binary from this email.

The binary (along with the source) is free software, and is marked CC0
1.0. To view a copy of this mark, visit
https://creativecommons.org/publicdomain/zero/1.0/

2. Open this binary in radare2.

3. Run `aaa` for an analysis.

4. Run `pd 5 @ 0x400880`:

```
[0x00400940]> pd 5 @ 0x400880
│ 0x00400880 e18b03a9 stp x1, x2, [var_40h]
│ 0x00400884 e1430191 add x1, sp, 0x50
│ 0x00400888 e2c30091 add x2, sp, 0x30
│ 0x0040088c 200080d2 mov x0, 1
│ 0x00400890 e00b02a9 stp x0, x2, [var_20h]
```

5. Manually disassemble `e18b03a9` and `e00b02a9`, which can be done by
referring to <https://www.scs.stanford.edu/~zyedidia/arm64/stp_gen.html> and
extracting bits. `e00b02a9` disassembles to `stp x0, x2, [sp, #32]`, which
corresponds to what is given by radare2. However `e18b03a9` disassembles to
`stp x1, x2, [sp, #56]`, which does not (0x40 == 64 != 56).

6. To have a confirmation, go to that function to check whether `var_40h` is
indeed `sp+0x40`:

```
[0x00400940]> 0x400840
[0x00400840]> afv
arg const char * s @ x0
arg int64_t arg2 @ x1
var int64_t var_60h @ sp+0x0
var int64_t var_60h_2 @ sp+0x8
var int64_t var_10h @ sp+0x10
var int64_t var_20h @ sp+0x20
var int64_t var_20h_2 @ sp+0x28
var int64_t var_30h @ sp+0x30
var int64_t var_38h @ sp+0x38
var int64_t var_40h @ sp+0x40
var int64_t var_48h @ sp+0x48
var int64_t var_50h @ sp+0x50
var int64_t var_58h @ sp+0x58
```