FEX-Emu / FEX-Emu/FEX

Denuvo needs inline self-modifying code support

Open
#2,841 0 comments 1 reaction 0 assignees View on GitHub
bug CPU emulation
Dominant language
C++
Stars
8k
Forks
351
Avg merge
12h 31m
Merged PRs (30d)
102

Description

Currently it crashes because of an invalid instruction.
The instruction stream (From Hatsune Miku Project DIVA Mega Mix+) starts as follows.
```asm
1569854b0 812d000000001896… sub dword [rel data_1569854ba], 0x1b519618 {0xa20f9090} // Modifies the next instruction
1569854ba a826 test al, 0x26 // Instruction modified
1569854bc 61 ??
```

The initial sub instruction in this block is modifying the code just after the instruction. Which turns it in to:
```asm
0x00000000 1 90 nop
0x00000001 1 90 nop
0x00000002 2 0fa2 cpuid
0x00000004 10 8105f2ffffff1896511b add dword [rip - 0xe], 0x1b519618
0x0000000e 1 c3 ret
```

The final add there modifying the code back to what it was before.
FEX need to have a generic (and fast) solution towards detecting something like this if we want any Denuvo Anti-Tamper games to work.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.