|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.03.2013, 17:14 | #11 |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
Да тут опечатка,должно быть (так и есть):
Код:
buffer:=VirtualAlloc(0,libsize,MEM_ COMMIT,PAGE_EXECUTE_READWRITE); Резервируется память,но адрес выбирает система.Однако данные не пишутся: Код:
|
07.03.2013, 17:23 | #12 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Почитайте про VirtualProtect()
|
07.03.2013, 17:55 | #13 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
а почему указатель файла ставится в конец?
|
11.03.2013, 11:39 | #14 |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
Кажется разобрался.Получилось вот что:
1. В VirtualAlloc надо обязательно ставить параметр MEM_COMMIT or MEM_RESERVE для Delphi или MEM_COMMIT|MEM_RESERVE для Visual C++ (пробовал оба способа) 2. VirtualProtect вообще не нужен,да он и не работает (выдает ошибку что нет доступа) 3. SetFilePointer (libhandle,0,0,FILE_BEGIN) - начало файла Память теперь замечательно резервируется по любому адресу (который свободен - К.О.),и вроде даже файл читается из самой проги. Из инжектированной DLL правда при чтении ошибка 998,но это я думаю можно исправить |
11.03.2013, 12:48 | #15 |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
Короче не работает в Delphi:
Код:
На VisualC++ и Borland C++ работает: Код:
|
11.03.2013, 13:11 | #16 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
в Делфи я не мастак, но смутно вспоминая детство,
bytesread - это output, и передается как var, & - не нужен. я прав? Код:
Последний раз редактировалось f.hump; 11.03.2013 в 13:23. |
11.03.2013, 13:46 | #17 |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
Да я уж по всякому пробовал,и с & ,и без, и nil на 0 менял - не хочет файл читать и хоть ты тресни. Одна IDE Embarcadero XE2 , на С++ этот код работает,на Делфи нет. Может быть Дельфям не нравятся какие-то параметры из CreateFile? Хотя тогда бы он размер не определил,но память выделяется - всё ок. Только блок пуст,а на С++ туда ещё считываются данные из файла
|
11.03.2013, 15:56 | #18 |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
Всё,заработало наконец. Секрет полишинеля заключался в том,что буфер передавался как адрес ячейки стека (указатель) вместо числового значения адреса.
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Загрузить файл с диска в динамическую память через VirtualAlloc | calypso | Win Api | 2 | 19.02.2013 14:41 |
как резервируется память для переменной | assch | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 22.12.2010 15:42 |
VirtualAlloc или GlobalAllocPtr? что лучше. | VintProg | Общие вопросы Delphi | 4 | 12.06.2010 13:29 |
VirtualAlloc | alenka_ej | Win Api | 3 | 03.06.2010 16:05 |
VirtualAlloc и VirtualProtect? | VintProg | Общие вопросы Delphi | 1 | 29.06.2009 11:50 |