Форум программистов, компьютерный форум CyberForum.ru

Считывание/запись машинного кода C++ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Отсортировать файл: положительные числа, потом отрицательные http://www.cyberforum.ru/cpp-beginners/thread1755525.html
Дан файл f, компоненты которого являются целыми числами. Никакая из компонент файла не равна нулю. Файл f содержит столько же отрицательных чисел, сколько и положительных. Используя вспомогательный файл h, переписать компоненты файла f в файл g так, чтобы в файле g: · сначала шли положительные, потом отрицательные числа; · числа располагались в следующем порядке два ...
C++ Рекурсия: вывести все числа от A до B включительно Нужна помощь Даны два целых числа A и В (каждое в отдельной строке). Вывести все числа от A до B включительно, в порядке возрастания, если A < B, или в порядке убывания в противном случае. При решении задачи использовать рекурсию. Где должна быть рекурсия? Это примерный код без нее: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { http://www.cyberforum.ru/cpp-beginners/thread1755520.html
Можно ли из букв, входящих в одно слово, составить другое C++
Даны два слова. Составить программу проверки, можно ли из букв, входящих в одно слово, составить другое (каждая буква используется только один раз). #include <iostream> #include <string> using namespace std; int main() { setlocale(LC_ALL, "Rus"); char A, B; int j = 0;
Не всё записывается в файл. Ничего не понимаю C++
Здравствуйте. У меня появилась такая проблема: нужно записать в один файл данные из двух функций. Казалось бы, что ничего сложного. Но вот что происходит у меня: если стоит запись в файл только в одной функции, то в файл всё нормально записывается. Как только я добавляю запись в файл во вторую функцию, то в файл записываются данные только из второй функции, но не из обеих. Подскажите, пожалуйста,...
C++ Найти заданные книги в файле http://www.cyberforum.ru/cpp-beginners/thread1755512.html
Дан файл f, содержащий сведения о книгах. Сведения о каждой из книг - это фамилия автора, название и год издания. 1) Найти названия книг данного автора, изданных с 1960 г. 2) Определить, имеется ли книга с названием "Информатика". Если да, то сообщить фамилию автора и год издания. Если таких книг несколько, то сообщить имеющиеся сведения обо всех книгах.
C++ Двумерный массив в бинарном файле Здравствуйте, прошу помощи, ибо не знаю, где таится ошибка в функции: Функция считывает матрицы из бинарного файла и для каждого находит сумму элементов, если сумма четная - он записывает ее в другой файл. Сама функция записи работает, если самому заносить данные матриц, он записывает великолепно, а когда через условие он пишет белиберду. void func() { int mass; ifstream... подробнее

Показать сообщение отдельно
HemmigoR
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 1
05.06.2016, 21:54     Считывание/запись машинного кода C++
Итак, задача состоит в следующем:
Необходимо считать код из бинарного (.bin) и(или) исполняемого файла (.exe). Преимущественно из исполняемого, но если будет найдено решение для бинарного - уже хорошо, так как суть уже одна и та же. Насколько я понимаю, .exe - тот же самый бинарный файл, только с дописанным заголовком.
За основу моей программы был взят код с данного форума, кстати, из темы с похожей проблемой. Но решения там так и не привели, поэтому я создал новую тему. Кусок кода:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
private: System::Void btnOpen_Click(System::Object^  sender, System::EventArgs^  e) {
                 if(this->openFileDialog->ShowDialog()==
                     System::Windows::Forms::DialogResult::OK) {
                         char fileName[1024];
                         for(int i = 0; i < openFileDialog->FileName->Length; i++)
                             fileName[i] = openFileDialog->FileName[i];
                         fileName[openFileDialog->FileName->Length]='\0';
                         int buffer; 
                         int cnt = 0; 
                         FILE *f;
                         FILE *f1;
                         f = fopen (fileName,"rb");  
                         if (!f) 
                         {
                             printf ("Cannot open this file\n");
                         }
                         else 
                         {
                             f1 = fopen ("tmp.bin","w"); // возможно изменить на tmp.exe?
                             if (!f1) 
                             {
                                 printf ("File-result hasn't created \n");
                             }  
                             else 
                             {
                                 do 
                                 {
                                     buffer = fgetc (f);
                                     if (buffer!=EOF) 
                                     {
                                         fprintf (f1, "%-0.2x%c", buffer, ' ');
                                     }
                                     cnt++;
                                     if (!(cnt%16)) 
                                         fputc (10, f1);
                                 }
                                 while (buffer!= EOF);
                                 fseek (f1, 1, SEEK_CUR);
                                 fscanf (f1, "%x", &buffer);
                                 fclose (f1);
                             }
                         }
                         if (f) 
                         {
                             fclose (f);
                         }
                         this->Refresh();
                 }
             }
Итак, в чем проблема. Проблема состоит в том, что при записи в новый файл, считанные байты программа записывает в виде текста. Соответственно, если открыть полученный файл в Hex-редакторе, можно увидеть код, совершенно различающийся с исходным бинарным файлом.
пример
Есть бинарный файл: 4a 00 ff. Данная программа считывает этот код и пишет его в новый бинарник в качестве текста. Открываем бинарник: 55 0a 1E. Нужно было получить в новом бинарном файле: 4a 00 ff.

Зачем всё это нужно (для общего понимания проблемы).
Программа должна содержать функцию "копирования" исполняемого файла, при чём этот процесс надо сделать "вручную", то есть побитово/побайтово занести код в буфер. Это нужно для дальнейшего изменения кода (например, шифрования), но так же должна быть функция дешифровки и последующего запуска. Поэтому важно чтобы буфер содержал идентичный начальному файлу машинный код. Вопрос, как это сделать.

PS. Приведенный мной код работает. Он считывает из любого файла (bin или exe) и пишет весь код как ТЕКСТ в новый файл.
P.S.S Искренне прошу прощения, если что-то написал/оформил не так. Это моё первое обращение на форум, никогда не был участником форумов. Лишь изредка во время поиска информации пробегал по темам.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru