diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-05-07 22:50:37 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-07 16:50:37 +0200 |
| commit | 5d14413b89d7bb78023307fc59d2d9da182554a4 (patch) | |
| tree | 3822c9835ff42632837da6dde40a292e7048247f /src/wrapped | |
| parent | ec549690944d2768b811340bc999abdfbc60ca2c (diff) | |
| download | box64-5d14413b89d7bb78023307fc59d2d9da182554a4.tar.gz box64-5d14413b89d7bb78023307fc59d2d9da182554a4.zip | |
[DYNAREC] Use PE volatile metadata in dynarec (#2610)
Diffstat (limited to 'src/wrapped')
| -rw-r--r-- | src/wrapped/wrappedlibc.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 4815f57d..fbfc9b21 100644 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -3033,14 +3033,16 @@ EXPORT void* my_mmap64(x64emu_t* emu, void *addr, size_t length, int prot, int f #endif if(ret!=MAP_FAILED) { if(emu && !(flags&MAP_ANONYMOUS) && (fd>0)) { - char filename[4096]; - char buf[128]; - sprintf(buf, "/proc/self/fd/%d", fd); - ssize_t r = readlink(buf, filename, sizeof(filename) - 1); - if (r != -1) filename[r] = 0; - - DetectUnityPlayer(filename); - // ParseVolatileMetadata(filename, addr); + if ((box64_wine && BOX64ENV(dynarec_volatile_metadata)) || BOX64ENV(unityplayer)) { + char filename[4096]; + char buf[128]; + sprintf(buf, "/proc/self/fd/%d", fd); + ssize_t r = readlink(buf, filename, sizeof(filename) - 1); + if (r != -1) filename[r] = 0; + + if (BOX64ENV(unityplayer)) DetectUnityPlayer(filename); + if (box64_wine && BOX64ENV(dynarec_volatile_metadata)) ParseVolatileMetadata(filename, addr); + } // the last_mmap will allow mmap created by wine, even those that have hole, to be fully tracked as one single mmap if((ret>=last_mmap_addr[0]) && ret+length<(last_mmap_addr[0]+last_mmap_len[0])) RecordEnvMappings((uintptr_t)last_mmap_addr[0], last_mmap_len[0], fd); |