Проблема с аттачем DLL к процессу
Я написал DLL-ку (MSVC 2005) на c++, совершенно пустую, с одним MessageBox-ом в DllEntry. Инжектю её своей программой через CreateRemoteThread в определённое приложение. На моих виндах (winxp sp3) всё отлично инжектится, код DLL-ки выполняется в контексте другого процесса.
Но на второй ОС (на ЧИСТОЙ свеже-поставленной сборкой WinXP с единственной установленной программой для прозрачности окон) эта же Dll-ка не инжектится. Смотрел через ollydbg, CreateRemoteThread отрабатывает, LoadLibrary отрабаывает, но DLL-ка не подгружается.
Чтобы исключить возможные проблемы моего инжектора, попробовал стороннюю программу remotedll. Она при инжекте выводит ошибку:
LoadLibraryA on remote process failed with error: 87
87 как вы знаете это: Параметр задан неверно.
Но путь к библиотеке у меня точно задан верный..
Соответственно, запускаемая LoadLibrary в контексте другого приложения возвращает вот такую ошибку..
Попросил потестить друзей на своих компьютерах. У кого-то инжектится, у кого-то нет..
У меня мысли сводятся к каким-то специфическим настройкам компиляции или линковки.. У кого-нибудь были подобные проблемы с дллками? Может в настройках проекта что не так? Танцы с бубном результатов не дали :/
компилер:
/O2 /GL /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "TESTDLL_EXPORTS" /D "_WINDLL" /FD /EHsc /MD /Yu"stdafx.h" /Fp"Release\Test.pch" /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /Zi /TP /errorReport:prompt
линкер:
/OUT:"Test.dll" /INCREMENTAL:NO /NOLOGO /DLL /MANIFEST /MANIFESTFILE:"Release\Test.dll.intermediate.manifest" /DEBUG /PDB:"Test.pdb" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /LTCG /MACHINE:X86 /ERRORREPORT:PROMPT /FIXED:NO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
Только не пойму, почему тут /DEBUG. Это как бы на Релиз параметры :/
Да точно, я же даже через дебаггер смотрел.. передаваемый параметр сверял..
А права - ну была бы ошибка соответствующая. А какие права могут быть в чистых ХП виндах? :/ я там пальцем ни одни настройки не трогал.
А права - ну была бы ошибка соответствующая. А какие права могут быть в чистых ХП виндах? :/ я там пальцем ни одни настройки не трогал.
Ну да, действительно. А пробовал собрать библиотеку на другом VC? На другой машине? Или вообще на другом языке, на Delphi, например? Тогда было бы понятно, в библиотеке ли ошибка или в загрузчике (loadlibrary). Есть подозрение, что библиотека не инициализируется, поэтому loadlibrary и не работает.
Не пробовал, попробую :/
Так там же фигурирует uuid.lib
Дллки на целевой системе может и не быть, она не нужна, если я правильно понимаю, что такое .lib.
некоторые вещи.. А вы даже не удосуживаетесь прочитать что это за ключ такой, что у него за counterpart /MD и с чем это вообще едят.
А ну быстро читать справку до полного отпадания вопросов!
некоторые вещи.. А вы даже не удосуживаетесь прочитать что это за ключ такой, что у него за counterpart /MD и с чем это вообще едят.
А ну быстро читать справку до полного отпадания вопросов!
Сменил /MD на /MT и всё заработало )) спасибо!
Как в Windows 9x загрузить свою DLL в верхние 2Гб.
Пробовал из VXD через сервис _PELDR_LoadModule, не получилось.
Очень нужен ring-3 код в верхних 2Гб.
Как в Windows 9x загрузить свою DLL в верхние 2Гб.
Пробовал из VXD через сервис _PELDR_LoadModule, не получилось.
Очень нужен ring-3 код в верхних 2Гб.
Зачем вам это?
Это адреса выше 0x80000000 на 32-разрядных системах.