Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2007, 21:35   #1
SteelRat
Брэйнфакер Про
Пользователь
 
Аватар для SteelRat
 
Регистрация: 21.02.2007
Сообщений: 51
По умолчанию Запись в буфер Delphi & Asm

Приветствую. Ситуация такова. У меня есть буфер в котором будет картинка. При записи в него выскакивает Access Sharing Violation. Я, в принципе, не новичок в программировании, но это моя первая Windows-программа. Раньше как-то ДОСа всё хватало. От Гугла я уже опух и ничего не соображаю. Код примерно такой:

Код:
 asm
   push edi
   mov edi, OutBufPtr
   xor al, al
   stosb  { тут собсна и ошибка доступа к памяти }
   pop edi
end;
Спасибо.
SteelRat вне форума Ответить с цитированием
Старый 22.02.2007, 13:00   #2
SteelRat
Брэйнфакер Про
Пользователь
 
Аватар для SteelRat
 
Регистрация: 21.02.2007
Сообщений: 51
По умолчанию

Эмн... Может я плохо обрисовал задачу? Или так вообще не делают? =)
SteelRat вне форума Ответить с цитированием
Старый 22.02.2007, 20:21   #3
SteelRat
Брэйнфакер Про
Пользователь
 
Аватар для SteelRat
 
Регистрация: 21.02.2007
Сообщений: 51
По умолчанию

Нашел у немцев.

http://www.fh-wedel.de/~bek/asm/uebss02/ueb08a.html

У меня в принципе всё так же. Может память как-то зарезервировал не так. Не понимаю пока.
SteelRat вне форума Ответить с цитированием
Старый 22.02.2007, 20:23   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

страница в которой находятся данные должна быть c флагом доступа PAGE_WRITE
rpy3uH вне форума Ответить с цитированием
Старый 22.02.2007, 20:35   #5
SteelRat
Брэйнфакер Про
Пользователь
 
Аватар для SteelRat
 
Регистрация: 21.02.2007
Сообщений: 51
По умолчанию

Как этот флаг выставляется?
В коде этого немца не увидел, вроде, команд о разрешении доступа и тому подобного. Вот.

Последний раз редактировалось SteelRat; 22.02.2007 в 20:42.
SteelRat вне форума Ответить с цитированием
Старый 23.02.2007, 10:48   #6
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Выставляется через VirtualProtect
rpy3uH вне форума Ответить с цитированием
Старый 24.02.2007, 02:19   #7
SteelRat
Брэйнфакер Про
Пользователь
 
Аватар для SteelRat
 
Регистрация: 21.02.2007
Сообщений: 51
По умолчанию

Попытался. Делать надо так?

VirtualProtect(OutBufPtr, Width*Height, PAGE_WRITE, OldOutBufPtr);


Во-первых, PAGE_WRITE нигде не определено. Пытался писать различные числовые значения - не угадал.

Во-вторых. В Helpe к Дельфи нигде не нашел ни описания VirtualProtect, ни PAGE_WRITE - ничего. Параметры функции нашел лишь потому, что она описана в юните Windows.


И для чего нужен последний параметр функции?
У меня Дельфи 7.
SteelRat вне форума Ответить с цитированием
Старый 25.02.2007, 15:56   #8
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

пробуй PAGE_READWRITE последний параметр функции нужен для того чтобы сохранить туда старые атрибуты защиты
Код:
 var 
   oldpr:DWORD;
.......
   virtualprotect(,,PAGE_READWRITE,@oldpr); // или  virtualprotect(,,PAGE_READWRITE,oldpr)
rpy3uH вне форума Ответить с цитированием
Старый 25.02.2007, 18:44   #9
SteelRat
Брэйнфакер Про
Пользователь
 
Аватар для SteelRat
 
Регистрация: 21.02.2007
Сообщений: 51
По умолчанию

Работать работает, но доступа как не было так и нет. Нутром чую - ошибка где-то мелкая-мелкая. Не пойму пока ничего.
SteelRat вне форума Ответить с цитированием
Старый 25.02.2007, 23:09   #10
SteelRat
Брэйнфакер Про
Пользователь
 
Аватар для SteelRat
 
Регистрация: 21.02.2007
Сообщений: 51
По умолчанию

Цитата:
// Version 1.2 (Juni-09 2004)
// included compiler switch {$0+}. In Delphi 6 and 7 projects using this code
// with compiler optimizations turned off will raise an access violation
// {$O+} will ensure that this unit runs with compiler optimizations.
// This option does *not* influence other parts of the project including this
// unit.
// Thanks to Ralf Manschewski for pointing out this problem.
Нашел здесь http://www.delphipraxis.net/topic115...ndecoding.html

Но не помогло. =)
SteelRat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись дисков в Delphi FaTaL Общие вопросы Delphi 16 19.04.2011 20:15
Буфер и паскаль Mago Паскаль, Turbo Pascal, PascalABC.NET 4 29.07.2008 22:19
Запись CD/DVD дисков в Delphi Igoressicus Общие вопросы Delphi 10 17.07.2008 18:40
Запись в файл в Delphi, нужна помощь s-t-r-i-k-e-r Помощь студентам 5 03.06.2008 19:11
Запись на диск через Delphi delphin100 Общие вопросы Delphi 1 09.10.2007 10:10