а fopen, fread, fwrite? Это ведь не WinApi средства. Я вот и имею ввиду, есть ли что-то подобное в асме.
кхммм... вообще, fopen и иже с ними это на самом деле врапперы kernel API вызова по имени ZwCreateFile, который и занимается созданием/открытием файла. fopen в частности задает необходимые флаги для ZwCreatefile и дергает этот вызов. Тогда как в асме ты дергаешь этот вызов на прямую. Ничего более приближенного к железу кроме как этот вызов ну и еще несколько типа ZwWriteFile в асме не получить.
2 S_T_A_S_ Дело в том, что прототипы (названия и параметры) библиотечных функций должны соотвествовать стандартам (ANSI C); на самом деле реализация функций изменяется в зависимости от системы, для которой пишется прога.
Да уж, тавтология процветает. API это то, что дается конкретной операционной системой, а библиотечные функции (С\С++) - куски кода, которые встраиваются в исполняемый файл. Эти куски кода сами могут вызывать API функции. Причем чаше всего делается так, что существует несколько вариантов библиотек, для разных осей. Пример(C\C++): CreateFileA работает только в винде, а fopen и в винде и в *nix системах, хотя в проге, скомпилированной под винду, fopen вызывает CreateFileA АСМ не работает с системно-независимыми библиотеками, иначе все его достоинства теряются.
Ok. CreateFileA лежит во внешней библиотеке. fopen - то же. Да, 2я - это библиотечная функция, декларированая стандартом. Да, ещё возможна разница в линковке (это вообще implementation defined). Ну и что? Кто/что мешает из кода на асме вызавать fopen ? Кто/что мешает поставить, например, wine и юзать CreateFileA в *nix ? Раз уж речь зашла о стандартах, зацитируем ISO/IEC 14882: Теперь представим ситуацию (на выбор, кому что проще): - стандарт пишет microsoft (добавляя туды win32 API) - есть ось, API которой является имплементацией С library Каков будет ответ на поставленный в топе вопрос ?
А это уже демагогия. Ты же спрашивал принципиальные отличия библиотечных ф-ий от API. Тебе же объяснили- CreateFileA как лежал во внешней библиотеке, так там и отслается после линковки. А fopen при сборке из библиотеки копируется в программу. Да, никто не мешает вызывать fopen из ассемблерной программы, прилинковав библиотеку, но зачем такие сложности? (Мне этот вариант понравился) Выражение "не привязанные к API" значит, что код скомпилируется в одно и то же (по функциональности) в разных ОС на разных компиляторах. Для предложенной тобой оси код Код (Text): name db "file.ext",0 flags db "w+" push flags push name call fopen скомпилируется как с CreateFile для винды. Но в Виндовс такой код не проканает! В общем, ответ будет тот же - ассемблер не подозревает о существовании файлов, следовательно, и функций для работы с ними нет. Можно, отодрав библиотеки от Си-компиляторов, написать асм-код, который будет компилироваться на разных системах, но это не будет реализовано "средствами асма".
> Смелая теория Однако, неверная. Например: cl /MD > Какие тут сложности? Всё так же, как и обычно, см. аттач > Ага, Си подозревает. Когда хидеры подкльчены. _1971624125__crt.zip