Основы очень просты.
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 / записи для внесения изменений.
Обратите внимание, что это самые примитивные операции ввода-вывода, вероятно, вы можете использовать их гораздо лучше, в зависимости от вашего языка и т. Д. Но все они основаны на этих примитивах.
Интерпретация байтов файла, их отображение и т. Д. Это упражнение для читателя. Но эти базовые возможности ввода / вывода дают вам основы для изменения файлов.