karubabuの日記

タイトルに解決と書いているものがあるけれど、別に付いていない物は解決していないというわけではないです。つまるところ記事を書いた後に解決してちょっと嬉しかったので付けました。

linux版のciv5が7より高いgccでsys-libs/glibcとx11-libs/libxcbをビルドすると起動しないのをなんとかする

なんとかすると言っている様に、修正したわけではなくなんか起動出来る様になるというやつです
というよりこれについてググっても全然ひっかからないし、ただのおま環なのでは?ボブは訝しんだ

なにがあった

linux版 Civ5はsys-libs/glibcとx11-libs/libxcbをsys-devel/gcc-8.2.0-r2でビルドすると動作しなかった - karubabuの日記
これをみて
gcc9でも同じっぽい場所で落ちるのを確認しています

どうした

とりあえずgdbで起動してバックトレースを見る

f:id:karubabu:20190610204259p:plain
gdb civ5

なんかなんやかんや書かれているけれど、どうやら開幕に流れる動画を再生するところで落ちているみたい
つまり動画を再生しなければなんとかなるのでは?
Civ5App::PlayOpeningMovie()あたりをNOPで書き潰せば動画を再生せずに次の動作に向ってくれそう
objdump -CDMintel Civ5XP | grep PlayOpeningでPlayOpeningMovie()の場所を探すとそれっぽいものが出てくる

086e0f3a <Civ5App::PlayOpeningMovie()@@Base>:
 86e0f41:   e8 00 00 00 00          call   86e0f46 <Civ5App::PlayOpeningMovie()@@Base+0xc>
 86e0f58:   0f 85 2a 01 00 00       jne    86e1088 <Civ5App::PlayOpeningMovie()@@Base+0x14e>
 86e0f65:   0f 85 1d 01 00 00       jne    86e1088 <Civ5App::PlayOpeningMovie()@@Base+0x14e>
 86e0f72:   0f 85 10 01 00 00       jne    86e1088 <Civ5App::PlayOpeningMovie()@@Base+0x14e>
 86e0f87:   0f 85 fb 00 00 00       jne    86e1088 <Civ5App::PlayOpeningMovie()@@Base+0x14e>
 86e0fda:   0f 85 90 00 00 00       jne    86e1070 <Civ5App::PlayOpeningMovie()@@Base+0x136>
 86e106e:   74 8b                   je     86e0ffb <Civ5App::PlayOpeningMovie()@@Base+0xc1>
 86e1c41:   e8 f4 f2 ff ff          call   86e0f3a <Civ5App::PlayOpeningMovie()@@Base>

後はhexcurseあたりでe8 f4 f2 ff ffの部分を90 90 90 90 90に変更する
動く₍₍⁽⁽(ી( ‘ω’ )ʃ)₎₎⁾⁾

おわり

適当にプレイしてみたけれどなんやかんや落ちていないので問題なさそう
ゲームクリア時に動画が再生された気がするので、そのあたりでまた落ちそうな気がしないでもないけれどまあクリアした後なら良いでしょう
gdbの画面はなんだかよしなに色が付いていたので画像にしたけれど、これテキストでもよかったのかもしれない よくわかんないね
grepしてしまうと元のテキストが持っていた色が消えてしまうのがかなしい あれってなんとかならないのかしら
誰か教えてくれー!

f:id:karubabu:20190610205347p:plain
久し振りにやったciv5 周りに幸福資源がなさすぎるので多分途中で終わる