Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467

Acces Violation в dll

27.08.2016, 09:22. Показов 1978. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Иньекчу dll в процесс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
struct UL2ConsoleWnd {};
UL2ConsoleWnd *_consoleWnd = NULL;
 
extern "C"  {
    __declspec(dllexport) void Test() {
        Utils::Log(_consoleWnd);
    }
}
 
void Init() {
    _hook = new NCodeHookIA32();
    _hEngine = GetModuleHandle(L"engine.dll");
    _consoleWnd = *(UL2ConsoleWnd **)GetProcAddress(_hEngine, "?GL2Console@@3PAVUL2ConsoleWnd@@A");
    Utils::ClearLog();
    Utils::Log(_consoleWnd);
}
 
BOOL APIENTRY DllMain( HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved )
{   
    if (ul_reason_for_call != DLL_PROCESS_ATTACH) {
        return 1;
    }
 
    Init();
 
    return 1;
}
С инъекъекцией проблем не возникает.

Но при вызове CreateRemoteThread(Test) из программы-инъектора процесс критует с Access Violation.
Но, стоит заккоментировать _consoleWnd = *(UL2ConsoleWnd **)GetProcAddress(_hEngine, "?GL2Console@@3PAVUL2ConsoleWnd@@A") , или перенести в Test(), то всё в порядке.
Почему так происходит?
И да, почему DllMain вызывается с причиной DLL_PROCESS_ATTACH больше одного раза?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.08.2016, 09:22
Ответы с готовыми решениями:

Fscanf Acces violation
Записываются числа float в файл, потом выводятся из файла и записываются в структуру. Запись происходит корректно, в текстовом файле...

Access violation at address in module cc32100mt.dll
Нужна помощь. Билдер выдает ошибку "access violation at address in module cc32100mt.dll" при попытке записи в файл. Содержание файла не...

Exception thrown at 0x77D75BCA (ntdll.dll): 0xC0000005: Access violation reading location 0x0000
Есть задача Есть решение Основное приложение: #include "stdafx.h" #include <stdio.h> #include <conio.h> #include...

7
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
27.08.2016, 09:27
Цитата Сообщение от jr_ Посмотреть сообщение
Но, стоит заккоментировать _consoleWnd = *(UL2ConsoleWnd **)GetProcAddress(_hEngine, "?GL2Console@@3PAVUL2ConsoleWnd@@A") , или перенести в Test(), то всё в порядке.
Почему так происходит?
Возможно потому, что GetModuleHandle возвращает NULL.
Но пока не проверишь - не узнаешь.

Цитата Сообщение от jr_ Посмотреть сообщение
почему DllMain вызывается с причиной DLL_PROCESS_ATTACH больше одного раза?
DLL_PROCESS_ATTACH приходит только тогда, когда dll загружается в процесс.
Если dll загрузили, затем выгрузили, а затем опять загрузили - то снова придет attach.
0
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
27.08.2016, 09:43  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Возможно потому, что GetModuleHandle возвращает NULL.
Но пока не проверишь - не узнаешь.
GetModuleHandle возвращает не NULL.
GetProcAddress возвращает не NULL.
_consoleWnd по итогу тоже не NULL, это я знаю наверняка.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
27.08.2016, 09:44
Цитата Сообщение от jr_ Посмотреть сообщение
GetModuleHandle возвращает не NULL.
GetProcAddress возвращает не NULL.
_consoleWnd по итогу тоже не NULL, это я знаю наверняка.
Откуда ты все это знаешь, если в коде выше проверка ошибок отсутствует?
0
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
27.08.2016, 09:47  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Откуда ты все это знаешь, если в коде выше проверка ошибок отсутствует?
Utils::Log пишет в файл _consoleWnd и он соответствует действительности.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
27.08.2016, 09:54
Лучший ответ Сообщение было отмечено jr_ как решение

Решение

И где он пишет значение _hEngine, например?

Цитата Сообщение от jr_ Посмотреть сообщение
процесс критует с Access Violation
Цепляйся к процессу отладчиком и смотри, на чем упало.
Других хороших путей "расследования" нет.

Да, и еще. Вызов всяких разных функций внутри DllMain - практика плохая,
лучше создавать отдельный поток и делать это внутри него.
0
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
27.08.2016, 10:03  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
И где он пишет значение _hEngine, например?
Нашёл где собака зарыта.
Инъецируемый код, грузил dll 2 раза, и на первый вызов _hEngine был почему то нулевым.
Причём я был уверен, что он ненулевой, потому что активно использую экспортируемые и не только функции и проблем не возникало.

Цитата Сообщение от Убежденный Посмотреть сообщение
Да, и еще. Вызов всяких разных функций внутри DllMain - практика плохая,
лучше создавать отдельный поток и делать это внутри него.
Отдельный поток по той же причине ложил процесс еще в процессе загрузки dll, поэтому Init запускал из DllMain
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
27.08.2016, 10:10
Цитата Сообщение от jr_ Посмотреть сообщение
Отдельный поток по той же причине ложил процесс еще в процессе загрузки dll
Ну там, скорее всего, причина была в чем-то другом, потому что поток, выполняющийся
вне DllMain, ее проблемам (таким, как захват блокировки LoaderLock), не подвержен.

Ладно, в любом случае хорошо, что проблема разрешилась
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.08.2016, 10:10
Помогаю со студенческими работами здесь

Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read
Значит есть линия (класс Line ) , которая состоит из точек (Class Point). Хочется Одной линии передать значения другой. Я перегрузил...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

Acces violation
это просто капец если закомментировать считывание любого их двух параметров(5 или 6 строка) ошибки не возникает. procedure...

Acces violation at adress..
Дорого времени суток! Если Вас не затруднит, помогите, пожалуйста, решить проблему. Начала делать очередную лабораторную и при...

Возникает Acces Violation
Простая консольная прога в Builder С++ 2007, Win7 х64. Смысл проги - изменить размер(количество элементов) простого массива. Acces...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru