めくら鉄砲
あるツールのプラグインはwin32 dll になっているんだけど、僕のやりたい部分だけサポートされていないみたい。しかし実際既存dllはあるわけだから、きっと方法はあるんだろう。自社内でなにやってんだとか、多少腰砕けなんだけど、ツール製作部署に質問かけてみた。そしたら、「僕知らないから、メール転送。はいあんた達答えといてね」というたらい回しリプライされて、その対象がマネージャーな方々(二人以上に送るときは責任かけるほうを明示しろっつーの)だったので嫌な予感したんだけど、予想通りというか中々にナシのツブテなので「のろまに付き合ってランねーよ」「お忙しいマネージャの方をあまり困らせてはいけないな」とか思い、バカハックを続けている。
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { LPCWSTR fname = TEXT("IODLL\\IodllForCMT.dll"); HMODULE l = LoadLibrary(fname); FARPROC sam = GetProcAddress(l, "GetModuleCount"); printf("%d\n", sam()); return 0; }
こんなので連射しまくっているけど中々当たらないなあ。副作用でCreateRemoteThread()を勉強した。なんという恐ろしいAPIだ。
あと psapiとか。今までプロセス一覧を出すとき古臭い方法(ToolHelp32を使う方法)しかしらなかったんだけれど、こんな方法があったのかっていうかやっぱり MSってばカオス*1。
#include <psapi.h> _tmain(...) { DWORD id[1024]; DWORD bsize; HMODULE mods[1024]; WCHAR name[1024]; EnumProcesses(id, sizeof(id), &bsize); for (DWORD i = 0; i< bsize; i++) { HANDLE h ; if (( h = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, FALSE, id[i]) ) !=NULL) { if (EnumProcessModules(h, mods, sizeof(mods), &bsize) != FALSE) { GetModuleBaseName(h, mods[0], name, sizeof(name)); wprintf(_T("%s\n"), name); } } } }