WriteFile

Тема в разделе "WASM.BEGINNERS", создана пользователем fragment, 11 май 2010.

Статус темы:
Закрыта.
  1. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    я в этой ольке ваще ниче непанимаю :\
     
  2. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Человек пишуший код на ассемблере априори должен знать как пользоваться отладчиком.
     
  3. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    помогите с процедурой то, а то я что-то торможу
     
  4. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    или она так не запускается? нада что ддл делать для одной процедуры?
     
  5. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    fragment
    Если не секрет ты хотя б одну книжку по асму читал? Какую ??
     
  6. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    [​IMG]

    ды как так то? :dntknw:
     
  7. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    читал пару, но у меня их нет под рукой щас... я их подарил
     
  8. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    ты об этом : call ErrorP ?
    так это вообще не понятно что...
    Чему равна ErrorP ?
    По той картинку которую выложил можно только предсказаниями заниматься конца света ).
     
  9. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    я так панимаю программа падает в мамент перезаписи буфера функцмей wsprintfA
    как узнать? че мне делать? помагите плиз
     
  10. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    ну я вообще думал что так вызываются процедуры
     
  11. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Какие процедуры ?
    Что делает call знаешь ?
     
  12. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    jump на указанную метку... в какомто другом компиляторе так вроде можно было вызывать функции, а как ето правельно делается ? и че делать с буфером ?
     
  13. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Не на метку а на адрес, просто компилятор сам вместо метки ставит адрес.
    А когда ты используешь call это не совсем джамп, тоесть там push eip + jmp
    В общем гугли эти книжки:
    АССЕМБЛЕР на примерах.
    Искусство программирования на Ассемблере
    Assembler для DOS, Windows и UNIX.
     
  14. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Книжки нада пакупать, не могу читать на компе долго. Но спасибо.
    Я вкурсе что он прыгает на метку (адрес в твоем отладчике) .. не могу просто в премерах найти как правильно вызывать такие функции, может один премер мне пакажите?
     
  15. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    fragment, если бы вы юзали отладчик, то увидели бы что функа wsprintfA за собой не прибирает стэк, и то что вы передали ей при вызове так и остается на вершине стэка. Т.о в функция ErrorP не может правильно выйти по ret. Нужно добавить add esp, 0ch после call wsprintfA
    Код (Text):
    1. ....
    2. call wsprintfA
    3. add esp, 0ch
     
  16. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Да спасибо , все стало работать нормально!
    А почему именно 0Ch нужно прибавлять , я немогу в уме что-то пикинуть :dntknw:
     
  17. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    А с помощью какой функции мне изменить права для файла?
     
  18. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Три аргумента по 4 байта каждый
    Код (Text):
    1.     push eax - 3
    2.     push offset sfc - 2
    3.     push offset ErrorCode - 1
    4.     call wsprintfA
    3*4 = 12 = 0ch

    По видимому это UAC не дает создать файл
     
  19. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    я чето всеравно с трудом соображаю как это, но ничего, думаю со времянем пойму
     
  20. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    ммм я плохо знаю язык , но не ета ли функция каторая мне нужна

    Код (Text):
    1. char _devicename[] = "\\\\.\\A:";
    2. _devicename[4] = Drive_letter;
    3. hDevice = CreateFileA( _devicename,
    4. GENERIC_READ,
    5. FILE_SHARE_READ | FILE_SHARE_WRITE,
    6. NULL,
    7. OPEN_EXISTING,
    8. 0,
    9. NULL);
    10. if (hDevice == INVALID_HANDLE_VALUE)
    11. return ;
    12.  
    13. SetFilePointer (hDevice, (i*SectorNumber_for_each_read*512),
    14. NULL,FILE_BEGIN);
    15.  
    16. if (!WriteFile (hDevice, sectorBuffer, 512*SectorNumber_for_each_read,
    17. &numberOfBytesWrite, NULL) )
    18. {
    19. win = GetLastError();
    20. break;
    21. }
    22. CloseHandle(hDevice);
    23. // win = 5 = permition denied
    понимаю ето SetFilePointer ? или не то?



    .....

    Чтобы извлечь дескриптор безопасности объекта файла или каталога, вызовите функцию GetNamedSecurityInfo или GetSecurityInfo. Чтобы изменить дескриптор безопасности объекта файла или каталога, вызовите функцию SetNamedSecurityInfo или SetSecurityInfo.

    думаю тогда вот это паможет, буду пробывать
     
Статус темы:
Закрыта.