https://bugs.winehq.org/show_bug.cgi?id=51539
--- Comment #1 from Martin Storsjö martin@martin.st --- I primarily debugged this on arm, but it does seem like the same modification (forcing loading modules at an address different from the default image base) breaks things on x86 too.
In this case, it seems like perform_relocations() gets an address different from where it actually ends up mapped. On x86_64, perform_relocations() gets both module and nt->OptionalHeader.ImageBase equal to the original image base address, while on ARM they end up with an entirely different address (not the original image base, nor the address where it actually ended up mapped).