Проблемка с NtWriteVirtualMemory

Тема в разделе "WASM.WIN32", создана пользователем FakeMen, 28 май 2008.

  1. FakeMen

    FakeMen New Member

    Публикаций:
    0
    Регистрация:
    28 май 2008
    Сообщения:
    5
    Доброго времени суток.
    Вот столкнулся с такой проблеммой
    Код (Text):
    1.   bytesIO := 13;
    2.   NtAllocateVirtualMemory ( H, @InjData.AdrLibName, 0, @bytesIO, MEM_COMMIT or
    3.                             MEM_RESERVE or MEM_TOP_DOWN, PAGE_EXECUTE_READWRITE );
    4.   MemPointer := @Buf[0]; // buf => array [0..n] of Char;
    5.   // При вызове этой ф-и GetLastError = 2 ( ERROR_FILE_NOT_FOUND )
    6.   // но bytesWritten = 13
    7.   WriteProcessMemory ( H, InjData.AdrLibName, @Buf[0], 13, bytesWritten );
    8.   // Если вместо WriteProcessMemory вызвать эту ф-ю то возращается ошибка STATUS_SEGMENT_NOTIFICATION
    9.   NtWriteVirtualMemory ( H, @InjData.AdrLibName, @MemPointer, 13, @BytesIO );
    В чем может быть дело?
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Убери в последней строке @ перед InjData.AdrLibName и MemPointer
    А также
    1) перед вызовом NtAllocateVirtualMemory нужно установить InjData.AdrLibName:=Nil;
    2) нужно проверять результаты вызова функций на STATUS_SUCCESS или true и смотреть код ошибки GetLastError, только в случае неуспешного выполнения
     
  3. FakeMen

    FakeMen New Member

    Публикаций:
    0
    Регистрация:
    28 май 2008
    Сообщения:
    5
    Ах да, точно... Ошибся когда переводил. Пора мне завязывать по ночам сидеть. :)
    Я просто подрезал код чтобы было легче понять. Выделение памяти проходит вполне успешно и система сама выбирает свободный адрес ( InjData.AdrLibName = Nil ) .
    Ок, буду иметь ввиду

    Зы. Огромное спасибо