pop↑ push↓

☆ (ゝω・)v

プログラムを変更する (3)

ぜんかい

popush.hatenablog.com

この修正はうごかない(*´ω`*)

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

  • (A)pushしているアドレス
  • (B)call先のアドレス

(A)リロケーション

 pushしているのは.rdataセクションのアドレスです。 f:id:saito-matanki:20170801215812p:plain

しかしリロケーションされると実行アドレスが変わり、アドレスとして使えなくなります(下記)。

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

そのような箇所はrelocセクションにまとめて定義されます。

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

(A)へんこー

バイナリを直接いじります。フォーマットは下記のようです。

  • hogeセクションのベースアドレス → 0x7000
  • ブロックの大きさ → 4(ベースアドレス) + 4(サイズ) + 1箇所*2 + 2(パディング) = 0x000C
  • pushの後ろにあるので、typeは3でオフセットは1 → 0x3001

stackoverflow.com

relocセクションはうさみみで変更します。 f:id:saito-matanki:20170801222206p:plain f:id:saito-matanki:20170801222355p:plain

リロケーションテーブルの大きさも変更します。 f:id:saito-matanki:20170801222528p:plain f:id:saito-matanki:20170801222603p:plain

ついかされました f:id:saito-matanki:20170801222741p:plain

次回(4)へ続く