[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    Ну, пишешь условие, например, a == 5, если ты поставил "is true" и на этом месте действительно будет a == 5, то бряк сработает. Как-то так. Соответственно, условие "has changed" инвертирует поведение брейкпоинта.
     
    1 person likes this.
  2. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    это как?
     
  3. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    >>это как?

    это так )

    Code:
     
    #pragma pack (push, 1)
    
    //... any struct
    #pragma pack (pop)
    
    выравнивание по одному байту поставь
     
    1 person likes this.
  4. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    поставил выравнивание по 1 байту в настройках проекта. Проблема не решилась
     
  5. FrMn

    FrMn Elder - Старейшина

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    поробуйте не в настройках, а явно, как у 0xc0de.

    p.s. ваш перехват не годится для многопоточных приложений. также перехватчик intMessage или как он там, должен возвращать не 1, а то, что возвратит оригинальный MessageBox
     
  6. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    2ntldr

    ; *А зачем еще одна main?
     
  7. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Как отоброзить файлы в текущем каталоге?Пытаюсь делать так
    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;}
    }
    
    но оно мне только точки бесконечно выплевывает :( Как правильно надо?
    ___________________________________________
    Упс.Извиняюсь затупил :p .Надобыло так
    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;}
    }
    
     
    #1547 _nic, 13 Sep 2008
    Last edited: 13 Sep 2008
  8. FrMn

    FrMn Elder - Старейшина

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    разве в этом случае ты первый файл не пропускаешь?
     
  9. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Это тот который "." ? Мне это не критично :)
     
  10. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    Сделал, чтобы возвращал то что и оригинальный messageboxa;
    явно, я так понял это так?
    #pragma pack (push, 1);
    struct jmp_far {
    BYTE op_push;
    DWORD arg;
    BYTE op_ret;
    };
    #pragma pack (pop, 1);

    лишнюю main() убрал.
    Ничего не изменилось
     
  11. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    2ntldr. Перед тем, как переписывать начало функции надо разрешить запись по адресу месадбокса с помощью функции VirtualProtect

    http://msdn.microsoft.com/en-us/library/aa366898(VS.85).aspx

    Установи защиту в PAGE_EXECUTE_READWRITE
    не увидела с начала, что функи нет

    И еще при выгрузке либы неплохо было бы байты восстанавливать в начале функции.

    if (ul_reason_for_call == DLL_PROCESS_DETACH){

    // код снятия перехвата

    }
     
    #1551 0x0c0de, 13 Sep 2008
    Last edited: 13 Sep 2008
  12. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    Добавил:
    PHP:
    if(ul_reason_for_call == DLL_PROCESS_DETACH )
    {
        
    hookoff();
    }
    ...
    PHP:
    void hookoff(void) {
        
    WriteProcessMemory(GetCurrentProcess(), (void*)adrmesbox, (void*)&buf6, &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*)buf6, &written);
        
    WriteProcessMemory(GetCurrentProcess(), (void*)adrmesbox, (void*)&jump6, &written);
    }
     
  13. FrMn

    FrMn Elder - Старейшина

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    проверь что возвращают Read(Write)ProcessMemory, можт исчо привилегею потипу SeDebugPrivilege получить?
     
    1 person likes this.
  14. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    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;
    
    Разница налицо. Теперь все пашет, проверила под отладчиком
     
  15. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    Спасибо большое) ошибка оказалась глупее чем все думали. пока что проверить возможности нет, тк свет вырубили, но уверен, чтоьпроблема решена.
     
  16. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Есть обычное простенькое серверное приложение принимающее через сокет и выводящее в бесконечном цикле с определенным условием выхода текст.Со всеми пложенными bind,listen,accept.Оно расчитано на подключение одного клиента.Допустим если я захочу добавить в цикл условие выхода с возвратом ожидания на listen,допустим я туда буду возвращатся с помощью goto .Собственно вопрос куда ставить метку на listen?И что при этом надо в памяти очистить что бы можно было повторно подключится?
     
  17. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    если я правильно понял, то алгоритм таков тебе нужен:
    accept - возвращает тебе сокет для работы с присоединившимся человеком.
    затем ты запускаешь потом через CreateThread и передешь функции обработки этот самый дискриптор. И далее заново циклом на accept.
    А функция которая работает в потоке - там делаешь свои дела юзая переданный в параметрах дискриптор.
     
  18. Zakary

    Zakary Elder - Старейшина

    Joined:
    28 Sep 2005
    Messages:
    165
    Likes Received:
    10
    Reputations:
    0
    эээ...вообще для первоклассников вопрос:)
    есть int x,y поменять местами значение x,y. если возможно без ввода дополнительных переменных, если нельзя, то ввести новые переменные.

    тут два слова ответ..но какой?:)
     
  19. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    x = x + y;
    y = x - y;
    x = y - x;

    как-то так =\

    __________

    как-то не так =\
     
    #1559 iv., 15 Sep 2008
    Last edited: 15 Sep 2008
    1 person likes this.
  20. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Только последнее действие x-y
     
    1 person likes this.
Thread Status:
Not open for further replies.