Ну, пишешь условие, например, a == 5, если ты поставил "is true" и на этом месте действительно будет a == 5, то бряк сработает. Как-то так. Соответственно, условие "has changed" инвертирует поведение брейкпоинта.
>>это как? это так ) Code: #pragma pack (push, 1) //... any struct #pragma pack (pop) выравнивание по одному байту поставь
поробуйте не в настройках, а явно, как у 0xc0de. p.s. ваш перехват не годится для многопоточных приложений. также перехватчик intMessage или как он там, должен возвращать не 1, а то, что возвратит оригинальный MessageBox
Как отоброзить файлы в текущем каталоге?Пытаюсь делать так Code: TSearchRec sr; char path[1024]; strcpy(path,GetCurrentDir().c_str()); strcat(path,"\\*.*"); for(;;) { if(FindFirst(AnsiString(path),faAnyFile, sr) == 0) {ShowMessage(sr.Name);} else{FindClose(sr);break;} } но оно мне только точки бесконечно выплевывает Как правильно надо? ___________________________________________ Упс.Извиняюсь затупил .Надобыло так Code: TSearchRec sr; char path[1024]; strcpy(path,GetCurrentDir().c_str()); strcat(path,"\\*.*"); FindFirst(AnsiString(path),faAnyFile, sr); for(;;) { if(FindNext(sr) == 0) {ShowMessage(sr.Name);} else{FindClose(sr);break;} }
Сделал, чтобы возвращал то что и оригинальный messageboxa; явно, я так понял это так? #pragma pack (push, 1); struct jmp_far { BYTE op_push; DWORD arg; BYTE op_ret; }; #pragma pack (pop, 1); лишнюю main() убрал. Ничего не изменилось
2ntldr. Перед тем, как переписывать начало функции надо разрешить запись по адресу месадбокса с помощью функции VirtualProtect http://msdn.microsoft.com/en-us/library/aa366898(VS.85).aspx Установи защиту в PAGE_EXECUTE_READWRITE не увидела с начала, что функи нет И еще при выгрузке либы неплохо было бы байты восстанавливать в начале функции. if (ul_reason_for_call == DLL_PROCESS_DETACH){ // код снятия перехвата }
Добавил: PHP: if(ul_reason_for_call == DLL_PROCESS_DETACH ) { hookoff(); } ... PHP: void hookoff(void) { WriteProcessMemory(GetCurrentProcess(), (void*)adrmesbox, (void*)&buf, 6, &written); } Изменил: PHP: void intercept(void) { DWORD oldf; int prot; adrmesbox = (DWORD)GetProcAddress(GetModuleHandleA("user32.dll"),"MessageBoxA"); if(adrmesbox == 0) { MessageBoxA(NULL, "MessageBoxA не найден", "ошибка", 0); return; } prot = VirtualProtect((void*)adrmesbox,6,PAGE_EXECUTE_READWRITE,&oldf); if (!prot) { ExitProcess(0); } jump.op_push = 0x68; jump.arg = (DWORD)&intMesbox; jump.op_push = 0xC3; ReadProcessMemory(GetCurrentProcess(), (void*)adrmesbox, (void*)buf, 6, &written); WriteProcessMemory(GetCurrentProcess(), (void*)adrmesbox, (void*)&jump, 6, &written); }
проверь что возвращают Read(Write)ProcessMemory, можт исчо привилегею потипу SeDebugPrivilege получить?
2ntldr Ненене. мего глючный код. Надо так Code: jump.op_push = 0x68; jump.arg = (DWORD)&intMesbox; jump.op_ret = 0xC3; А вы сначала написали Code: jump.op_push = 0x68; jump.arg = (DWORD)&intMesbox; jump.op_push = 0xC3; Разница налицо. Теперь все пашет, проверила под отладчиком
Спасибо большое) ошибка оказалась глупее чем все думали. пока что проверить возможности нет, тк свет вырубили, но уверен, чтоьпроблема решена.
Есть обычное простенькое серверное приложение принимающее через сокет и выводящее в бесконечном цикле с определенным условием выхода текст.Со всеми пложенными bind,listen,accept.Оно расчитано на подключение одного клиента.Допустим если я захочу добавить в цикл условие выхода с возвратом ожидания на listen,допустим я туда буду возвращатся с помощью goto .Собственно вопрос куда ставить метку на listen?И что при этом надо в памяти очистить что бы можно было повторно подключится?
если я правильно понял, то алгоритм таков тебе нужен: accept - возвращает тебе сокет для работы с присоединившимся человеком. затем ты запускаешь потом через CreateThread и передешь функции обработки этот самый дискриптор. И далее заново циклом на accept. А функция которая работает в потоке - там делаешь свои дела юзая переданный в параметрах дискриптор.
эээ...вообще для первоклассников вопрос есть int x,y поменять местами значение x,y. если возможно без ввода дополнительных переменных, если нельзя, то ввести новые переменные. тут два слова ответ..но какой?