Файловые средства

Тема в разделе "WASM.WIN32", создана пользователем FaceOFF, 27 окт 2004.

  1. FaceOFF

    FaceOFF New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2004
    Сообщения:
    11
    Существуют ли в асме средства создания, чтения, записи файлов не привязанные к API, как у С/с++?
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Нет, в асме таких средств нет.

    Как и в С/с++
     
  3. FaceOFF

    FaceOFF New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2004
    Сообщения:
    11
    а fopen, fread, fwrite? Это ведь не WinApi средства. Я вот и имею ввиду, есть ли что-то подобное в асме.
     
  4. Volynkin

    Volynkin New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2004
    Сообщения:
    30
    кхммм... вообще, fopen и иже с ними это на самом деле врапперы kernel API вызова по имени ZwCreateFile, который и занимается созданием/открытием файла. fopen в частности задает необходимые флаги для ZwCreatefile и дергает этот вызов. Тогда как в асме ты дергаешь этот вызов на прямую. Ничего более приближенного к железу кроме как этот вызов ну и еще несколько типа ZwWriteFile в асме не получить.
     
  5. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    Поразительно...
     
  6. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Тавтологии накрутили, не фиг делать. Кто угодно после этого топа запутается...
     
  7. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Дык в чём принципиальная разница между API и библиотечной функцией?
     
  8. StoneColdCrazy

    StoneColdCrazy New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2004
    Сообщения:
    18
    2 S_T_A_S_

    Дело в том, что прототипы (названия и параметры) библиотечных функций должны соотвествовать стандартам (ANSI C); на самом деле реализация функций изменяется в зависимости от системы, для которой пишется прога.
     
  9. Turkish

    Turkish New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    80
    Адрес:
    Russia
    Да уж, тавтология процветает. API это то, что дается конкретной операционной системой, а библиотечные функции (С\С++) - куски кода, которые встраиваются в исполняемый файл. Эти куски кода сами могут вызывать API функции. Причем чаше всего делается так, что существует несколько вариантов библиотек, для разных осей.

    Пример(C\C++): CreateFileA работает только в винде, а fopen и в винде и в *nix системах, хотя в проге, скомпилированной под винду, fopen вызывает CreateFileA



    АСМ не работает с системно-независимыми библиотеками, иначе все его достоинства теряются.
     
  10. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Ok.

    CreateFileA лежит во внешней библиотеке.

    fopen - то же.

    Да, 2я - это библиотечная функция, декларированая стандартом.

    Да, ещё возможна разница в линковке (это вообще implementation defined).

    Ну и что?

    Кто/что мешает из кода на асме вызавать fopen ?

    Кто/что мешает поставить, например, wine и юзать CreateFileA в *nix ?



    Раз уж речь зашла о стандартах, зацитируем ISO/IEC 14882:





    Теперь представим ситуацию (на выбор, кому что проще):

    - стандарт пишет microsoft (добавляя туды win32 API)

    - есть ось, API которой является имплементацией С library

    Каков будет ответ на поставленный в топе вопрос

    ?
     
  11. Arvensis

    Arvensis New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2004
    Сообщения:
    72
    Адрес:
    Russia
    А это уже демагогия. Ты же спрашивал принципиальные отличия библиотечных ф-ий от API. Тебе же объяснили- CreateFileA как лежал во внешней библиотеке, так там и отслается после линковки. А fopen при сборке из библиотеки копируется в программу. Да, никто не мешает вызывать fopen из ассемблерной программы, прилинковав библиотеку, но зачем такие сложности?

    (Мне этот вариант понравился)





    Выражение "не привязанные к API" значит, что код скомпилируется в одно и то же (по функциональности) в разных ОС на разных компиляторах. Для предложенной тобой оси код
    Код (Text):
    1.  
    2. name db "file.ext",0
    3. flags db "w+"
    4.  
    5. push flags
    6. push name
    7. call fopen
    8.  
    скомпилируется как с CreateFile для винды. Но в Виндовс такой код не проканает! В общем, ответ будет тот же - ассемблер не подозревает о существовании файлов, следовательно, и функций для работы с ними нет. Можно, отодрав библиотеки от Си-компиляторов, написать асм-код, который будет компилироваться на разных системах, но это не будет реализовано "средствами асма".
     
  12. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    >




    Смелая теория :) Однако, неверная.

    Например: cl /MD





    >




    Какие тут сложности?

    Всё так же, как и обычно, см. аттач :derisive:





    >




    Ага, Си подозревает. :)

    Когда хидеры подкльчены.

    [​IMG] _1971624125__crt.zip