Код выполняется, но в файл ничего не пишется. Помогите, обьясните что я не так написал?: Код (Text): push 0 push 80h push 3 push 0 push 1h push 80000000h push strn call CreateFileA@28 mov hVxD,eax push 0 push 0 push 0 push hVxD call SetFilePointer@16 push 0 push offset tmp1 push 3 push offset evil push hVxD call WriteFile@20 cmp eax,0 jne OKKKK push 0 push strn push strn push 0 call MessageBoxA@16 OKKKK: push hVxD call CloseHandle@4
Открываем файл: Код (Text): invoke CreateFile,$CTA0("data.txt"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0h,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0h mov hFile_data,eax Ставим указатель чтения/записи: Код (Text): invoke SetFilePointer,hhFile_data,10h,0h,FILE_BEGIN Пишем в файл: Код (Text): invoke WriteFile,hFile_data,offset buf,2h,offset flbytes,0h Закрываем файл: Код (Text): invoke CloseHandle,hFile_data Вот и всё!!! Если у тебя в файл ничего не пишется, то первое что приходит в голову: "А может быть он не окрывается?" Второе что приходит в голову: "Если он открывается, то наверное что-то с функцией WriteFile или с её параметрами?" И вообще что за синтаксис такой дурацкий - push, push...??? Так ничего большого не напишешь!!! И ещё скачай OllyDbg - прямо тут где-то валялась - очень удобно, если пишешь на Assembler'е!!!
Я бы рад от пушей отказаться но сам дядя Masm на меня ругается: Код (Text): invoke CreateFile,$CTA0("data.txt"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0h,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0h Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: pr.asm pr.asm(402) : error A2006: undefined symbol : CreateFile Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. LINK : fatal error LNK1181: cannot open input file "pr.obj" Press any key to continue . . . Код (Text): invoke CreateFileA@28,$CTA0("data.txt"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0h,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0h Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: pr.asm pr.asm(402) : error A2190: INVOKE requires prototype for procedure Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. LINK : fatal error LNK1181: cannot open input file "pr.obj" Press any key to continue . . .
А как там на счёт подключаемых модулей??? invoke - это по сути макрос... $CTA0 - это тоже... С помощью макросов мы делаем Assembler могучим как C++!!! При этом сохраняем основное преимущество - наши программули бешенно быстрые!!! Кстати вместо jne, je и т.д. на мой взгляд лучше использовать .if ... .else ... .endif!!! Код (Text): .386 .model flat, stdcall option casemap :none include E:\masm32\include\windows.inc include E:\masm32\include\kernel32.inc include E:\masm32\include\user32.inc includelib E:\masm32\lib\kernel32.lib includelib E:\masm32\lib\user32.lib include E:\masm32\macros\Strings.mac include E:\masm32\include\w2k\ntstatus.inc include E:\masm32\include\w2k\native.inc include E:\masm32\include\w2k\ntdll.inc includelib E:\masm32\lib\w2k\ntdll.lib .const .data .data? .code _start: invoke MessageBox,0h,$CTA0("api"),$CTA0("api"),MB_OK invoke ExitProcess,0h end _start
Поключил! Орет на параметры. Подключил, все что сказали: Код (Text): ;INCLUDELIB c:\masm32\lib\windows.lib ;INCLUDE c:\masm32\include\windows.inc includelib c:\masm32\lib\shlwapi.lib include c:\masm32\include\shlwapi.inc INCLUDE c:\masm32\include\user32.inc includelib c:\masm32\lib\user32.lib INCLUDE c:\masm32\include\kernel32.inc includelib c:\masm32\lib\kernel32.lib include c:\masm32\include\shell32.inc includelib c:\masm32\lib\shell32.lib include c:\masm32\include\masm32.inc includelib c:\masm32\lib\masm32.lib Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: pr.asm pr.asm(419) : error A2006: undefined symbol : FILE_ATTRIBUTE_NORMAL pr.asm(419) : error A2114: INVOKE argument type mismatch : argument : 6 pr.asm(419) : error A2006: undefined symbol : CREATE_ALWAYS pr.asm(419) : error A2114: INVOKE argument type mismatch : argument : 5 pr.asm(419) : error A2006: undefined symbol : FILE_SHARE_READ pr.asm(419) : error A2114: INVOKE argument type mismatch : argument : 3 pr.asm(419) : error A2206: missing operator in expression pr.asm(419) : error A2114: INVOKE argument type mismatch : argument : 2 pr.asm(419) : error A2006: undefined symbol : $CTA0 pr.asm(419) : error A2114: INVOKE argument type mismatch : argument : 1 Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. LINK : fatal error LNK1181: cannot open input file "pr.obj" Press any key to continue . . . Но только без windows, если подключать то: Код (Text): Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: pr.asm c:\masm32\include\windows.inc(115) : error A2004: symbol type conflict : bool c:\masm32\include\windows.inc(8052) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(8052) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(8064) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(8064) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(8082) : error A2005: symbol redefinition : hinst c:\masm32\include\windows.inc(8772) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(8772) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(8779) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(8779) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(8784) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(8784) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(8790) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(8790) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(8797) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(8797) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(8807) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(8807) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(8813) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(8813) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(8820) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(8820) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(9066) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(9066) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(9954) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(9954) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(9967) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(9967) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(9979) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(9979) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(9984) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(9984) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(9989) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(9989) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(9994) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(9994) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(9999) : error A2179: structure improperly initiali zed c:\masm32\include\windows.inc(9999) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10006) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10006) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10013) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10013) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10020) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10020) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10025) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10025) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10031) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10031) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10039) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10039) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10040) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10040) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10044) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10044) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10050) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10050) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10057) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10057) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10064) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10064) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10069) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10069) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10077) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10077) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10084) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10084) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10092) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10092) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10099) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10099) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10109) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10109) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10110) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10110) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10114) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10114) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10115) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10115) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10120) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10120) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10126) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10126) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10133) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10133) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10140) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10140) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10146) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10146) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10157) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10157) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10165) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10165) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10176) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10176) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10188) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10188) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10196) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10196) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10204) : error A2179: structure improperly initial ized c:\masm32\include\windows.inc(10204) : error A2008: syntax error : in structure c:\masm32\include\windows.inc(10215) : fatal error A1012: error count exceeds 10 0; stopping assembly Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. LINK : fatal error LNK1181: cannot open input file "pr.obj" Press any key to continue . . .
Код (ASM): invoke CreateFile, &filename, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_ARCHIVE,0 mov filehandle,eax mov ebx,numbytes; кол-во байтов которое нужно записать в файл loo: invoke WriteFile,filehandle,&buffer1,ebx,&wbytes,0 cmp wbytes,ebx; кол-во байтов для теста все ли байты записаны jne loo Может криво, это не претендует на красивый код, зато все ясно работает 100% потому что сам в свою прогу вставил в принцыпе у меня не возникло вопрос в апи для дельфи эти функции описаны нормально, всякие GENERIC_WRITE,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE есть inc файлах и lib файлах, если знать числовые значения можно и без этих слов обойтись удачи должно теперь получиться.
Эх... В чем еще может быть проблема? Первый пример выполняется, но опять же в файл ничего не записалось... Второй же висит (и понятно почему... в цикле пишет)... Код (Text): ; ПЕРВЫЙ ПРИМЕР ;invoke CreateFile,strn,GENERIC_WRITE,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,0 ;mov hVxD,eax ;invoke SetFilePointer,hVxD,0h,0h,FILE_BEGIN ;invoke WriteFile,hVxD,offset evil,2h,offset tmp1,0h ; ВТОРОЙ ПРИМЕР invoke CreateFile,strn,GENERIC_WRITE,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,0 mov hVxD,eax mov ebx,3; кол-во байтов которое нужно записать в файл loo: invoke WriteFile,hVxD,offset evil,ebx,offset tmp1,0 cmp tmp1,ebx; кол-во байтов для теста все ли байты записаны jne loo Код (Text): EXTERN CharToOemA@8:NEAR EXTERN GetStdHandle@4:NEAR EXTERN WriteConsoleA@20:NEAR EXTERN ReadConsoleA@20:NEAR EXTERN ExitProcess@4:NEAR EXTERN GetCommandLineA@0: NEAR EXTERN lstrcatA@8:NEAR EXTERN lstrcpyA@8:NEAR EXTERN lstrlenA@4:NEAR EXTERN lstrcmpA@8:NEAR ;EXTERN strstrA@8:NEAR EXTERN FindFirstFileA@8:NEAR EXTERN FindNextFileA@8:NEAR EXTERN FindClose@4:NEAR EXTERN CreateFileA@28:NEAR EXTERN SetFilePointer@16:NEAR EXTERN WriteFile@20:NEAR EXTERN CloseHandle@4:NEAR EXTERN FreeConsole@0:NEAR EXTERN AllocConsole@0:NEAR EXTERN Sleep@4:NEAR EXTERN GetLogicalDrives@0:NEAR EXTERN SetErrorMode@4:NEAR EXTERN MessageBoxA@16:NEAR option casemap:none ;INCLUDELIB c:\masm32\lib\windows.lib INCLUDE c:\masm32\include\windows.inc includelib c:\masm32\lib\shlwapi.lib include c:\masm32\include\shlwapi.inc INCLUDE c:\masm32\include\user32.inc includelib c:\masm32\lib\user32.lib INCLUDE c:\masm32\include\kernel32.inc includelib c:\masm32\lib\kernel32.lib include c:\masm32\include\shell32.inc includelib c:\masm32\lib\shell32.lib include c:\masm32\include\masm32.inc includelib c:\masm32\lib\masm32.lib
; ВТОРОЙ ПРИМЕР invoke CreateFile,strn,GENERIC_WRITE,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,0 если ты так создавал файл то где offset перед strn ???
Нашел я ошибку: для вывода в консоль перекодировал строчку пути, а CreateFile такую кодировку не переваривает.... Код (Text): ;push strn ;push strn ;call CharToOemA@8 ;mov eax,strn ;mov edi,1 ;call WRITE