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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заменить байт в файле 
:(
    Опции темы
slavaentp
Дата 2.6.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как заменить байт в файле.

Нужно заменить байт в определённом файле по определённому адресу. Ну, скажем, заменить "01" на "02" в файле "D:\a.exe", по адресу 123ABCD, все значения - в 16-ричной системе счисления.

Как это делается? В Интернете искал, находил только какие-то части, не знаю как это всё воедино свести.

Это сообщение отредактировал(а) slavaentp - 2.6.2009, 22:46
PM MAIL   Вверх
Alca
Дата 2.6.2009, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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





--------------------
PM WWW ICQ Skype Jabber   Вверх
slavaentp
Дата 2.6.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Alca

Во второй ссылке нет указателя на адрес в файле, функцией из первой ссылки не понял как пользоваться.
PM MAIL   Вверх
GoldFinch
Дата 2.6.2009, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



slavaentp, судя по уровню вопроса, тебе еще рано этим заниматься)

но вообще, это делаться через CreateFile+SetFilePointer+WriteFile
PM MAIL ICQ   Вверх
Alca
Дата 2.6.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Функция WriteFile похожа на fwrite.

Добавлено @ 23:21
Код

/* fseek example */
#include <stdio.h>

int main ()
{
  FILE * pFile;
  pFile = fopen ( "example.txt" , "w" );
  fputs ( "This is an apple." , pFile );
  fseek ( pFile , 9 , SEEK_SET );
  fputs ( " sam" , pFile );
  fclose ( pFile );
  return 0;
}

Цитата

After this code is successfully executed, the file example.txt contains:
This is a sample.


Добавлено @ 23:22
http://www.cplusplus.com/reference/clibrary/cstdio/fseek/

Добавлено через 6 минут и 26 секунд
fseek == SetFilePointer
fputs  == WriteFile

Это сообщение отредактировал(а) Alca - 2.6.2009, 23:24


--------------------
PM WWW ICQ Skype Jabber   Вверх
slavaentp
Дата 2.6.2009, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Alca

Код
int main()
{
    FILE *pfile;
    char buffer[] = {45};
    pfile = fopen("D:\file.exe", "wb");
    fwrite(buffer[111111],1,sizeof(buffer),pfile);
    fclose(pfile);

    return 0;
}

fwrite(buffer[111111],1,sizeof(buffer),pfile); - пишет на эту строчку ошибку "d:\a\main.cpp|10|error: invalid conversion from `char' to `const void*'|"
PM MAIL   Вверх
Alca
Дата 2.6.2009, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

...
pFile = fopen("D:\\file.exe", "wb");
...
fseek ( pFile , /*с какой позиции начинаем писать*/9 , SEEK_SET );
write(&buffer[0], 1, sizeof(buffer), pFile);
...


Это сообщение отредактировал(а) Alca - 2.6.2009, 23:52


--------------------
PM WWW ICQ Skype Jabber   Вверх
andrew_121
Дата 3.6.2009, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Во первых. buffer - содержит один элемент. Значит диапазон адресов 0-0.
А в строке fwrite(buffer[111111],1,sizeof(buffer),pfile); ты обращаешься к элементу 111111, а такого не существует.


А сообщает тебе компилятор о том, что ты в функцию fwrite передаешь тип char, а должен const void*.

Вобще, трудно понять что этот код должен делать.


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


Шустрый
*


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

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



Alca

Спасибо! Пример, который ты скопировал - сработал. Только там в fopen нужно "r+", а не "w", иначе файл стирается после вставки байтов.

Это сообщение отредактировал(а) slavaentp - 3.6.2009, 00:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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