Как я могу сделать фиксированный шестнадцатеричный редактор? - PullRequest
1 голос
/ 01 апреля 2010

Итак. Допустим, я должен был сделать шестнадцатеричный редактор для редактирования ... о ... скажем, файл .DLL. Как я могу редактировать шестнадцатеричный файл .DLL, используя C # или C ++? А что касается «фиксированной части», я хочу сделать так, чтобы я мог просматривать из программы определенный файл .DLL, иметь некоторые предварительно закодированные кнопки в запрограммированном файле, и при нажатии кнопки он автоматически выполнит запрашиваемое действие, означающее, что кнопка была предварительно закодирована, чтобы знать, что искать в .DLL и на что ее нужно изменить. Может ли кто-нибудь помочь мне начать это?

Также предпочтительно C #. Спасибо!

Ответы [ 2 ]

2 голосов
/ 01 апреля 2010

Основы очень просты.

DLL или любой файл представляет собой поток байтов.

Основные операции с файлами позволяют читать и записывать произвольные части файла. Термин «искусство» в основном означает «Операции с файлами произвольного доступа».

В C основными операциями являются read (), write () и lseek ().

read позволяет вам читать поток байтов в буфер, write позволяет записывать буферы байтов в файл, lseek позволяет вам позиционировать в любом месте файла.

Пример:

int fd = open("test.dat", O_RDWR);
off_t offset = lseek(fd, 200, SEEK_SET);
if (off_t == -1) {
    printf("Boom!\n");
    exit(1);
}    
char buf[1024];
ssize_t bytes_read = read(fd, buf, 1024);
offset = lseek(fd, 100, SEEK_SET);
ssize_t bytes_written = write(fd, buf, 1024);
flush(fd);
close(fd);

Это читает 1024 байта из файла, начиная с 200-го байта файла, а затем записывает его обратно в файл со скоростью 100 байтов.

Как только вы можете изменить случайные байты в файле, нужно выбрать, какие байты изменить, как их изменить, и выполнить соответствующие операции чтения / lseeks / записи для внесения изменений.

Обратите внимание, что это самые примитивные операции ввода-вывода, вероятно, вы можете использовать их гораздо лучше, в зависимости от вашего языка и т. Д. Но все они основаны на этих примитивах.

Интерпретация байтов файла, их отображение и т. Д. Это упражнение для читателя. Но эти базовые возможности ввода / вывода дают вам основы для изменения файлов.

0 голосов
/ 01 апреля 2010

Если идея состоит в том, чтобы загрузить поле редактирования в шестнадцатеричном формате, вы можете использовать следующее: Be.HexEditor Редактирование "шестнадцатеричного" файла - не более чем изменение байтов в нем. Часть наличия заранее запрограммированных изменений будет более общего типа. Но для реального просмотра, поиска и последующего изменения того, что вы хотите, Be.HexEditor - хороший вариант. Я использовал его более года назад, я надеюсь, что у него появятся некоторые новые функции, которые сделают вашу жизнь проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...