Windows dll関連
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
] [
Twitter
]
開始行:
→WindowsAPI関連
#contents
*一般 [#fb27ac99]
-http://www.dll-files.com/
*Dependncy Walker [#mc4485b5]
-[[覚書 : Dependency Walkerはもう古い! Windows 10ならDepe...
--[[lucasg/Dependencies: A rewrite of the old legacy soft...
--Dependencies is a rewrite of the legacy software Depend...
-http://www.dependencywalker.com/ 2023
--[[help>http://www.dependencywalker.com/help/html/conten...
*DLLの関数一覧を得る [#gf789935]
-プログラムで取得するには(プログラムのヘッダ情報から取得)
--http://d.hatena.ne.jp/kaorun55/20080429/p1
-[[コマンドで取得するには(dumpbinを使う)>http://d.hatena...
dumpbin /exports XXXX.dll > hoge.txt
--export以外も含め全部出す場合は、リンカのオプションに/MA...
--そうすると出力先ディレクトリに*.mapファイルが生成される。
--C++の場合、コンパイラが付けた修飾名で関数が出力される。
--C++の関数でDEFファイルを作るときに手助けになるはず。
*DLLの関数差し替え [#ibc0b27d]
-参考資料:http://www.users.gr.jp/blogs/hidori/archive/200...
BOOL ReplaceDllProc(
LPCTSTR lpSourceModuleName, // 置換対象の DLL 関数が格...
LPVOID lpCurProc, // 置換対象の D...
LPVOID lpNewProc, // 新しい DLL 関...
HMODULE hNewProcModule // 新しい DLL 関数が格納さ...
)
{
ULONG ulSize = 0;
PIMAGE_IMPORT_DESCRIPTOR pImportDesc =
(PIMAGE_IMPORT_DESCRIPTOR)
::ImageDirectoryEntryToData(hNewProcModule, TRUE,IMAGE_...
if (!pImportDesc)
{
return FALSE;
}
for (; pImportDesc->Name; pImportDesc++)
{
LPCTSTR lpModName = (LPCTSTR) ((PBYTE) hNewProcModule...
if (!_tcsicmp (lpModName, lpSourceModuleName))
{
break;
}
}
if (!pImportDesc->Name)
{
return FALSE;
}
PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA) ((PBYTE)...
for (; pThunk->u1.Function; pThunk++)
{
LPVOID* ppfn = (LPVOID*) &(pThunk->u1.Function);
BOOL fFound = (*ppfn == lpCurProc);
if (fFound)
{
::WriteProcessMemory (::GetCurrentProcess(), ppfn, ...
return TRUE;
}
}
return FALSE;
}
*DLLの共有セグメント(C++) [#u6efc7c4]
DLL のソースコードに
#pragma comment(linker,"/section:SHARED,rws")
#pragma data_seg("SHARED")
HWND hwndOwner = 0;
HHOOK hhk = 0;
#pragma data_seg()
のように記述。
#pragma data_seg は、#pragma data_seg で括られた区間がデ...
#pragma comment ディレクティブは、リンカに対する指示で、"...
この2つの記述により、変数 hwndOwner と hhk は、この DLL ...
なお、共有する変数は
HWND hwndOwner = 0;
のように必ず初期化すること。
これを忘れると、変数が共有されません。
終了行:
→WindowsAPI関連
#contents
*一般 [#fb27ac99]
-http://www.dll-files.com/
*Dependncy Walker [#mc4485b5]
-[[覚書 : Dependency Walkerはもう古い! Windows 10ならDepe...
--[[lucasg/Dependencies: A rewrite of the old legacy soft...
--Dependencies is a rewrite of the legacy software Depend...
-http://www.dependencywalker.com/ 2023
--[[help>http://www.dependencywalker.com/help/html/conten...
*DLLの関数一覧を得る [#gf789935]
-プログラムで取得するには(プログラムのヘッダ情報から取得)
--http://d.hatena.ne.jp/kaorun55/20080429/p1
-[[コマンドで取得するには(dumpbinを使う)>http://d.hatena...
dumpbin /exports XXXX.dll > hoge.txt
--export以外も含め全部出す場合は、リンカのオプションに/MA...
--そうすると出力先ディレクトリに*.mapファイルが生成される。
--C++の場合、コンパイラが付けた修飾名で関数が出力される。
--C++の関数でDEFファイルを作るときに手助けになるはず。
*DLLの関数差し替え [#ibc0b27d]
-参考資料:http://www.users.gr.jp/blogs/hidori/archive/200...
BOOL ReplaceDllProc(
LPCTSTR lpSourceModuleName, // 置換対象の DLL 関数が格...
LPVOID lpCurProc, // 置換対象の D...
LPVOID lpNewProc, // 新しい DLL 関...
HMODULE hNewProcModule // 新しい DLL 関数が格納さ...
)
{
ULONG ulSize = 0;
PIMAGE_IMPORT_DESCRIPTOR pImportDesc =
(PIMAGE_IMPORT_DESCRIPTOR)
::ImageDirectoryEntryToData(hNewProcModule, TRUE,IMAGE_...
if (!pImportDesc)
{
return FALSE;
}
for (; pImportDesc->Name; pImportDesc++)
{
LPCTSTR lpModName = (LPCTSTR) ((PBYTE) hNewProcModule...
if (!_tcsicmp (lpModName, lpSourceModuleName))
{
break;
}
}
if (!pImportDesc->Name)
{
return FALSE;
}
PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA) ((PBYTE)...
for (; pThunk->u1.Function; pThunk++)
{
LPVOID* ppfn = (LPVOID*) &(pThunk->u1.Function);
BOOL fFound = (*ppfn == lpCurProc);
if (fFound)
{
::WriteProcessMemory (::GetCurrentProcess(), ppfn, ...
return TRUE;
}
}
return FALSE;
}
*DLLの共有セグメント(C++) [#u6efc7c4]
DLL のソースコードに
#pragma comment(linker,"/section:SHARED,rws")
#pragma data_seg("SHARED")
HWND hwndOwner = 0;
HHOOK hhk = 0;
#pragma data_seg()
のように記述。
#pragma data_seg は、#pragma data_seg で括られた区間がデ...
#pragma comment ディレクティブは、リンカに対する指示で、"...
この2つの記述により、変数 hwndOwner と hhk は、この DLL ...
なお、共有する変数は
HWND hwndOwner = 0;
のように必ず初期化すること。
これを忘れると、変数が共有されません。
ページ名: