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

Поиск:

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Код

system("copy calc.exe calc_2.exe");


Это сообщение отредактировал(а) Lazin - 7.4.2009, 12:43
PM MAIL Skype GTalk   Вверх
zim22
Дата 7.4.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(JAnty @  7.4.2009,  12:14 Найти цитируемый пост)
 for(int n=1; n<=176128; n++) //  176128 кол-во символов в файле, или через while(feof)

а какое число вы будете писать, вместо 176128 если размер файла 5 гиг будет? int как-бы не бесконечный

Добавлено через 2 минуты и 50 секунд
Цитата(JAnty @  7.4.2009,  12:32 Найти цитируемый пост)
можно и без unsigned это для корректности.

unsigned как-раз и нужен. вы с байтами работаете. а байт - это число от 0 до 255. если signed char будет - некорректно файл скопируете.

Это сообщение отредактировал(а) zim22 - 7.4.2009, 12:58


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


Опытный
**


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

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



Цитата(zim22 @  7.4.2009,  12:57 Найти цитируемый пост)
некорректно файл скопируете.

Согласен, нон какл копируется и без унсигнед.

А если 5 гиг то пока не достигнем конца файла  feof(f);


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

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


depict1
****


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

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



Цитата(JAnty @  7.4.2009,  13:05 Найти цитируемый пост)
Согласен, нон какл копируется и без унсигнед.

действительно копируется. странно...


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



****


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

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



zim22, а как это интересно signed может на чтото повлиять?

Добавлено через 4 минуты и 8 секунд
Цитата(zim22 @  7.4.2009,  13:57 Найти цитируемый пост)
а какое число вы будете писать, вместо 176128 если размер файла 5 гиг будет?

в вин32 .ехе таких размеров не бывает и быть не может
PM MAIL ICQ   Вверх
zim22
Дата 7.4.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(GoldFinch @  7.4.2009,  13:28 Найти цитируемый пост)
в вин32 .ехе таких размеров не бывает и быть не может

я имел ввиду не обязательно exe. можно и видео-файлы копировать.


Цитата(GoldFinch @  7.4.2009,  13:28 Найти цитируемый пост)
а как это интересно signed может на чтото повлиять?

я думал, что в битовом представлении с1 и c2 различны. ошибался.
Код
int main()
{
  signed char c1 = 200;
  unsigned char c2 = 200;

  std::bitset<8> b1(c1);
  std::bitset<8> b2(c2); // b1 == b2
    
  return 0;
}




Это сообщение отредактировал(а) zim22 - 7.4.2009, 13:45


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



****


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

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



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


depict1
****


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

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



Цитата(GoldFinch @  7.4.2009,  14:51 Найти цитируемый пост)
согласно стандарту их можно копировать один в другой без потери информации

не знал. век живи - век учись у GoldFinch'а smile

Это сообщение отредактировал(а) zim22 - 7.4.2009, 15:10


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


Опытный
**


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

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



Если не unsigned то знак минус тупо меняется на знак "1" в бинарном представлении если присваиваем  отрицательное значение только положительному типу типа int.

P.S.  Ну я и написал...



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

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


depict1
****


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

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



Цитата(JAnty @  7.4.2009,  18:37 Найти цитируемый пост)
Если не unsigned то знак минус тупо меняется на знак "1" в бинарном представлении

ничего не меняется. два разных значения будут иметь один и тот же битовый эквивалент. смотри сам:
Код
#include <iostream>
#include <bitset>

int main()
{
  signed char c1 = -150;
  unsigned char c2 = 106;

  std::bitset<8> b1(c1);
  std::bitset<8> b2(c2); // b1 == b2

  std::cout << b1 << std::endl;
  std::cout << b2 << std::endl;
    
  return 0;
}




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


Эксперт
****


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

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



Цитата(GoldFinch @  7.4.2009,  13:28 Найти цитируемый пост)
в вин32 .ехе таких размеров не бывает и быть не может 

Почему вы так уверены?
PM MAIL ICQ   Вверх
GoldFinch
Дата 8.4.2009, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Anikmar
во первых SizeOfImage <= 0x77000000 (размер образа в памяти)
во вторых значения файловых смещения секций должны влазить в dword

разве что в конце файла будет мусор не принадлежащий ни одной из секций, тогда файл может и загрузится
PM MAIL ICQ   Вверх
Anikmar
Дата 8.4.2009, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(GoldFinch @  8.4.2009,  00:38 Найти цитируемый пост)
во первых SizeOfImage <= 0x77000000 (размер образа в памяти)
во вторых значения файловых смещения секций должны влазить в dword

разве что в конце файла будет мусор не принадлежащий ни одной из секций, тогда файл может и загрузится


Во-первых размер образа памяти никоим образом не колышит файловую систему.
Во-вторых почитайте описание NTFS на досуге, прежде чем кидать голословные утверждения.
В-третьих про какие секции файла вы говорите?

Вы сказали про win32. Windows XP принадлежит к этой категории?

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



****


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

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



Цитата(Anikmar @  8.4.2009,  02:03 Найти цитируемый пост)
про какие секции файла вы говорите

с этого и надо было начинать. какбэ .exe-PE файл состоит из заголовка и секций, вот о них я и говорю

да, XP принадлежит к этой категории

Это сообщение отредактировал(а) GoldFinch - 8.4.2009, 08:12
PM MAIL ICQ   Вверх
Anikmar
Дата 8.4.2009, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(GoldFinch @  8.4.2009,  08:11 Найти цитируемый пост)
с этого и надо было начинать. какбэ .exe-PE файл состоит из заголовка и секций, вот о них я и говорю

Т.е. я не смогу создать SFX-архив больше 4-х гигов или он не является exe-файлом?

Это сообщение отредактировал(а) Anikmar - 8.4.2009, 08:20
PM MAIL ICQ   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1230 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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