Коничива. Жму CFF Explorer >> Import Adder >> там добавляю нужную мне dll. >> добавляю секцию где будет мой код >> меняю EP. Иду в отладчик, прописываю нужный мне код, делаю call на функцию из dll, готово. Вопрос: Работать работает, но виснет на инструкции movzx edx, byte ptr ds:[eax] Код который идет в dll: Код (C++): #include <windows.h> constexpr bool Cmp(const char *p1, const char *p2) { return *p1 == *p2 && (!(*p1) || Cmp(p1+1, p2+1)); } int main(int argc, char **argv) { if (argc <= 1) return 0; if (Cmp(argv[1], "--hello")) MessageBox(0, "Hello", "World!", 0); return 0; } Пациент ; DLL p.s если например добавлять обычный MessageBox то работает без проблем. В кратце, хочу чтобы по работало только при передачи X аргумента из командой строки, может есть вариант проще? p.s.s учусь. Там я как понял, регистр какой-то побитый, но т.к только учусь не знаю что конкретно починить.
Не виснет, а необрабатываемое исключение вызывает. По всей видимости тут Код (ASM): .text:67381AF8 _Z3CmpPKcS0_ proc near .text:67381AF8 55 push ebp .text:67381AF9 89 E5 mov ebp, esp .text:67381AFB 83 EC 18 sub esp, 18h .text:67381AFE 8B 45 08 mov eax, [ebp+arg_0] .text:67381B01 0F B6 10 movzx edx, byte ptr [eax] Первым аргументом функции какую-то шляпу отдаешь. Код (ASM): .text:673812D0 8D 4C 24 04 lea ecx, [esp+4] ... .text:673812E2 89 CB mov ebx, ecx ... .text:673812F5 8B 43 04 mov eax, [ebx+4] .text:673812F8 83 C0 04 add eax, 4 .text:673812FB 8B 00 mov eax, [eax] .text:673812FD C7 44 24 04+ mov dword ptr [esp+4], offset aHello ; "--hello" .text:67381305 89 04 24 mov [esp], eax .text:67381308 E8 EB 07 00+ call _Z3CmpPKcS0_ Получается в main функции dll ты берешь аргумент 2, прибавляешь к нему 4, берешь по этому адресу дворд и отдаешь функции первым аргументом. Код (Text): BOOL WINAPI DllMain( _In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved ); Это какая-то дичь вобщем. DllMain это немного не сишная main(), верней совсем не она. А если аргументы хочешь обрабатывать, есть апи GetCommandLine.
Да я можно сказать ничего и не сделал, лишь добавил при помощи CFF Explorer, а это он наверное сам подставил. (я обычно руками прописываю инструкции, но в этот раз решил пойти по другому пути) На C++ не пишу, предпочитаю другие языки. Попробую GetCommandLine. --- Сообщение объединено, 11 ноя 2018 --- GetCommandLine хорошо зашел, благодарю, то что и хотел. Спойлер: Код. Код (C++): #include <windows.h> constexpr bool Cmp(const char *p1, const char *p2) { return *p1 == *p2 && (!(*p1) || Cmp(p1+1, p2+1)); } int mainEP() { // Сюда делаю прыжок. LPWSTR* argv = NULL; int argc = 0; argv = CommandLineToArgvW(GetCommandLineW(), &argc); if (argv == NULL) ExitProcess(0); if (argc > 1) { char str[256]; wcstombs(str, argv[1], sizeof(str)); if (Cmp(str, "--hello")) MessageBox(0, "Hello", "World!", 0); } else ExitProcess(0); LocalFree(argv); ExitProcess(0); }
f13nd, Мне глубоко пофиг ваше мнение, для меня ценны те люди, которые способны на адекватный анализ, размышление и диалог. Ну а школьники как ты мне не интересны. У таких людей типо тебя нет никакой способности к разработкам, вы только и можите примитивные вещи из гугла говорить, никогда своей работы нет. А если есть задача, то вы голову в песок суёте - это не приемлемо. Потому что в такой голове мозга нет.
А ты пришел в тему, где человек уже во всем разобрался, со своим аналитическим, располагающим к размышлению и диалогу "ты дебил и ничего не понимаешь, иди вышивай крестиком лучше". Попробуй проанализировать и поразмышлять как это для окружающих выглядит. Про задачу не понял, какая? Определение ЕР? Я крякингом не занимаюсь, это всё наверное очень интересно, но у меня других интересных задач полно.
f13nd, У тс я спросил формулировку задачи, кнопки которые он жал в тулзах не имеют значения. Вам же ответил отдельно, иди кури матчасть
f13nd, Ну ты быстрый как понос, вот только в нашем деле хорошее качество это способность ждать. У тс займёт кучу времени изучение материала.
тащемта на gcc конпилите. очевидно что поинтер крив. DllMain к вашему сведению это совсем не main. это точка входа, у сишных прог там в основном пролог инициализации всякой пылеты типа динамических конструкторов, статичиских конструкторов итд.