pop↑ push↓

☆ (ゝω・)v

Linuxメモ 3

前回)

popush.hatenablog.com

今回) VS2019でやるといったな?あれは嘘だ (,,゚Д゚)

▂▅▇█▓▒░(‘ω’)░▒▓█▇▅▂ うわあああああああああ

VcXsrv+ X11 forwardingでやろうとしたのですが、どうにもうまく行きませんでした...

私の中の時期が悪いおじさんが「時期が悪い」と言っているので大人しく言うことを聞きます。

(´-`).。oO(おそらく将来的なWSL2でのGUIサポートとは同じようにWin側にXサーバを立てる感じになると思うのでそのときに試したい)

準備

Ubuntu

グラフィックが付いた物理マシンにUbuntu20.04を入れます。今回は下記からisoを落としてDVDに焼き、DVDからSSDに対してインストールしました。

jp.ubuntu.com

使った感じですが... 普通です。びっくりするぐらい普通です。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分)かかりました...

store.steampowered.com

あとは普通にck2をインストールして、デスクトップにショートカットをおいてください。アイコンの絵が出ない場合は、右クリックからアイコンを許可する的な操作をしてください。

f:id:saito-matanki:20200608005104p:plain

標準的なインストール場所は以下です。

/home/ユーザー名/.local/share/Steam/steamapps/common/Crusader Kings II

IDA pro

IDA Pro 7.0 free版をダウンロードします。runファイルがダウンロードされます。ファイルを右クリックしてプロパティから実行許可をつけてからダブルクリックしてインストーラを開いてください。これもぜか起動まで時間(1、2分)かかりました

www.hex-rays.com

Visual studio code

VS2019が使えないので、コードとデバッグはこれでがんばります。

code.visualstudio.com

このあたりを入れました

f:id:saito-matanki:20200608010227p:plain

起動

デスクトップのアイコンから

普通に起動できます。 f:id:saito-matanki:20200608011247p:plain

コマンドから

コマンドからだと起動しません... f:id:saito-matanki:20200608011732p:plain

これはtbbのライブラリが32bitのときのままのためです。なぜアイコンからは起動したかというとsteamが用意している方のtbbを読み込んでいました。てっとり早くubuntu12_32/steam-runtime/usr/lib/x86_64-linux-gnuからファイルをとってきて上書きすれば起動します。 f:id:saito-matanki:20200608012045p:plain

f:id:saito-matanki:20200608012417p:plain

vs codeから起動

コマンドから起動できるようになったのでvs codeから起動させてみます。前回使ったサンプルコードをそのまま使います。

GitHub - matanki-saito/vs2019AsmSample

vs codeで開いて、実行計画を作ります。

f:id:saito-matanki:20200608012806p:plain

launch.jsonが作られ、cppdbgの雛形ができていると思います。少しいじります。

f:id:saito-matanki:20200608013153p:plain

  • program : ターゲットプログラムにする
  • environment : 前回と同じ。ただしフォーマットがname+value
  • cwd : コードがある場所にする。
  • preLaunchTask : コメントアウトする。最初にcmakeが走ってしまうため。

ブレークポイントが有効になります。(パターン検出とメモリ置き換え処理はwinから移植済みで別に解説します) f:id:saito-matanki:20200608013520p:plain

解析

IDAを起動します。これも何故か起動まで時間がかかります... newからck2を選んで解析にかけます。しばらく立つと完了します。ツールバーに緑のボールみたいなアイコンがあり、黄色から緑になると完了です。完了したら一度、デスクトップなどに解析結果(i64ファイル)を保存してIDAで読み直してください*1

f:id:saito-matanki:20200608014018p:plain

Local Linux Debuggerを選んで三角ボタンを押します。

f:id:saito-matanki:20200608014216p:plain

アラートが出たり、途中で止まったりしますが、全部無視して動かし続けると、そのうちランチャーが起動します。 f:id:saito-matanki:20200608014655p:plain

頑張る

ここからの解析は努力と根性のノリコ式です。 まずはフォントを読み込めるようにヒープを拡張する必要があるので、目星を立てます。Shift+f12で「.fnt」を探します。これはフォントファイルの拡張子です。文字列を見つけたら、参照先を見に行きます。

f:id:saito-matanki:20200608015611p:plain

winと同じく文字データの参照を配列に入れているようです。実態はr12です。

f:id:saito-matanki:20200608015759p:plain

上の方にいました。今回は運良くデバッグ情報があって引数にCBitmapFontというのが見えていますね。気になります。

f:id:saito-matanki:20200608015945p:plain

関数一覧で調べました。コンストラクタがいますね。見に行きます。

f:id:saito-matanki:20200608020233p:plain

ふむー。参照先を見に行きます。

f:id:saito-matanki:20200608020444p:plain

2つありました。下の方を見に行きます。

f:id:saito-matanki:20200608020521p:plain

ほぅ。3370とその下のnewが気になります。

f:id:saito-matanki:20200608020644p:plain

ブレークポイントをおいて確認。引っかかりました。少なくとも起動までに使われているのは確かそうです。

f:id:saito-matanki:20200608020827p:plain

(続く...予定)

*1:そのままだと一時ファイルが解析対象のファイルのディレクトリにできてしまう仕様です