ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
.dll(Dynamic Link Library)は、Windows 上で複数のプログラムが共有して使う関数群やリソースをまとめたバイナリファイルです。たとえば kernel32.dll(Windows API の基盤)、user32.dll(ウィンドウ・メッセージ)、gdi32.dll(描画)といった OS の中核も DLL として提供されており、すべての Windows アプリは何らかの DLL に依存しています。
DLL の最大のメリットは コードの共有とメモリ効率です。10 個のアプリが同じ機能を必要としても、それぞれが同じコードを抱える代わりに 1 つの DLL を読み込めば、ディスク容量もメモリ使用量も大幅に節約できます。さらに DLL を差し替えるだけでバグ修正や機能追加ができ、アプリ本体(.exe)を再ビルドしなくて済みます。
一方で、依存する DLL が見つからない、バージョンが合わない、悪意ある DLL に差し替えられる、といった 「DLL 地獄」とも呼ばれる問題も発生しやすく、Windows の歴史は DLL 管理の試行錯誤の歴史でもあります。
内部構造
DLL のファイル構造は基本的に .exe と同じ PE 形式です。先頭の 4D 5A(MZ)ヘッダ、PE シグネチャ、COFF ヘッダ、オプショナルヘッダ、セクションテーブルという順序は同一で、違いは以下の点に集約されます。
- Characteristics フラグ: COFF ヘッダの
IMAGE_FILE_DLLビットが立っている。これにより OS は「単独起動不可、ライブラリとしてロード」と判断する - エクスポートテーブル(.edata): 他プログラムから呼び出せる関数名・序数(ordinal)・アドレスの対応表。
__declspec(dllexport)や DEF ファイルで指定する - エントリポイント:
DllMain。DLL_PROCESS_ATTACH/DLL_PROCESS_DETACH等の通知を受ける - リソースセクション(.rsrc): アイコン、ダイアログ、文字列テーブル等。リソース専用 DLL も存在する
呼び出し側は次のいずれかでロードします。
- 暗黙的リンク(静的インポート): ビルド時に .lib(インポートライブラリ)をリンクし、.exe の IAT(Import Address Table)に DLL 名と関数名が記録される。起動時に OS が自動ロード
- 明示的リンク(動的ロード):
HMODULE h = LoadLibrary(L"foo.dll");→FARPROC p = GetProcAddress(h, "Bar");→FreeLibrary(h);
主な用途
- OS の API 提供: kernel32 / user32 / advapi32 / ntdll など Windows 自身のサブシステム
- ランタイムライブラリ:
msvcr*.dll(C ランタイム)、vcruntime140.dll、.NET のmscoree.dll - サードパーティライブラリ: Qt、OpenSSL、ffmpeg、zlib などの再配布パッケージ
- プラグイン機構: Photoshop プラグイン、VST、Excel アドイン、ゲームの MOD などは DLL 形式で提供されることが多い
- COM サーバ:
regsvr32 foo.dllでレジストリに登録、CLSID 経由で生成
関連形式との比較
| 形式 | プラットフォーム | 用途 | 備考 |
|---|---|---|---|
| .dll | Windows | 動的ライブラリ | PE 形式、エクスポートテーブル必須 |
| .so | Linux | 共有オブジェクト | ELF 形式、dlopen でロード |
| .dylib | macOS | 動的ライブラリ | Mach-O 形式、dlopen |
| .lib(インポート) | Windows | 静的リンクのスタブ | DLL 名と関数名のみ。実体は持たない |
| .lib(静的) | Windows | 静的ライブラリ | オブジェクトコード本体。.exe に取り込まれる |
| .ocx | Windows | ActiveX コントロール | 実体は DLL |
コマンド・ツール
- dumpbin /exports foo.dll: エクスポート関数一覧を表示
- dumpbin /imports app.exe: その .exe が必要とする DLL と関数を表示
- Dependency Walker(depends.exe): 依存ツリーを GUI で可視化。古典的ツールだが Windows 10 以降は API セット DLL の扱いで誤検知あり
- Dependencies(lucasg/Dependencies): Dependency Walker の現代版後継
- Process Explorer / Process Hacker: 実行中プロセスがロードしている DLL 一覧
- regsvr32 / regsvr32 /u: COM DLL の登録・解除
- sxstrace.exe: Side-by-side アセンブリのロードエラー解析
注意点
- DLL Hijacking(DLL Search Order Hijacking):
LoadLibraryに絶対パスを与えないと、OS は決められた検索順(アプリディレクトリ → System32 → カレント → PATH)でロードする。攻撃者が同名 DLL を仕込むと乗っ取られる。対策はSetDefaultDllDirectoriesやLoadLibraryExのフラグ、KnownDLLs 機構 - 32bit / 64bit の混在不可: 64bit .exe は 64bit DLL しかロードできない。プロセス内で混ぜることはできない
- バージョン不整合: 同名異バージョンの DLL が複数存在すると問題が起きる。Side-by-side(WinSxS)/ マニフェスト / アプリローカル配置で解決
- 循環依存と DllMain:
DllMain内で別 DLL をLoadLibraryするとデッドロック・クラッシュの原因。最小限の初期化のみ書く - 削除・上書きの困難さ: ロード中の DLL はロックされて削除できない。再起動や
MoveFileEx+MOVEFILE_DELAY_UNTIL_REBOOTで対応
関連リンク
- 実行ファイル・パッケージ(親カテゴリ)
- ファイル拡張子とは(概論)
- EXE(.exe) — .dll をロードする側
- dll を参照する方法
- RevitAPI.dll と RevitAPIUI.dll の参照
- 本番環境の dll 内で参照している dll ファイルの置き場所
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?