google / mozc

Mozc - a Japanese Input Method Editor designed for multi-platform
Other
2.32k stars 330 forks source link

Stop specifying `/BASE` option to `mozc_tip32.dll` and `mozc_tip64.dll` #834

Closed yukawa closed 8 months ago

yukawa commented 8 months ago

Description

Currently mozc_tip32.dll and mozc_tip64.dll are built with /BASE option. https://github.com/google/mozc/blob/af209061632ba7dcc64b63bd06eb988974375508/src/win32/tip/tip.gyp#L155-L157 https://github.com/google/mozc/blob/af209061632ba7dcc64b63bd06eb988974375508/src/win32/tip/tip.gyp#L174-L176

This is however now discouraged as follows.

Note

For security reasons, Microsoft recommends you use the /DYNAMICBASE option instead of specifying base addresses for your executables. /DYNAMICBASE generates an executable image that can be randomly rebased at load time by using the address space layout randomization (ASLR) feature of Windows. The /DYNAMICBASE option is on by default.

You can also find the following warning while building Mozc for Windows (e.g. from build #186)

[456/457] LINK_EMBED(DLL) mozc_tip64.dll
LINK : warning LNK4281: undesirable base address 0x6000000 for x64 image; set base address above 4GB for best ASLR optimization

Also from Does ASLR relocate all DLLs by the same offset? - The Old New Thing

ASLR chooses the base address pseudo-randomly, though it does take some of the original base addresses into account. For example, if the original base address was below the 4GB boundary, then the new pseudo-random base address will also be below the 4GB boundary.

Steps to reproduce

  1. Build and install Mozc for Windows
  2. dumpbin /HEADERS .\out_win\Release\mozc_tip32.dll
  3. dumpbin /HEADERS .\out_win\Release_x64\mozc_tip64.dll
  4. Launch Notepad (64-bit)
  5. Select Mozc as the current IME

Expected behavior

Expected result in the step 2

OPTIONAL HEADER VALUES
             10B magic # (PE32)

  (snip)

         6000000 image base (06000000 to 064D0FFF)

  (snip)

               2 subsystem (Windows GUI)
             140 DLL characteristics
                   Dynamic base
                   NX compatible

Expected result in the step 3

OPTIONAL HEADER VALUES
             20B magic # (PE32+)

  (snip)

         6000000 image base (0000000006000000 to 000000000650CFFF)

  (snip)

               2 subsystem (Windows GUI)
             160 DLL characteristics
                   High Entropy Virtual Addresses
                   Dynamic base
                   NX compatible

Actual behavior

Actual result in the step 2

OPTIONAL HEADER VALUES
             10B magic # (PE32)

  (snip)

        10000000 image base (10000000 to 104D0FFF)
            1000 section alignment

  (snip)

               2 subsystem (Windows GUI)
             140 DLL characteristics
                   Dynamic base
                   NX compatible

Actual result in the step 3

OPTIONAL HEADER VALUES
             20B magic # (PE32+)

  (snip)

       180000000 image base (0000000180000000 to 000000018050CFFF)

  (snip)

               2 subsystem (Windows GUI)
             160 DLL characteristics
                   High Entropy Virtual Addresses
                   Dynamic base
                   NX compatible

Screenshots

`mozc_tip64.dll` address

Version or commit-id

82ff0935c040aa3e0c712bc0dc8c12344cac18b4

Environment