Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

Ответ
 
Опции темы
Старый 26.02.2013, 16:37   #1
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
Репутация: 10
По умолчанию VirtualAllocEx возвращает ошибку 87 (неправильный параметр)

Почему то не работает код:
Код:

startaddr:=$03000000;
libsize:=GetFileSize('C:\MyDll.dll',0);
dumphandle:=GetModuleHandle(0);
VirtualAllocEx(dumphandle,Pointer(startaddr),libsize,MEM_COMMIT,PAGE_READWRITE);

Пробовал dumphandle:=GetModuleHandle('C:\pro gram1.exe'); - тоже самое
calypso вне форума   Ответить с цитированием
Старый 26.02.2013, 17:29   #2
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 20,985
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

скорее всего по вашему адресу нельзя выделить нужный блок памяти.
и в самом себе выделять память можно просто VirtualAlloc
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Старый 26.02.2013, 19:08   #3
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
Репутация: 10
По умолчанию

Похоже ошибку выдает все-таки GetModuleHandle.Я просто вставил GetLastError после VirtualAllocEx,поэтому путаница возникла.Косвенно это подтверждается тем,что:
Код:

VirtualAllocEx(dumphandle,nil,libsize,MEM_COMMIT,PAGE_READWRITE);

дает тот же результат (здесь уже адрес я предоставил выбрать системе)

Вообще мне надо получить дескриптор самого вызывающего процесс.По идее должно быть GetModuleHandle(nil) наверно?
Целиком должно получиться вот что:
1. Узнали размер MyDll.dll
2. Узнали хэндл самого процесса (сами себя то есть)
3. Выделили под нее память в самом процессе, начиная с адреса startaddr
4. Вызываем LoadLibrary('MyDll.dll')

Так сложно потому что код инжектирован в другой процесс.

Последний раз редактировалось calypso; 26.02.2013 в 19:12.
calypso вне форума   Ответить с цитированием
Старый 26.02.2013, 19:26   #4
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 20,985
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

чтоб выделить память в самом себе примените VirtualAlloc.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Старый 26.02.2013, 20:33   #5
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,166
Репутация: 1578
По умолчанию

Чем вам LoadLibrary не угодил...

Ваш вариант не работает, потому что вы путаете HMODULE и HANDLE процесса.
В одном процессе могут быть загружены разные модули.
waleri вне форума   Ответить с цитированием
Старый 26.02.2013, 20:41   #6
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
Репутация: 10
По умолчанию

Фишка в том,чтобы загрузить библиотеку в нужную дырку.Для этого весь гемморой с VirtualAllocEx
Цитата:
startaddr:=$03000000;
Цитата:
чтоб выделить память в самом себе примените VirtualAlloc.
А ну да,я почему то спутал что MemoryMappingEx где нельзя было задавать адрес.А тут всё должно получиться:
LPVOID WINAPI VirtualAlloc(
_In_opt_ LPVOID lpAddress,
_In_ SIZE_T dwSize,
_In_ DWORD flAllocationType,
_In_ DWORD flProtect
);
calypso вне форума   Ответить с цитированием
Старый 26.02.2013, 22:35   #7
Son Of Pain
Профессионал
 
Регистрация: 23.12.2010
Адрес: Киев
Сообщений: 1,129
Репутация: 370

icq: 388676648
По умолчанию

Я так и не понял, зачем тебе выделять память предварительно. LoadLibrary же сделает это сама.
Son Of Pain вне форума   Ответить с цитированием
Старый 26.02.2013, 22:51   #8
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 20,985
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
Я так и не понял, зачем тебе выделять память предварительно. LoadLibrary же сделает это сама.
и при этом уже выделенную память она не сможет применить(хотя может на это и расчет?)
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция возвращает неправильный указатель RomanA Общие вопросы C/C++ 3 25.02.2012 19:06
TrackPopupMenuEx возвращает 87 ошибку (неверные входные параметры) TitoAlehandro Win Api 0 27.09.2011 11:01
при вставке записи в БД (MDB) выдает ошибку "неправильный синтаксис запроса" lkjuio C# (си шарп) 8 01.05.2011 23:30
HttpWebResponse: вервер возвращает 500 ошибку Manonia Общие вопросы .NET 0 24.07.2010 08:07
idHTTP при нерабочем сайте возвращает ошибку Yuran Работа с сетью в Delphi 5 26.05.2008 14:37




05:48.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru