Проблемка

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Zuldrak, 22 Jun 2010.

  1. Zuldrak

    Zuldrak New Member

    Joined:
    15 Jan 2010
    Messages:
    45
    Likes Received:
    1
    Reputations:
    0
    Вылетает куча ошибок связанных с памятью или Access violation at address 77D4B95D in module 'USER 32.dll', никак не понимаю из за чего
    Code:
    unsigned long g;
    unsigned long*j;
    HWND H=FindWindow("TForm1","Сапёр");
    
    GetWindowThreadProcessId(H,(LPDWORD)g);
    HANDLE ProcessHandle=NULL;
     
    #1 Zuldrak, 22 Jun 2010
    Last edited: 22 Jun 2010
  2. fluffylion

    fluffylion Member

    Joined:
    22 Feb 2010
    Messages:
    55
    Likes Received:
    10
    Reputations:
    0
    Code:
    GetWindowThreadProcessId(H,&g);
     
  3. Zuldrak

    Zuldrak New Member

    Joined:
    15 Jan 2010
    Messages:
    45
    Likes Received:
    1
    Reputations:
    0
    Получилось, спаасибо, но терь пытаюсь записать в память , но ни че не происходит, делаю то жэ самое из артмани все нормально
    Code:
     AnsiString str;
    unsigned long g;
    unsigned long*j;
    HWND H=FindWindow("TForm1","Сапёр");
    
    GetWindowThreadProcessId(H,&g);
    HANDLE ProcessHandle=NULL;
    
    ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS, false, g);
    WriteProcessMemory(ProcessHandle,(void*)"00D82184", "1", 5, 0);
    ReadProcessMemory(ProcessHandle, (void*)"00D82184",str.c_str(), 5, 0);
      ShowMessage(str);
     
  4. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Ну это просто шедевр =)

    Для начала почитай про функции, которые используешь.
     
  5. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    i lold
    извините не удержался
     
  6. _nic

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

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    ТС почитай про ссылки и указатели на память(переменные) в С.
     
  7. Zuldrak

    Zuldrak New Member

    Joined:
    15 Jan 2010
    Messages:
    45
    Likes Received:
    1
    Reputations:
    0
    Почитал , пытаюсь сделать терь так , ругается на 0x5C6600 говорит

    Cannot convert 'const int' to 'const void *'

    че не пробовал не катит

    Code:
    unsigned long g;
    unsigned long*j;
    const  PokeValue = 4;
    const NumberOfBytes = 4;
    const  f=0x00D82184;
    HWND H=FindWindow("TForm1","Сапёр");
    GetWindowThreadProcessId(H,&g);
    HANDLE ProcessHandle=NULL;
    ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS, false, g);
    Cardinal v;
    
    WriteProcessMemory(ProcessHandle,0x5C6600, PokeValue, NumberOfBytes, v);
     
  8. herfleisch

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

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Указатели - это такая вещь, что её нужно понять. Покури указатели пару неделек - это бесценный опыт, который останется у тебя на всю жизнь. Это поистине великолепная и полезная вещь!

    По теме - ты передаёшь параметр int вместо указателя на область памяти (void *).

    P.S. 0x5C6600 - это адрес памяти. Нам он ни о чём не говорит.
     
    #8 herfleisch, 22 Jun 2010
    Last edited: 22 Jun 2010
  9. Zuldrak

    Zuldrak New Member

    Joined:
    15 Jan 2010
    Messages:
    45
    Likes Received:
    1
    Reputations:
    0
    Я это понимаю, но я не соображаю каким хером я могу на указатель ссылаться

    Вот нашел

    WriteProcessMemory(hProcess, (LPVOID)0x5C6600, &newdata, newdatasize, NULL)

    У меня так не канает , брал здесь
     
    #9 Zuldrak, 22 Jun 2010
    Last edited: 22 Jun 2010
  10. herfleisch

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

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Зачем тебе на указатель ссылать? Тебе нужно ссылать на область памяти, содержащую int? Тогда это примерно так:

    Code:
    int x = 5;
    void * pIntX;
    pIntX = &x;
    printf("%d", *((int *)pIntX));
    Всё же советую разобраться с указателями. Всю жизнь будешь пользоваться ими.
     
    #10 herfleisch, 22 Jun 2010
    Last edited: 22 Jun 2010
  11. Zuldrak

    Zuldrak New Member

    Joined:
    15 Jan 2010
    Messages:
    45
    Likes Received:
    1
    Reputations:
    0
    Кажет та ж а ошибка, щас в консольном посмотрю с твоим примером

    С консольным нормально компилит

    Терь такая ошибка Cannot convert 'int' to 'void *'

    Code:
    HWND H;
    HANDLE ProcessHandle=NULL;
    const  PokeValue = 4;
    const NumberOfBytes = 4;
    const  f=0x00D82184;
    Cardinal v;
    int x = 5;
    void * pIntX;
    pIntX = &x;
    
    
      AnsiString str;
    unsigned long g;
    unsigned long*j;
    
    
    
    HWND H=FindWindow("TForm1","Сапёр");
    GetWindowThreadProcessId(H,&g);
    
    ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS, false, g);
    
    
    WriteProcessMemory(ProcessHandle,*((int *)pIntX), PokeValue, NumberOfBytes, v);
    
    
    
     
    #11 Zuldrak, 22 Jun 2010
    Last edited: 22 Jun 2010
  12. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Там, где ты передаешь функции int нужно передавать void*
    Может в разделе "о работе" создашь тему, чтобы быстрее было?
     
  13. herfleisch

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

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Пипец... Вот это сила... Керниган и Ричи: Язык программирования Си.
    Когда прочитаете - заходите.
     
  14. Zuldrak

    Zuldrak New Member

    Joined:
    15 Jan 2010
    Messages:
    45
    Likes Received:
    1
    Reputations:
    0

    Я прекрасно понимаю что надо передавать void я пробовал по разному ни в какую
     
  15. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    очевидно ты не понимаешь преобразование типов, что есть указатели, что именно хочет апишка.
    И void не надо передавать. Ему требуется указатель на воид.
     
  16. Zuldrak

    Zuldrak New Member

    Joined:
    15 Jan 2010
    Messages:
    45
    Likes Received:
    1
    Reputations:
    0
    покажи как надо я сразу пойму )
     
  17. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    любой учебник по сиплюсу открой, там есть
     
  18. herfleisch

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

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Блин, тебе готовые куски кода нужны или ты хочешь разобраться в языке Си? Указатели изучаются на первом курсе (по-моему в первом семестре даже). Это основы основ. Как ты собираешься кодить на C/C++ без указателей!?
     
  19. Zuldrak

    Zuldrak New Member

    Joined:
    15 Jan 2010
    Messages:
    45
    Likes Received:
    1
    Reputations:
    0
    мне нужен именно готовый кусок этой функции, что разобратьься с памятью