diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..4c4a626 Binary files /dev/null and b/.DS_Store differ diff --git a/CMakeLists.txt b/CMakeLists.txt index 36b3d39..f0c5624 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,4 +17,4 @@ add_executable(fischl ) enable_testing() -add_subdirectory(test) +add_subdirectory(test) \ No newline at end of file diff --git a/include/rawdisk.h b/include/rawdisk.h new file mode 100644 index 0000000..62074df --- /dev/null +++ b/include/rawdisk.h @@ -0,0 +1,112 @@ +#include +#include +#include +#include +#include +#include +#include + +class RawDisk{ + + char* dir; + off_t numSectors; + off_t diskSize; + +public: + RawDisk(char *directory){ + dir = directory; + /*dir = strdup("/dev/vdc"); + numSectors = 62914560; + diskSize = 32212254720;*/ + + int fd; + + // Open the block device (replace /dev/sdX with the actual device) + fd = open(dir, O_RDONLY); + if (fd == -1) { + perror("Error opening device"); + exit(1); + } + + // Use ioctl with BLKGETSIZE to get the number of sectors + if (ioctl(fd, BLKGETSIZE64, &diskSize) == -1) { + perror("Error getting disk size"); + close(fd); + exit(1); + } + + // Calculate the size in bytes + numSectors = diskSize / 512; // Assuming a sector size of 512 bytes + + printf("====Initializing RawDisk====\n"); + printf("Number of sectors: %llu\n", numSectors); + printf("Disk size (in bytes): %llu\n", diskSize); + + close(fd); + } + + int rawdisk_read(off_t blockNumber, char *buffer){ + int fd; + + fd = open(dir, O_RDONLY); + if (fd == -1) { + perror("Error opening device"); + return -1; + } + + // Calculate the offset in bytes + off_t offset = blockNumber * 512; + + // Move the file pointer to the desired block + if (lseek(fd, offset, SEEK_SET) == -1) { + perror("Error seeking to block"); + close(fd); + return -1; + } + + // Read a block of data + ssize_t bytesRead = read(fd, buffer, 512); + if (bytesRead == -1) { + perror("Error reading from device"); + close(fd); + return -1; + } + + // Process the data (e.g., data recovery or analysis) + close(fd); + + } + + int rawdisk_write(off_t blockNumber, char *buffer){ + int fd; + + fd = open(dir, O_WRONLY); + if (fd == -1) { + perror("Error opening device"); + return -1; + } + + // Calculate the offset in bytes + off_t offset = blockNumber * 512; + + // Move the file pointer to the desired block + if (lseek(fd, offset, SEEK_SET) == -1) { + perror("Error seeking to block"); + close(fd); + return -1; + } + + // Write a block of data + ssize_t bytesWrite = write(fd, buffer, 512); + if (bytesWrite == -1) { + perror("Error writing from device"); + close(fd); + return -1; + } + + // Process the data (e.g., data recovery or analysis) + close(fd); + return 0; + } + +}; \ No newline at end of file diff --git a/lib/main.cpp b/lib/main.cpp index ec68051..396b885 100644 --- a/lib/main.cpp +++ b/lib/main.cpp @@ -1,7 +1,10 @@ #include "fischl.h" +#include "rawdisk.h" int main(){ fischl *F = new fischl; F->init(); + char *d = strdup("/dev/vdc"); + RawDisk *H = new RawDisk(d); return 0; } \ No newline at end of file