今夜も Wine で乾杯! - 24本目 (440レス)
今夜も Wine で乾杯! - 24本目 http://mao.5ch.net/test/read.cgi/linux/1698628590/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
399: login:Penguin [sage] 2025/06/14(土) 14:37:00.33 ID:2Qahm2TX >>398 レイヤーが違うからCocoaが64bitでしか動かなくても問題ない ややこしいんだけど、32bit アプリを64bit OSで動かす仕組みと、64bit x86_64バイナリを64bit ARM CPUで 動かす仕組みは別なので、分けて考えないとダメ 超長文になるんだけど、32bit アプリを64bit OSで動かす仕組みを説明するね LinuxもmacOSも32bit互換機能はカーネルレベル(システムコールレベル)で対応しており、LinuxでもmacOSでも 既存の32bitバイナリがそのまま動作するようになっている(いた) 一方、Windowsは64bit Itaniumで32bit x86を動かす仕組みとしてWOW64を導入した Itaniumはx86との互換性が元々低いうえに途中から互換機能が削除されたので、x86バイナリを動かすのには x86エミュレータが必要な上、システムコールレベルで互換性を保つようカーネルレベルで対応するのは 難しいので、上位のWin32 APIレベルでの互換性を保つようにした WOW64では32bit アプリからのWin32 API呼び出しに対応する32bit版 kernel32.dll、gdi32.dll、user32.dllを 書き換えて、wow64.dllとwow64win.dll経由で64bit版 kernel32.dll、gdi32.dll、user32.dllを呼び出すようにした さらにx86エミュレータのIA32Exec.binとWOW64をつなぐwowia32x.dllを利用してItaniumでx86を実行できるようにした x86_64のWOW64でも基本的な仕組みは同じで、32bit版 kernel32.dllがwow64.dll経由で64bit版 kernel32.dllへの 呼び出し等を行うが、x86_64 CPUにはx86互換モードがあるので、64bitモードと32bitモードを切り替える wow64cpu.dllを利用して、x86_64でx86を実行している 64bit ARM Windowsでも同じで、32bit版 kernel32.dllを書き換える等は同じで、64bit ARM AArch64 CPUの32bit AArch32互換機能をwowarmhw.dllを利用してAArch64でAArch32を実行し、32bit x86バイナリはx86エミュレータの xtajit.dllを利用してAArch64でx86を実行している http://mao.5ch.net/test/read.cgi/linux/1698628590/399
400: login:Penguin [sage] 2025/06/14(土) 14:42:28.40 ID:2Qahm2TX Wine 9.0以前でx86_64 Linuxで32bit Windowsバイナリを動かす場合やCatalinaより前のmacOSで動かす場合、 32bit版Wineを利用してLinuxやmacOS側の32bit互換機能を使って32bit Windowsバイナリを動かしていた macOSではCatalina以降OS側の32bit互換機能を削除し、そのままでは32bit版Wineが動かなくなったので、 CodeWeaverはCatalina以降に実装されたLDTを変更するAPIを利用して、自前で64bit版Wineで 32bit Windowsバイナリを動かせるようにした メモリ空間サイズの違いがあるから1つのプロセス内で32bitと64bitを切り替えるのは困難だけど CodeWeaverは自前のコンパイラで気合で対応していた(64bitプロセスだけど4GB以下しか使わないよう スタック等の扱いを変更) Wine 9.0で導入された新しいWOW64実装を利用する場合、LinuxやmacOSの32bit互換機能ではなく、 WindowsのWOW64と同様の仕組みで32bit Windowsバイナリを動かす x86_64でx86を動かす場合、LDTを変更するAPI(Linuxではmodify_ldt)を利用してWine側で実装したwow64cpu.dllを 使って、32bitモードと64bitモードの切り替えを行っている 同様に64bit ARM OSでFEXを利用してx86を動かす場合、libwow64fex.dllを利用してx86を64bit AArchで実行する Win32 APIの実装に関して、Wineで動作するWindowsアプリとWineによるWin32 API実装の実態である wineserverとの分離がWine 9.0で完了したので、Windowsアプリとwineserverは隔離された別プロセスとなり、 Wine上のWindowsアプリによるWin32 API呼び出しはwineserverへのプロセス間通信で行われる 要するに、Windowsバイナリが32bitか64bitかということがwineserverから切り離されたので、wineserverは 通常の64bit LinuxアプリやmacOSアプリであり、wineserverが利用するCocoaが32bit非対応であっても問題ない 一部のディストリビューションでmultiarch等32bit互換機能を削除しようという話が出ているのもこの関連 もうWineぐらいしかLinuxの32bit互換機能を利用していないのだから、Wineの側で32bit互換機能を提供し WineがLinuxの32bit互換機能を利用しないのなら、Linuxの32bit互換機能は用無しだということ http://mao.5ch.net/test/read.cgi/linux/1698628590/400
401: login:Penguin [sage] 2025/06/14(土) 14:46:24.38 ID:2Qahm2TX 64bit x86_64バイナリを64bit ARM CPUで動かす仕組みはこの辺参照 - ARM Windowsのx86/x64エミュレーションの日本語での解説(32bit x86エミュレーターのxtajit.dllも含む) www.ffri.jp/assets/files/research/research_papers/Koh_Nakagawa_Appearances_are_deceiving_Japanese.pdf - Wine側でのARM64ECの実装 gitlab.winehq.org/wine/wine/-/wikis/ARM64EC-Toolchain http://mao.5ch.net/test/read.cgi/linux/1698628590/401
402: login:Penguin [sage] 2025/06/14(土) 14:51:47.58 ID:2Qahm2TX この辺ろくな資料がなく自分の独自の考察なので、どこか間違っていたらツッコミお願いしまつ http://mao.5ch.net/test/read.cgi/linux/1698628590/402
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.017s