---
generated_at: 2026-02-17 12:30:00
metrics:
  claims_total: 25
  claims_with_evidence: 25
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート: 57-dynlib（動的ライブラリ）

## サマリー

本レポートは機能設計書「57-dynlib（動的ライブラリ）」の記載内容について、ソースコードに基づく根拠を示す。全25件の主張がすべてソースコードで確認可能であり、信頼度は1.00と評価される。

## Evidence一覧

| Evidence ID | ファイル | 行番号 | 内容 |
|------------|---------|--------|------|
| E-001 | lib/pure/dynlib.nim | 10-12 | モジュール説明「shared libraries」 |
| E-002 | lib/pure/dynlib.nim | 11 | POSIXでdlsym使用 |
| E-003 | lib/pure/dynlib.nim | 12 | WindowsでLoadLibrary使用 |
| E-004 | lib/pure/dynlib.nim | 49 | LibHandle型定義（pointer） |
| E-005 | lib/pure/dynlib.nim | 51-53 | loadLib(path)プロシージャ宣言 |
| E-006 | lib/pure/dynlib.nim | 55-57 | loadLib()プロシージャ宣言 |
| E-007 | lib/pure/dynlib.nim | 59-60 | unloadLibプロシージャ宣言 |
| E-008 | lib/pure/dynlib.nim | 62-64 | raiseInvalidLibraryプロシージャ |
| E-009 | lib/pure/dynlib.nim | 66-68 | symAddrプロシージャ宣言 |
| E-010 | lib/pure/dynlib.nim | 70-74 | checkedSymAddrプロシージャ |
| E-011 | lib/pure/dynlib.nim | 76-86 | libCandidatesプロシージャ |
| E-012 | lib/pure/dynlib.nim | 88-98 | loadLibPatternプロシージャ |
| E-013 | lib/pure/dynlib.nim | 100-120 | POSIX実装 |
| E-014 | lib/pure/dynlib.nim | 109 | posixモジュールインポート |
| E-015 | lib/pure/dynlib.nim | 111-116 | POSIX loadLib実装 |
| E-016 | lib/pure/dynlib.nim | 113 | RTLD_NOW or RTLD_GLOBAL |
| E-017 | lib/pure/dynlib.nim | 114 | RTLD_NOW |
| E-018 | lib/pure/dynlib.nim | 118 | dlopen(nil, RTLD_NOW) |
| E-019 | lib/pure/dynlib.nim | 119 | dlclose |
| E-020 | lib/pure/dynlib.nim | 120 | dlsym |
| E-021 | lib/pure/dynlib.nim | 122-142 | Nintendo Switch実装（非対応） |
| E-022 | lib/pure/dynlib.nim | 144-167 | Genode実装（非対応） |
| E-023 | lib/pure/dynlib.nim | 170-193 | Windows実装 |
| E-024 | lib/pure/dynlib.nim | 181-184 | LoadLibraryA, GetProcAddress インポート |
| E-025 | lib/pure/dynlib.nim | 25-43 | runnableExamples使用例 |

## Claims対応表

| Claim ID | 主張内容 | Evidence ID | 検証結果 |
|----------|---------|-------------|---------|
| C-001 | dynlibモジュールは共有ライブラリアクセスを提供 | E-001 | 確認済 |
| C-002 | POSIXではdlsymを使用 | E-002, E-020 | 確認済 |
| C-003 | WindowsではLoadLibraryを使用 | E-003, E-024 | 確認済 |
| C-004 | LibHandleはpointer型 | E-004 | 確認済 |
| C-005 | loadLib(path)でライブラリロード | E-005, E-015 | 確認済 |
| C-006 | loadLib()で現在の実行ファイルハンドル取得 | E-006, E-018 | 確認済 |
| C-007 | unloadLibでライブラリアンロード | E-007, E-019 | 確認済 |
| C-008 | raiseInvalidLibraryでLibraryError発生 | E-008 | 確認済 |
| C-009 | symAddrでシンボルアドレス取得 | E-009, E-020 | 確認済 |
| C-010 | checkedSymAddrは失敗時に例外発生 | E-010 | 確認済 |
| C-011 | libCandidatesでパターン展開 | E-011 | 確認済 |
| C-012 | loadLibPatternでパターンマッチロード | E-012 | 確認済 |
| C-013 | POSIX実装はdlfcnインターフェースを使用 | E-013 | 確認済 |
| C-014 | posixモジュールをインポート | E-014 | 確認済 |
| C-015 | globalSymbols=trueでRTLD_GLOBAL | E-016 | 確認済 |
| C-016 | globalSymbols=falseでRTLD_NOW | E-017 | 確認済 |
| C-017 | dlopen(nil)で現在のプロセス | E-018 | 確認済 |
| C-018 | dlcloseでアンロード | E-019 | 確認済 |
| C-019 | dlsymでシンボル取得 | E-020 | 確認済 |
| C-020 | Nintendo Switchは非対応 | E-021 | 確認済 |
| C-021 | Genodeは非対応（POSIXなし） | E-022 | 確認済 |
| C-022 | WindowsではLoadLibraryAを使用 | E-024 | 確認済 |
| C-023 | WindowsではGetProcAddressを使用 | E-024 | 確認済 |
| C-024 | WindowsではFreeLibraryを使用 | E-023 | 確認済（180行） |
| C-025 | 使用例がrunnableExamplesで提供 | E-025 | 確認済 |

## 不足情報

| 項目 | 説明 | 影響度 |
|------|------|--------|
| なし | すべての主張がソースコードで確認可能 | - |

## リスクフラグ

| リスク | 説明 | 対応策 |
|--------|------|--------|
| DLLハイジャック | 相対パスで不正なDLLがロードされる | 絶対パスを使用 |
| 任意コード実行 | 悪意のあるライブラリがロードされる | 信頼できるパスのみ使用 |
| シンボル衝突 | グローバルシンボルが上書きされる | globalSymbols=false使用 |
| メモリリーク | unloadLibを呼び忘れ | deferで確実にアンロード |
| プラットフォーム非対応 | Nintendo Switch/Genodeでの使用 | 例外処理を実装 |

## レビュアーチェックリスト

- [x] LibHandle型の説明がソースコードと一致している
- [x] loadLib/unloadLibの説明がソースコードと一致している
- [x] symAddr/checkedSymAddrの説明が正確である
- [x] libCandidates/loadLibPatternの説明が正確である
- [x] POSIX実装の説明がソースコードと一致している
- [x] Windows実装の説明がソースコードと一致している
- [x] 非対応プラットフォームの説明が正確である
- [x] globalSymbolsオプションの説明が正確である
- [x] コードリーディングガイドの行番号が正確である
