Всем доброго времени суток. Думаю,что мне здесь помогут найти ответ на такой вот вопрос:можно ли в асме использовать эти функции;если да,то как это сделать(что подключить там). Работаю в RadAsm.
подключить там логично, что libc, а использовать - как обычные cdecl функции внешние. Ну зашибись. А диалект языка может укажешь вместо IDE?)
Например для fasm Код (Text): push ebx cinvoke fopen, "text.txt", "a+" mov ebx, eax ; FILE* ; add check for 0 cinvoke fprintf, ebx, "Hello, World!" cinvoke fclose, ebx pop ebx
Согласен,забыл сказать упомянуть MASM))) Пожалуйста,можно немного поконкретней. Честно,не знаю какие libs для этой функции подключать.(Не с проста же задал вопрос для новичков))))))
В общем вот что происходит. подключаю libc.lib Код (Text): includelib libc.lib;полный путь тоже пробовал Где-то в коде делаю,просто к примеру,следующее. Код (Text): .... push [hFile] call fprintf add esp,3*4 .... На что мне RadAsm пишет что-то в таком типе:"Неверный символ fprintf"
Booster Код (Text): extern fprintf:NEAR extern fflush:NEAR Взгляни,пожалуйста. Правильно ли я сделал? (и еще дайте ссыль на libc.lib,если не трундно)
Забиваем на libc и юзаем msvcrt. Код (Text): .MODEL FLAT, STDCALL EXTERN printf:NEAR INCLUDELIB d:\masm32\lib\user32.lib INCLUDELIB d:\masm32\lib\kernel32.lib INCLUDELIB d:\masm32\lib\shell32.lib INCLUDELIB msvcrt.lib ;----------------------------------------------- _DATA SEGMENT DWORD PUBLIC USE32 'DATA' TEXT DB 'Hello %d', 0 _DATA ENDS ;----------------------------------------------- _TEXT SEGMENT DWORD PUBLIC USE32 'CODE' START: PUSH 12345 PUSH OFFSET TEXT CALL printf ADD ESP, 8 PUSH 1 CALL ExitProcess@4 _TEXT ENDS END START Линковать нужно с ключом /subsystem:console, иначе текста не будет видно. msvcrt на всякий случай - msvcrt.
Booster Прости за надоедливость,но не выходит никак. Сделал как ты советовал(создал новый проект,чтобы проверить) Код (Text): .386 .MODEL Flat, STDCALL option casemap:none EXTERN fprintf:NEAR EXTERN fflush:NEAR EXTERN fopen:NEAR include windows.inc include kernel32.inc include user32.inc include advapi32.inc include msvcrt.inc includelib kernel32.lib includelib user32.lib includelib advapi32.lib includelib msvcrt.lib .DATA fileName db "1.txt",0 hFile dd 0 .DATA? .CONST .CODE start: push offset fileName call fopen mov hFile,eax .if hFile!=0 push offset fileName push hFile call fprintf .endif invoke ExitProcess,NULL end start Проект тоже прикрепил.
Что-то форум глючит не по-детски. Код (Text): .386 .MODEL Flat, STDCALL option casemap:none EXTERN fprintf:NEAR EXTERN fflush:NEAR EXTERN fopen:NEAR include windows.inc include kernel32.inc include user32.inc include advapi32.inc include msvcrt.inc includelib kernel32.lib includelib user32.lib includelib advapi32.lib includelib msvcrt.lib .DATA fileaccess db "w", 0 fileName db "1.txt",0 hFile dd 0 .DATA? .CONST .CODE start: push offset fileaccess push offset fileName call fopen add esp, 8 mov hFile,eax .if hFile!=0 push offset fileName push hFile call fprintf add esp, 8 .endif invoke ExitProcess,NULL end start После вызова нужно вручную выравнивать стек, так как cdecl. Ну и внимательно читаем документацию по параметрам функций.