![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 28.11.2009
Сообщений: 6
|
![]()
Всем доброго времени суток!
Недавно, очень потребовался низко уровневый вывод в файл. Но знаний в асм мало, поэтому прошу, помогите! компилятор находит ошибки, хотя вроде бы все правильно (но если ошибки, значит косяков много) =((( <code> ... //Открываем файл push 0 push File_Attribute_Normal push Open_Always push 0 push 0 push Generic_Write push offset fname call CreatefileA cmp eax,0ffffffffh // Тут выдается ошибка (текст ошибки в конце поста) je @@exit mov hFile,eax //Опр.размер push hFile push 0 call GetFileSize mov sz,eax //устанавливаем указатель в файле push hFile push sz push 0 push File_Begin call SetFilePointer //Собственно пишем данные в файл push 0 push offset ZapisanoBytes push len push str push hFile call Writefile cmp eax,0 jz @@exit //Закрываем файл push hFile call Closehandle ... </code> Ошибка следующая: " Project1.exe raised exception class EAccessViolation with message 'Access violation at address 7C9012B4' in module ntdll.dll. Read of address ffffffffc ....." Если, кто знает в чем дело отпишитесь, очень нужна помощь. Пишу на Дельфи, м\б дело в нем, хотя м\б этот код сам по себе не правильно написан, если так то подскажите что-нибудь..... |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 17.09.2008
Сообщений: 349
|
![]()
если open_always, то он должен открывать существующий файл. Чтобы создать новый - CREATE_NEW
создаёт файл и пишет в нём строку. только всё время переписывает 2 первых символа. Код:
если чем помог, поставьте отзыв на весы
![]() Последний раз редактировалось Xatr; 17.01.2010 в 02:44. |
![]() |
![]() |
![]() |
#3 | |
equ asm
Участник клуба
Регистрация: 02.05.2009
Сообщений: 1,605
|
![]() Цитата:
М/б нужно 0xffffffff или даже просто -1 написать ? devilmm, Можешь exe'шник кинуть ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4 Последний раз редактировалось Goodwin98; 17.01.2010 в 02:43. |
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 28.11.2009
Сообщений: 6
|
![]()
Ну это понятно. Файл присутсвует, в который надо записывать. Все равно тоже самое, даже если его нету, уже и это проверил.. =))
вот весь код, м\б тут где-то есть ошибка..хотя вроде все ок...: <code> procedure TForm1.Button1Click(Sender: TObject); var ZapisanoBytes : Cardinal; hFile: Thandle; str:PAnsiChar; len: integer; sz: DWORD; fname: PAnsiCHAR; begin fname:='C:\log.txt'; str:='fuck'; len:=length(str); asm //Открываем файл push 0 push File_Attribute_Normal push Open_Always push 0 push 0 push Generic_Write push offset fname call CreatefileA cmp eax,0ffffffffh // Тут выдается ошибка (текст ошибки в конце поста) je @@exit mov hFile,eax //Опр.размер push hFile push 0 call GetFileSize mov sz,eax //устанавливаем указатель в файле push hFile push sz push 0 push File_Begin call SetFilePointer //Собственно пишем данные в файл push 0 push offset ZapisanoBytes push len push str push hFile call Writefile cmp eax,0 jz @@exit //Закрываем файл push hFile call Closehandle @@exit: push 0 call ExitProcess end; end; </code> |
![]() |
![]() |
![]() |
#5 |
Регистрация: 28.11.2009
Сообщений: 6
|
![]()
если установить -1 , то выдается аналогичная ошибка при выполнении процедуры. Но прога компилится и в принципе полет нормальный.
если так 0xffffffffh, то он воспринимает это, как необъявленную переменную. Судя по всему да, скорее всего воспринимает. Компилирует программу без ошибок. Только когда идет выполнение процедуры. Выдается собственно ошибка чтения памяти. Ща сек, откомпилю.. =))) Давай почту)) или залить куда-нить? Последний раз редактировалось devilmm; 17.01.2010 в 02:56. |
![]() |
![]() |
![]() |
#7 |
Регистрация: 28.11.2009
Сообщений: 6
|
![]()
Вот ссылка:на компилиную горе прогу:
http://dump.ru/file/4150810 очень извиняюсь .что так долго ... GPRS дает о себе знать... и размер проги((( |
![]() |
![]() |
![]() |
#8 |
equ asm
Участник клуба
Регистрация: 02.05.2009
Сообщений: 1,605
|
![]()
Там вместо имени файла в стек заносится какая-то фигня, а именно ffffffffc. Так что играйся с push offset fname
|
![]() |
![]() |
![]() |
#9 |
Регистрация: 28.11.2009
Сообщений: 6
|
![]()
окей.. спасибо большое.. сейчас чего-нибудь поделаю с этим... )
|
![]() |
![]() |
![]() |
#10 | ||
Пользователь
Регистрация: 14.01.2010
Сообщений: 61
|
![]() Цитата:
Может так надо Цитата:
Извинюсь тупанул что то мне уже везде Ассемблер мерещится
Опыт не пропьешь если он есть=)))
Последний раз редактировалось --=SaNitinDG=-; 17.01.2010 в 07:55. |
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
открытие файла | vo_sa | Общие вопросы C/C++ | 7 | 25.06.2009 11:23 |
Открытие файла и создание графика на основе чисел из файла | Simon..14 | Общие вопросы C/C++ | 8 | 09.06.2009 10:18 |
Открытие файла | Veiron | Общие вопросы Delphi | 2 | 27.02.2008 03:12 |
Открытие файла | Lexakazanskij | Паскаль, Turbo Pascal, PascalABC.NET | 9 | 01.11.2007 22:27 |