|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 27, 2004 15:09:08 Существуют ли в асме средства создания, чтения, записи файлов не привязанные к API, как у С/с++? |
|
|
Дата: Окт 27, 2004 15:13:36 Нет, в асме таких средств нет. Как и в С/с++ |
|
|
Дата: Окт 27, 2004 16:00:46 · Поправил: FaceOFF а fopen, fread, fwrite? Это ведь не WinApi средства. Я вот и имею ввиду, есть ли что-то подобное в асме. |
|
|
Дата: Окт 27, 2004 16:23:45 · Поправил: Volynkin кхммм... вообще, fopen и иже с ними это на самом деле врапперы kernel API вызова по имени ZwCreateFile, который и занимается созданием/открытием файла. fopen в частности задает необходимые флаги для ZwCreatefile и дергает этот вызов. Тогда как в асме ты дергаешь этот вызов на прямую. Ничего более приближенного к железу кроме как этот вызов ну и еще несколько типа ZwWriteFile в асме не получить. |
|
|
Дата: Окт 27, 2004 19:16:52 Поразительно... |
|
|
Дата: Окт 27, 2004 19:47:01 Тавтологии накрутили, не фиг делать. Кто угодно после этого топа запутается... |
|
|
Дата: Окт 28, 2004 06:44:04 Дык в чём принципиальная разница между API и библиотечной функцией? |
|
|
Дата: Окт 28, 2004 10:06:29 2 S_T_A_S_ Дело в том, что прототипы (названия и параметры) библиотечных функций должны соотвествовать стандартам (ANSI C); на самом деле реализация функций изменяется в зависимости от системы, для которой пишется прога. |
|
|
Дата: Окт 28, 2004 20:26:05 · Поправил: Turkish Да уж, тавтология процветает. API это то, что дается конкретной операционной системой, а библиотечные функции (С\С++) - куски кода, которые встраиваются в исполняемый файл. Эти куски кода сами могут вызывать API функции. Причем чаше всего делается так, что существует несколько вариантов библиотек, для разных осей. Пример(C\C++): CreateFileA работает только в винде, а fopen и в винде и в *nix системах, хотя в проге, скомпилированной под винду, fopen вызывает CreateFileA АСМ не работает с системно-независимыми библиотеками, иначе все его достоинства теряются. |
|
|
Дата: Окт 29, 2004 07:08:50 Ok. CreateFileA лежит во внешней библиотеке. fopen - то же. Да, 2я - это библиотечная функция, декларированая стандартом. Да, ещё возможна разница в линковке (это вообще implementation defined). Ну и что? Кто/что мешает из кода на асме вызавать fopen ? Кто/что мешает поставить, например, wine и юзать CreateFileA в *nix ? Раз уж речь зашла о стандартах, зацитируем ISO/IEC 14882: All external object and function references are resolved. Library components are linked to satisfy external references to functions and objects not defined in the current translation. All such translator output is collected into a program image which contains information needed for execution in its execution environment. Теперь представим ситуацию (на выбор, кому что проще): - стандарт пишет microsoft (добавляя туды win32 API) - есть ось, API которой является имплементацией С library Каков будет ответ на поставленный в топе вопрос ? |
|
|
Дата: Окт 29, 2004 08:38:12 А это уже демагогия. Ты же спрашивал принципиальные отличия библиотечных ф-ий от API. Тебе же объяснили- CreateFileA как лежал во внешней библиотеке, так там и отслается после линковки. А fopen при сборке из библиотеки копируется в программу. Да, никто не мешает вызывать fopen из ассемблерной программы, прилинковав библиотеку, но зачем такие сложности? есть ось, API которой является имплементацией С library (Мне этот вариант понравился) Каков будет ответ на поставленный в топе вопрос ? Выражение "не привязанные к API" значит, что код скомпилируется в одно и то же (по функциональности) в разных ОС на разных компиляторах. Для предложенной тобой оси код name db "file.ext",0 flags db "w+" push flags push name call fopenскомпилируется как с CreateFile для винды. Но в Виндовс такой код не проканает! В общем, ответ будет тот же - ассемблер не подозревает о существовании файлов, следовательно, и функций для работы с ними нет. Можно, отодрав библиотеки от Си-компиляторов, написать асм-код, который будет компилироваться на разных системах, но это не будет реализовано "средствами асма". |
|
|
Дата: Окт 29, 2004 13:44:30 > Тебе же объяснили- CreateFileA как лежал во внешней библиотеке, так там и отслается после линковки. А fopen при сборке из библиотеки копируется в программу. Смелая теория :) Однако, неверная. Например: cl /MD > Да, никто не мешает вызывать fopen из ассемблерной программы, прилинковав библиотеку, но зачем такие сложности? Какие тут сложности? Всё так же, как и обычно, см. аттач ;-) > ассемблер не подозревает о существовании файлов, следовательно, и функций для работы с ними нет Ага, Си подозревает. :) Когда хидеры подкльчены. _1971624125__crt.zip |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.124 |