Upgrade to Pro — share decks privately, control downloads, hide ads and more …

関数の挙動書き換える

 関数の挙動書き換える

Avatar for takato fukui

takato fukui

November 19, 2025
Tweet

More Decks by takato fukui

Other Decks in Programming

Transcript

  1. ⚙環境 • Go 1.25.4 • arm64 • Ubuntu 25.05(Lima) •

    各ライブラリは最新のものを使用 ⚠ • 通常のアプリケーションでの実用性なし • 内容に誤ってる可能性あり • 適切なエラーハンドリングはしていない
  2. 🧱前提: 関数値(function value)の実体 2 1 配列 ptr len = 2

    cap = 4 0x4000010080 refs. スライスの場合 0x400000e048 8B 8B 8B ↓ 24B
  3. 🧱前提: 関数値(function value)の実体 出典: "Computer Systems: A Programmer's Perspective" Figure

    7.13 00 ptr 0xa4b80 0x400009c030 00 機械語 ELFのレイアウト 機械語はtextセクションに入る ので低位アドレスになる
  4. 🚀 / 2. 元の機械語を表示 アドレス 値 0xa4b80 00 0xa4b81 00

    0xa4b82 01 0xa4b83 8b … … メモリイメージ
  5. 🚀 / 3. 機械語があるページを書き込めるようにする XX XX 1ページ ptr len =

    4096 cap = 4096 0xa4000 XX … foo関数(0xa4b80)の機械語が含まれる 変数pageSliceのイメージ pageSlice
  6. ☢関数弄る系ライブラリ / agiledragon/gomonkey 00 0xXXXXX 00 機械語 YY 0xXXXXX YY

    機械語 ジャンプするコードに置 き換える XX … 仕組み 関数foo パッチする関数 ZZ ZZ