SSDT, IDT 후킹과 ntoskrl.exe를 이용한 복구에 대한 고찰
내용을 보시려면 비밀번호를 입력하세요.
주기억장치에서 어떤 작업을 실행하고 있는 동안 그 작업보다 순위가 높은 작업수행이 필요하여
끼어들기 형태로 일을 해야 할 때 이미 실행 중인 프로그램과 데이터를
일시적으로 보조기억장치에 옮기고(swap out), 끼어들기가 끝난 후에 보조기억장치에서
주기억장치로 다시 중단된 작업을 탑재한다(swap in).
이처럼 주기억장치에서 보조기억장치로 프로그램이나 데이터 등을 교환하는 것을 교환이라 한다.
우선 순위를 지닌 작업의 처리를 위한 충분한
기억 장소가 없는 경우에는,
하나 이상의 작업이 주기억장치에서 제거되고 보조기억장치로 교환되어야 한다.
3장 실습 소스 < FAT_exam1.c > |
#include <stdio.h>
#define U8 unsigned char
#pragma pack(1) U8 BootCodeArea[448];
#pragma pack()
typedef struct _VOL_struct{
VolStruct gVol;
int main(void) char buf[512]; gVol.Drive = 0x4; // HDD_write( gVol.Drive, gVol.VolBeginSec, 1, (unsigned char *)buf);
if( HDD_read(gVol.Drive, gVol.VolBeginSec, 1 ,(unsigned char *)buf ) == 0 ) if( get_BPB_info((FAT16_BPB*)buf, &gVol) == 0 )
printf(" ------------- volume infomation -------------- \n\n"); printf(" Total Sector = %d sectors \n", gVol.TotalSec);
U32 get_BPB_info(FAT16_BPB* BPB, VolStruct* pVol) //Get Total Sector //Get FAT Size //Get FAT Start Sector //Get Root Dir Entry Count //Get Root Dir Sector //Get Root Dir Sector Count //Get Data Start Sector //Get Size of Data Area //Get Total Cluster Count //Get Size of Cluster //Get Sector Per Cluster return 1;
U32 HDD_read(U8 drv, U32 SecAddr, U32 blocks, U8* buf) char cur_drv[100]; sprintf(cur_drv, "\\\\.\\PhysicalDrive%d",(U32)drv); if(g_hDevice == INVALID_HANDLE_VALUE) return 0; ldistanceLow = SecAddr << 9; if(dwpointer != 0xFFFFFFFF) CloseHandle(g_hDevice); |
< FAT_exam2.c > |
#include <stdio.h> #define U8 unsigned char U8 BootCodeArea[448]; typedef struct _VOL_struct{ typedef struct _DIR_struct{
U32 HDD_read(U8 drv, U32 SecAddr, U32 blocks, U8* buf) char cur_drv[100]; sprintf(cur_drv, "\\\\.\\PhysicalDrive%d",(U32)drv); if(g_hDevice == INVALID_HANDLE_VALUE) return 0; ldistanceLow = SecAddr << 9; if(dwpointer != 0xFFFFFFFF) CloseHandle(g_hDevice);
//Get Total Sector //Get FAT Size //Get FAT Start Sector //Get Root Dir Entry Count //Get Root Dir Sector //Get Root Dir Sector Count //Get Data Start Sector //Get Size of Data Area //Get Total Cluster Count //Get Size of Cluster //Get Sector Per Cluster return 1; |
3장 FAT파일 시스템
스터디 책 : 임베디드 개발자를 위한 파일시스템의 원리와 실습
실습 USB : LG-XTICK 256
실습시 주의사항 : USB자체에 이미 파티션을 분활해 놓은 상태여서 바로 0번째 섹터를 읽어 오면 아래와 같은 결과가 나왔다.
0012FF38 의 80 01 01 00 0B 0F E0 DA의 BootFlag 에서 Ending CHS Addr까지 8Byte뒤에 4Byte는 Starting LBA Addr로써 리틀엔디안에 의해
20 00 00 00 은 20으로 보면 된다. 즉 20번째 섹터에 실제 우리가 찾고자 하는 Boot Record정보가 들어 있다는 의미이다.
chkdsk k: 로 실제 크기와 비교
내부 bit값별 설명은 다음 시간에...