Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++ WinAPI]Скопировать содержимое exe файла, прочитать нетекстовый файл 
:(
    Опции темы
Bugmaker
Дата 5.4.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 27.6.2008

Репутация: нет
Всего: нет



Как программно прочитать содержимое exe файла? Допустим виндового calc.exe.
Пробовал fopen\fgets.. не получается.

Может я вообще не тем путем иду? хочу программно создать exe файл без копирования.
То есть допустим запускаю программу на другом компе а она там создает exe файл с нужным содержимым.
Можно ли это реализовать, и будет ли вообще такой файл потом корректно запускаться?
PM MAIL   Вверх
GremlinProg
Дата 5.4.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Перемещено в "С/C++ общие вопросы"


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
andrew_121
Дата 5.4.2009, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Bugmaker, Да, можно. Но на стадии компиляции тебе нужно содержимое файла преобразовать в массив значений, и при запуске проги его записывать в файл.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
GoldFinch
Дата 5.4.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



в ресурсы его засунь
PM MAIL ICQ   Вверх
xvr
Дата 5.4.2009, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Bugmaker @ 5.4.2009,  18:14)
Как программно прочитать содержимое exe файла? Допустим виндового calc.exe.
Пробовал fopen\fgets.. не получается.

fopen можно (только не забыть поставить ему бинарную моду чтения 'rb'). fgets - нельзя. Он читает строки, разделенные символом конца строки ('\n'), в бинарнике они могут быть где угодно. Пользуй fread
Цитата

То есть допустим запускаю программу на другом компе а она там создает exe файл с нужным содержимым.
Запросто - вирусы же создают  smile 
Цитата

Можно ли это реализовать, и будет ли вообще такой файл потом корректно запускаться?
И запускают, и создают, и запускают, и созда...  smile 
Повбивав бы  smile 
PM MAIL   Вверх
GoldFinch
Дата 5.4.2009, 20:11 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



xvr, такое поведение еще свойственно инсталляторам
PM MAIL ICQ   Вверх
Bugmaker
Дата 6.4.2009, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 27.6.2008

Репутация: нет
Всего: нет



Не могу нагуглить ниодного простого примера... толи спать уже пора.

Код

#include "windows.h"
#include <iostream>

 
using namespace std;
int main()
{
    FILE *file;
    char *buffer;
    
file = fopen( "calc.exe", "rb" );
if( file != 0 )
{
fread( buffer, 1,20, file); 
cout << buffer << endl;
}
else
{
cout << "File not found !!!" << endl;
}
fclose(file);
system ("PAUSE");
}



Вот такой код выводит кусок файла.
Скажите, что где поменять чтобы прочесть весь файл.

fread( buffer, 1,20, file);  если пытаюсь менять цифры 1 и 20 на другие то программа иногда вообще закрывается сразу после запуска сама.

Вобщем ссылочку бы на подробное описание или пример было бы неплохо.

Спасибо всем, кто откликнулся.
PM MAIL   Вверх
zim22
Дата 6.4.2009, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Bugmaker @  6.4.2009,  00:05 Найти цитируемый пост)
Вобщем ссылочку бы на подробное описание или пример было бы неплохо.

http://www.cplusplus.com/reference/clibrar...tdio/fread.html
http://msdn.microsoft.com/ru-ru/library/kt0etdcs.aspx


--------------------
PM MAIL   Вверх
GoldFinch
Дата 6.4.2009, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



программа ведь под винду пишется? зачем тогда юзать fopen и т.п.
вроде бы надо "программно создать exe файл" зачем тогда его считывать? надо же написать программу которая пишет файл
а та которая считывает  - это совсем другой код

можно конечно написать программу которая при запуске с параметром "имя файла" записывает в себя этот файл, а при запуске без параметра записывает этот файл на диск, но разве это надо?
PM MAIL ICQ   Вверх
xvr
Дата 6.4.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Bugmaker @ 6.4.2009,  00:05)
Не могу нагуглить ниодного простого примера... толи спать уже пора.

Код

#include "windows.h"
#include <iostream>

 
using namespace std;
int main()
{
    FILE *file;
    char *buffer;
    
file = fopen( "calc.exe", "rb" );
if( file != 0 )
{
fread( buffer, 1,20, file); 
cout << buffer << endl;
}
else
{
cout << "File not found !!!" << endl;
}
fclose(file);
system ("PAUSE");
}



Вот такой код выводит кусок файла.
Скажите, что где поменять чтобы прочесть весь файл.

fread( buffer, 1,20, file);  если пытаюсь менять цифры 1 и 20 на другие то программа иногда вообще закрывается сразу после запуска сама.

Вобщем ссылочку бы на подробное описание или пример было бы неплохо.

Спасибо всем, кто откликнулся.

buffer должен быть описан как char buffer[20]; Выводить его в cout через << не получится - это бинарные данные, что там выведется неизвестно

PM MAIL   Вверх
Bugmaker
Дата 6.4.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 27.6.2008

Репутация: нет
Всего: нет



GoldFinch  ты прав, нужно создать exe.  Но если я просто открою calc.exe в блокноте, все скопирую и через fputs помещу в exe файл, он же не будет работать не так ли?

xvr как корректно вывести бинарные данные? 


PM MAIL   Вверх
GoldFinch
Дата 6.4.2009, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Bugmaker, для копирования файла в большинстве случаев подойдет 
copy dropper.exe+calc.exe dropper.exe

затем dropper.exe должен будет записать calc.exe из конца себя на диск
PM MAIL ICQ   Вверх
JAnty
Дата 6.4.2009, 18:50 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 6.12.2004
Где: Москва

Репутация: 1
Всего: 2



Есть такой язык не С++, а С.
 fprintf и fscanf читая и записывая символы как числа или наоборот. 

Не забывайте, что С могучей чем С++!!!


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
GoldFinch
Дата 6.4.2009, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



JAnty, там понял что написал?
PM MAIL ICQ   Вверх
JAnty
Дата 6.4.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 6.12.2004
Где: Москва

Репутация: 1
Всего: 2



GoldFinch да, я это уже делал. Я делал ехе файлы через принтф.


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0972 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.