Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
1

При чтении dll библиотеки в обычном(не бинарном) виде, чтение прерывается на NULL

23.06.2014, 21:22. Просмотров 1110. Ответов 2
Метки нет (Все метки)


Задача такая: открыть dll файл(не мой) в обычном текстовом виде(каким его могут открыть обычные блокноты), найти нужную последовательность символов и заменить их.
Проблема: при открытие dll читается до первого NULLа и прерывается.
Вот собственно код:
C++
1
2
3
4
5
6
7
// Открываем объект ядра "файл"
HANDLE hFile = CreateFile("client2.dll", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// Создаем объект ядра "проекция файла"
HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
// Проецируем в адресное пространство процесса объект "проекция файла"
string pbFile = (const char*) MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.06.2014, 21:22
Ответы с готовыми решениями:

CDialogEx + dll, После завершения модального диалога (CDialogEx) из длл-библиотеки работа длл-библиотеки прерывается
Добрый день, подскажите, пожалуйста, новичку с++/mfc. Работаю в VS 2010. Есть необходимость...

Чтение файла в бинарном виде ЧАСТЯМИ
Собственно вопрос в самом названии темы. Возможно ли читать файл функцией Open sFile For Binary As...

Ошибка при бинарном чтении файла
Всех приветствую! Написал код для чтения строки из файла, но выдаёт ошибку, понятия не имею почему....

Проблема при бинарном чтении BMP файла
Проблема возникла при бинарном чтении BMP файла а точнее структуры BITMAPFILEHEADER и...

2
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.06.2014, 02:21 2
Цитата Сообщение от mihalech19 Посмотреть сообщение
читается до первого NULLа и прерывается.
Где читается? Как читается? dll - это не текстовый файл, и это нужно учитывать.

Добавлено через 19 минут
Вот такое может не работать не с текстом:
Цитата Сообщение от mihalech19 Посмотреть сообщение
string pbFile = (const char*) MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
Если нужна такая string (не понятно, только, зачем?), то сначала нужно узнать размер файла (DWORD fileSize = GetFileSize(hFile, NULL)), а потом заполнить string байтами из файла:
C++
1
2
3
4
    char* pbFile = (char*)MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
    string str;
    for (int i = 0; i < fileSize; ++i)
        str += pbFile[i];
1
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
24.06.2014, 15:35  [ТС] 3
Да , я понимаю , что это может показать полным абсурдом , но так нужно.
Как читается?
В память
Короче говоря, нужно просто считать файл в память. Но, когда я пытаюсь вывести на экран, выводится только пару символов и все (

Добавлено через 11 минут
Вот так получилось сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int _tmain(int argc, _TCHAR* argv[])
{
// Открываем объект ядра "файл"
HANDLE hFile = CreateFile("client2.dll", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// Создаем объект ядра "проекция файла"
HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
// Проецируем в адресное пространство процесса объект "проекция файла"
char* pbFile =  (char*) MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
DWORD fileSize = GetFileSize(hFile, NULL);
string sFile;
for (int i = 0; i < fileSize; i++)
sFile +=pbFile[i] ;
//find_and_replace(sFile, "1134", "9999") ;
system("pause");
    return 0;
}
Но если пытаюсь вывести файл в консоль
C++
1
cout << sFile << endl;
, то очень медленно считывается и еще крашится , даже если сворачиваешь консоль

Добавлено через 3 часа 58 минут
Все нашел решение:
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
28
29
30
31
32
33
using namespace std;
void find_and_replace(string& source, string const& find, string const& replace)
{
    for(string::size_type i = 0; (i = source.find(find, i)) != string::npos;)
    {
        source.replace(i, find.length(), replace);
        i += replace.length() - find.length() + 1;
    }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
 
// Открываем объект ядра "файл"
HANDLE hFile = CreateFile("client2.dll", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// Создаем объект ядра "проекция файла"
HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
// Проецируем в адресное пространство процесса объект "проекция файла"
char* pbFile =  (char*) MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
// Проецируем в адресное пространство процесса объект "проекция файла"
DWORD fileSize = GetFileSize(hFile, NULL);
string sFile;
for (int i = 0; i < fileSize; i++)
sFile +=pbFile[i];
find_and_replace(sFile, "1134", "9999") ;
 for (int i = 0; i < fileSize; i++)
  pbFile[i] = sFile[i];
 
system("pause");
 
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2014, 15:35

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Ошибка при бинарном чтении массива структур из файла
Здравствуйте! Написал программу, которая бинарно записывает и считывает массив структур в файл, но...

Разные результаты работы при обычном запуске и при дебаге (использование dll)
Есть dll, в ней есть процедура и функция, которые мне надо использовать procedure SetStr(aStr :...

Получаю null при чтении из JSON
пишу такой код, выходит ошибка что proba=null; var get = new HttpRequest(); string...

Чтение dll библиотеки написанной на C++ Builder 5 в C#
VS 2010. Казалось бы простой процесс чтения dll созданной в C++ Builder 5 выдаёт в C#...

Чтение dll библиотеки написанной на C++ Builder 5 в Lazarus
Чтение dll библиотеки написанной на C++ Builder 5 в проекте Lazarus версии 2.0.4 с FPC 3.0.4...

Слетели библиотеки .dll При запуске любых приложений на компьютере вылетает ошибка с расширением .dll
Не запускается приложения на windows 8. А также удалились точки доступа Восстановления Системы и...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.