1 of 16

Transient Architectural Execution:�From Weird Gates to Weird Programs

Ping-Lun Wang, Fraser Brown, Riccardo Paccagnella,

Eyal Ronen, Riad S. Wahby, and Yuval Yarom

IEEE S&P, 05/19/2026

2 of 16

μWMs: hidden computers in the CPU

2

▲ CPU

µArch weird machines (µWMs)

µArch

ISA

🤯 Obfuscate malware

😈 Improve μArch attacks

Credit: irasutoya.com

😥 Existing μWMs are very limited…

😎 Overcome side-channel mitigations

µWMs: many security applications!

3 of 16

Limitations of existing μWMs

3

Weird gates [1, 2, 3]

[1] Spec-o-Scope: Cache probing at cache speed, Horowitz et al., CCS ‘24

[2] Bending microarchitectural weird machines towards practicality, Wang et al., USENIX Sec ‘24

[3] The gates of time: Improving cache attacks with transient execution, Katzman et al., USENIX Sec ‘23

💥 No conditional execution (e.g., branches)

💥 No indexed memory operations

💥 Weird gates can only compute 4 bits at a time

Circuit model: very limited

4 of 16

Our work: transient architectural execution (TAE)

4

Credit: irasutoya.com

✨ Weird programs: compute with ISA

✅ Branches

✨ AES encryption is 543× faster than the state of the art!

ISA

µArch

✅ Memory operations

✅ Powerful ISA instructions (e.g., AES-NI)

weird gates + transient exec attacks

= μWMs with full capabilities!

5 of 16

TAE: transient execution attacks + weird gates

5

Transient execution attacks

(e.g., Spectre & Meltdown)

Weird gates

Our work: TAE

μArch output

Arch input

Transient execution

μArch input

Compute

(low-level circuits)

μArch output

Transient execution

μArch input

Compute

(high-level ISA)

Arch value

μArch output

Transient execution

6 of 16

Overview of transient architectural execution

6

add rax, rbx

Transient execution

μArch world

Arch world

1️⃣ μArch to Arch

3️⃣ Arch to μArch

💎

💷

💶

💵

💷

💶

💵

2️⃣ Arch compute

Storage

Computation

How to do this?

rax

rax

💵

7 of 16

Idea: cache miss → branch misprediction

7

input[0]

in the cache?

Yes!

No…

Evaluate condition

Make a prediction

✅ Correct direction

⛔ Incorrect direction

💵

💵

if (input[0]) correct();

else incorrect();

😈 Mis-train the predictor

8 of 16

μArch (cache) → branch misprediction → Arch

8

input[0]

💵

return 1;

Branch predictor?

return 0;

Taken!

(Trained)

In transient execution

// input[0] is 0

if (input[0]) return 0;

else return 1;

μArch to Arch!

💵

0

😈 Mis-train the predictor

9 of 16

Make μArch to Arch more scalable

9

😥 A branch only converts 1 bit of information

🤔 What if we use an indirect branch?

✨ Multiple targets → multiple bits of information!

10 of 16

Branch target buffer (BTB) and indirect branches

10

Indirect branch

Target = 1

Target 0: // more code…

Target 1: // more code…

Target 2: // more code…

Target 3: // more code…

Target 4: // more code…

Target 5: // more code…

Target 6: // more code…

(more targets…)

BTB state

Last target:

1

Records the last target

11 of 16

Write to the BTB states

11

Indirect branch

Target = 5

(more targets…)

Last target:

BTB state

1

5

Target 0: // more code…

Target 1: // more code…

Target 2: // more code…

Target 3: // more code…

Target 4: // more code…

Target 5: // more code…

Target 6: // more code…

Value to write

Updates to target 5!

12 of 16

Convert BTB states to Arch value

12

Target 0: // more code…

Target 1: // more code…

Target 2: // more code…

Target 3: // more code…

Target 4: // more code…

Target 5: // more code…

Target 6: // more code…

Indirect branch

Target = delay()

Target 0: return 0;

Target 1: return 1;

Target 2: return 2;

Target 3: return 3;

Target 4: return 4;

Target 5: return 5;

Target 6: return 6;

Last target:

BTB state

1

5

Target is 5!

μArch to Arch!

✨ 65,536 = 216 targets

16 bits per branch

Transient execution

(more targets…)

Return the target number

13 of 16

Weird functions: compute with ISA using TAE

  • 543× faster than the state of the art [1]!
  • 96.05% of accuracy (3.65% lower)
  • AES-NI is fast, but offers less obfuscation

13

1️⃣

2️⃣

3️⃣

Transient execution

BTB to Arch

AES Encrypt

(with AES-NI)

Arch to BTB

▲ AES weird function

[1] Bending microarchitectural weird machines towards practicality, Wang et al., USENIX Sec ‘24

14 of 16

Compose weird functions into weird programs

14

Transient execution

BTB to Arch

Computation

(with ISA instructions)

Arch to BTB

1️⃣

2️⃣

3️⃣

▲ A weird function

Weird function 1

Weird function 2

Weird function 3

Weird function n

▲ A weird program

(more weird functions…)

15 of 16

Compose weird functions into weird programs

15

Transient execution

BTB to Arch

Computation

(with ISA instructions)

Arch to BTB

1️⃣

2️⃣

3️⃣

▲ A weird function

Weird function 1

Weird function 2

Weird function 3

Weird function n

▲ A weird program

(more weird functions…)

✨ Large scale computation

16 of 16

Takeaways

Transient Arch Exec: brings powerful ISA to μWMs!

  • Transient Architectural Execution: From Weird Gates to Weird Programs
  • Contact: Ping-Lun Wang, pinglunw@andrew.cmu.edu

Weird programs: orders of magnitude faster!

μWMs are practical for program obfuscation and other attacks

🛡️ Future work: μWMs mitigations