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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
МихаилХ
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
#1

Как работать с сегментом данных файла exe? - C++

28.07.2014, 10:12. Просмотров 388. Ответов 6
Метки нет (Все метки)

Здравствуйте! Такой вопрос: возможно ли получить данные из сегменты данных файла exe другой программой? Скажем, к примеру, указатель на структуру? Или получить значение по указателю или скопировать данные? Если да то расскажите как или поделитесь ссылкой, ибо на просторах интернета подобной информации не нашел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2014, 10:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как работать с сегментом данных файла exe? (C++):

Как уменьшить размер exe файла? - C++
Всем привет, начал изучать c++ и меня очень смутило то, что exe файл даже простого hello world весит 542кб!? я просто не могу понять,...

Как менять иконку файла .exe? - C++
что нужно написать в коде с++, чтоб когда с++ сделает exe файл, то чтоб он имел иконку, которою я хочу?

Как создать в visual studio окошко .exe файла? - C++
Делал как то в visual 2008, но забыл уже как. там открывался код, и открывалось окошко, в это окошко кнопки можно было добавлять и всё...

Как в МFС работать с несколькими взаимосвязанными базами данных - C++
Есть аксессовская БД, в которой несколько взаимосвязаных таблиц. Как подключить их и как сделать так чтоб связи было видно? Спасибки.

Не создает exe, как запустить через командную строку с указанием имя файла - C++
#include "stdafx.h" #include <iostream> #include <fstream> #include <locale> #include <stdlib.h> using namespace std; void...

Как сохранить картинку внутри exe файла в Resources(Codeblocks&WxWidgets) - C++
?? программа небольшая, неохота тягать с собой еще и отдельную папку icons с картинками

6
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.07.2014, 12:09 #2
Цитата Сообщение от МихаилХ Посмотреть сообщение
данные из сегменты данных файла exe другой программой?
да можно {ссылка удалена}
0
МихаилХ
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
28.07.2014, 12:58  [ТС] #3
Цитата Сообщение от aLarman Посмотреть сообщение
да можно посмотрите тут
Я что то не нашел там про то как добраться к сегменту данных файле exe.
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.07.2014, 14:24 #4
МихаилХ, в первом посте РАЗДЕЛ 1: ПОЛУЧАЕМ ДАННЫЕ ИЗ КЛИЕНТА
тоже самое только другое имя экзе файла, + другие baseoffset-ы
0
МихаилХ
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
28.07.2014, 16:08  [ТС] #5
Ок. Посмотрю по внимательней.

Добавлено через 1 час 27 минут
Цитата Сообщение от aLarman Посмотреть сообщение
РАЗДЕЛ 1: ПОЛУЧАЕМ ДАННЫЕ ИЗ КЛИЕНТА
Если я правильно понял то в этой статье обсуждается получение данных из процесса, а мне нужно залезть в секцию данных файла exe и повыковыривать от туда данные.

Добавлено через 15 минут
Для большей ясности приведу код:
Есть программка вот с таким кодом, в ней есть глобальные переменные и массив. Вот значения этих самых переменных мне нужно считать. Собираю проект и получаю exe файл с секцией кода, данных, стека и т. д.
C++
1
2
3
4
5
6
7
8
9
10
11
char a[] = "hello! my name is Experemental! how are you?";
int i[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
char* c = "H";
int cc = 1777;
 
int main(void)
{
    char b = a[0];
    b = *c;
    return 0;
}
Создал еще один проект в него добавил код найденный мной на просторах интернета с небольшими изменениями.

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
    HANDLE hFile = CreateFile(L"C:\\Users\\Hodakovskij\\Documents\\Visual Studio 2013\\Projects\\Experimental\\Debug\\Experimental.exe",
        GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
    HANDLE hMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY | SEC_IMAGE, 0, 0, L"");
    LPVOID hModule = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);
 
    //store the base address the loaded Module
    char* dllImageBase = (char*)hModule; //suppose hModule is the handle to the loaded Module (.exe or .dll)
 
    //store the base address the loaded Module
    dllImageBase = (char*)hModule; //suppose hModule is the handle to the loaded Module (.exe or .dll)
 
    //get the address of NT Header
    IMAGE_NT_HEADERS *pNtHdr = ImageNtHeader(hModule);
 
    //after Nt headers comes the table of section, so get the addess of section table
    IMAGE_SECTION_HEADER *pSectionHdr = (IMAGE_SECTION_HEADER *)(pNtHdr + 1);
 
    ImageSectionInfo *pSectionInfo = NULL;
 
    //iterate through the list of all sections, and check the section name in the if conditon. etc
    for (int i = 0; i < pNtHdr->FileHeader.NumberOfSections; i++)
    {
        char *name = (char*)pSectionHdr->Name;
        if (memcmp(name, ".data", 5) == 0)
        {
            char *name = (char*)pSectionHdr->Name;
            char* pData = (char*)&dllImageBase[pSectionHdr->VirtualAddress];
            char pp[500000];
            memcpy(pp, pData, pSectionHdr->Misc.VirtualSize);
            TRACE(name);
            TRACE(" size %d\n", pSectionHdr->Misc.VirtualSize);
            pSectionHdr++;
        }
        pSectionHdr++;
    }//*/
При пошаговом прохождении в указателе pp можно прочитать строку : hello! my name is Experemental! how are you?
Но все остальные данные не читаются. И читаются только если exe собрана в дебаге, а релизовая exe не читается. Верней читается но данных в ней нет. Почему?
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
29.07.2014, 10:52 #6
Цитата Сообщение от МихаилХ Посмотреть сообщение
Верней читается но данных в ней нет. Почему?
другой baseoffset?)

Добавлено через 1 минуту
Цитата Сообщение от МихаилХ Посмотреть сообщение
секцию данных файла exe и повыковыривать от туда данные.
т.е не процесса а самого бинарного файла чтоли? тогда ничего не подскажу, но вообще говоря, такие стат.строки в бинарнике быть должны
0
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,389
29.07.2014, 10:58 #7
Цитата Сообщение от МихаилХ Посмотреть сообщение
Но все остальные данные не читаются. И читаются только если exe собрана в дебаге, а релизовая exe не читается. Верней читается но данных в ней нет. Почему?
А потому, что компилятор хитрый и умеет оптимизировать код. В дебаге оптимизация по умолчанию отключена, в релизе же компилятор может размахнуться во весь рост...
1
29.07.2014, 10:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2014, 10:58
Привет! Вот еще темы с ответами:

Как создать массив строк, считывая данные из файла (сортировка данных из файла) - C++
Доброго времени суток мне нужно отсортировать по алфавиту слова , которые содержатся в файле #include &lt;iostream&gt; #include ...

Как создать функцию, которая определит с каким типом данных ей работать и подстроиться под этот тип? - C++
например если мне нужно создать шаблон функции сортировки одномерных массивов произвольного типа)))

Как работать с указателями и как работать с ссылками - C++
Я в книге дочитал до темы указатели и ссылки, не понимаю как работать с указателями и как работать с ссылками. Я прочитал понятия я понимаю...

После компиляции проекта в EXE файла функция EbExecuteLine перестает работать - Visual Basic
Подскажите кто-нибудь почему после компиляции проекта в EXE файла функция EbExecuteLine перестает работать. В режима разработки программы...


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

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

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