Windows 10 で git を使用しているときに発生する「致命的なエラー - cygheap ベースの不一致が検出されました」というエラーを修正するにはどうすればよいですか?

Windows 10 で git を使用しているときに発生する「致命的なエラー - cygheap ベースの不一致が検出されました」というエラーを修正するにはどうすればよいですか?

Windows 10 (1803) で git を使用すると、一部のコマンドで次のエラーが発生します。

git submodule add https://github.com/..../......git ......
      3 [main] basename (13656) C:\.....\basename.exe: *** fatal error - cygheap base mismatch detected - 0x64313400/0x11E3400.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version.  The most recent version *should*
reside in x:\cygwin\bin, where 'x' is the drive on which you have
installed the cygwin distribution.  Rebooting is also suggested if you
are unable to find another cygwin DLL.

この問題を解決するにはどうすればいいでしょうか?

答え1

このエラーにはいくつかの原因が考えられます。

たとえば、DLL の競合バージョンが存在する可能性があります。

ただし、Windows 10 の最新バージョンには、もともと Microsoft EMET の一部であった一連の追加の保護機能が組み込まれています。

最も注目すべきは、ASLR(アドレス空間レイアウトのランダム化) セキュリティ機能は、Git for Windows インストールに含まれる UNIX ライクな実行可能ファイルと互換性がありません。

この問題を解決するには、Exploit Protection 設定を開き、プログラム設定タブに切り替えて、エラーにリストされている実行可能ファイル名を追加します (かなりの数になる場合があります)。

示されている例では、パスのみを入力するbasename.exeことも、もう少し心配な場合は完全なパスを入力することもできます。

実行可能ファイルごとに、ASLR 保護をオフにします。

詳細については、次の GitHub の問題を参照してください。

https://github.com/desktop/desktop/issues/3096

答え2

Windows 10 でデフォルトで必須 ALSR を有効にした後。

すべての git-bash 実行可能ファイルに対して ForceRelocateImages を無効にする必要があります。これを行うには、小さな PowerShell スクリプトを作成するか、PowerShell で以下のコードを直接入力します。PowerShell を管理者として実行する必要があります。

Get-Item -Path "C:\Program Files\Git\usr\bin\*.exe" | %{ Set-ProcessMitigation -Name $_.Name -Disable ForceRelocateImages }
Get-Item -Path "C:\Program Files\Git\bin\*.exe" | %{ Set-ProcessMitigation -Name $_.Name -Disable ForceRelocateImages }
Get-Item -Path "C:\Program Files\Git\*.exe" | %{ Set-ProcessMitigation -Name $_.Name -Disable ForceRelocateImages }

その後、git-bash は正常に動作します。

答え3

私の場合、解決策は互換性のないを削除することでしたmsys-2.0.dll。「cygwin」に関するエラー メッセージは正しくありません。

msys-2.0.dllボックスに複数のファイルがある場合、問題が発生する可能性があります。git コマンド自体の隣にあるファイル (c:\program files\git....) を除いてすべて削除します。

または、複数のバージョンが必要な場合は、PATH を変更して、git コマンドを使用するときに MSYS64 dll バージョンが見つからないようにします。

答え4

  1. dll の名前を変更するとmsys役立つ場合があります:https://stackoverflow.com/a/74463416/2377343

  2. ASLR を無効にしてみることもできます:https://stackoverflow.com/a/76296598/2377343

関連情報