Linuxメモ 3
前回)
今回) VS2019でやるといったな?あれは嘘だ (,,゚Д゚)
▂▅▇█▓▒░(‘ω’)░▒▓█▇▅▂ うわあああああああああ
VcXsrv+ X11 forwardingでやろうとしたのですが、どうにもうまく行きませんでした...
私の中の時期が悪いおじさんが「時期が悪い」と言っているので大人しく言うことを聞きます。
(´-`).。oO(おそらく将来的なWSL2でのGUIサポートとは同じようにWin側にXサーバを立てる感じになると思うのでそのときに試したい)
準備
Ubuntu
グラフィックが付いた物理マシンにUbuntu20.04を入れます。今回は下記からisoを落としてDVDに焼き、DVDからSSDに対してインストールしました。
使った感じですが... 普通です。びっくりするぐらい普通です。Windows → MacよりWindows→ Ubuntuのほうがすんなり切り替えられると思います。音も普通に出ました。
便利コマンド
- history : 昔使ったコマンドを忘れたときに...
- !数字 : 数字はhistoryコマンドで出てきた番号。それが実行される
- なにかのコマンド | grep 検索ワード : 検索ワードの行だけ表示
- xdg-open . : カレントディレクトリをGUIで開く
- pwd : カレントディレクトリを表示する
- shift+PrintScreen:範囲選択キャプチャできる。保存先はピクチャ
- ls -a :隠しファイルもリストアップされる。GUIのときは右クリックメニューから右上の「三」アイコンから設定できる
- Insert+ctrl:ターミナルから選択部分をコピー。Ctrl+Cはうまく行かない。
ビルドツール
Linuxメモ 1、2を見て、下記を導入します。
- gcc9
- cmake
- ninja-build
- nasm
- boost
- git
- vim
Steam
devファイルをダウンロードしてインストールします。コマンドからしかできない的な書き方をしている記事もありますが、普通にいけます。devファイルを右クリックしてプロパティから実行許可をつけてからダブルクリックしてインストーラを開いてください。私の場合なぜか起動まで時間(1、2分)かかりました...
あとは普通にck2をインストールして、デスクトップにショートカットをおいてください。アイコンの絵が出ない場合は、右クリックからアイコンを許可する的な操作をしてください。
標準的なインストール場所は以下です。
/home/ユーザー名/.local/share/Steam/steamapps/common/Crusader Kings II
IDA pro
IDA Pro 7.0 free版をダウンロードします。runファイルがダウンロードされます。ファイルを右クリックしてプロパティから実行許可をつけてからダブルクリックしてインストーラを開いてください。これもぜか起動まで時間(1、2分)かかりました
Visual studio code
VS2019が使えないので、コードとデバッグはこれでがんばります。
このあたりを入れました
起動
デスクトップのアイコンから
普通に起動できます。
コマンドから
コマンドからだと起動しません...
これはtbbのライブラリが32bitのときのままのためです。なぜアイコンからは起動したかというとsteamが用意している方のtbbを読み込んでいました。てっとり早くubuntu12_32/steam-runtime/usr/lib/x86_64-linux-gnu
からファイルをとってきて上書きすれば起動します。
vs codeから起動
コマンドから起動できるようになったのでvs codeから起動させてみます。前回使ったサンプルコードをそのまま使います。
GitHub - matanki-saito/vs2019AsmSample
vs codeで開いて、実行計画を作ります。
launch.jsonが作られ、cppdbgの雛形ができていると思います。少しいじります。
- program : ターゲットプログラムにする
- environment : 前回と同じ。ただしフォーマットがname+value
- cwd : コードがある場所にする。
- preLaunchTask : コメントアウトする。最初にcmakeが走ってしまうため。
ブレークポイントが有効になります。(パターン検出とメモリ置き換え処理はwinから移植済みで別に解説します)
解析
IDAを起動します。これも何故か起動まで時間がかかります... newからck2を選んで解析にかけます。しばらく立つと完了します。ツールバーに緑のボールみたいなアイコンがあり、黄色から緑になると完了です。完了したら一度、デスクトップなどに解析結果(i64ファイル)を保存してIDAで読み直してください*1
Local Linux Debuggerを選んで三角ボタンを押します。
アラートが出たり、途中で止まったりしますが、全部無視して動かし続けると、そのうちランチャーが起動します。
頑張る
ここからの解析は努力と根性のノリコ式です。 まずはフォントを読み込めるようにヒープを拡張する必要があるので、目星を立てます。Shift+f12で「.fnt」を探します。これはフォントファイルの拡張子です。文字列を見つけたら、参照先を見に行きます。
winと同じく文字データの参照を配列に入れているようです。実態はr12です。
上の方にいました。今回は運良くデバッグ情報があって引数にCBitmapFontというのが見えていますね。気になります。
関数一覧で調べました。コンストラクタがいますね。見に行きます。
ふむー。参照先を見に行きます。
2つありました。下の方を見に行きます。
ほぅ。3370とその下のnewが気になります。
ブレークポイントをおいて確認。引っかかりました。少なくとも起動までに使われているのは確かそうです。
(続く...予定)
*1:そのままだと一時ファイルが解析対象のファイルのディレクトリにできてしまう仕様です