[질문] 하드 읽기

안녕하세요. 이 질문이 여기에 맞는지 모르겠군요.
하드를 읽을려고 하고 있습니다. 있을 목표는
/bin/bash 파일을 읽을려고 하고 있습니다. 당연히 리눅스 상의 ext2 파일
시스템입니다.
어쨌든 /bin 을 먼저 읽어야 된다는 생각에 bin 의 inode 번호를 알아낸후
inode의 i_data[0] 블럭에 0xc105 이라고 써있기에 49413 블럭을 읽을려고
했습니다.
저의 ext2 파일 시스템은 /dev/hda2 를 루트 파티션(block size 1024)으로 하
고 있습니다.
/dev/hda2 의 블럭은 104834 블럭부터 시작을 합니다.
그럼 읽을려고 하는 블럭의 LBA -> CHS 로 바꿔어야 하니까
real block = 104834 + 49413
sec = real block % sector per track + 1
track = real block / sector per track
head = real block % track
cyl = real block / track
이므로 저의 CHS = { 4161, 16, 63 } 이기 때문에 각각
sec = 43, track = 3232, head = 0, cyl = 202 가 나왔습니다.
근데 49413 블럭 디렉토리를 읽어서 ext2 directory descriptor 를 읽어와야
하는데 막상 읽어오면 "." 과 ".."은 이름은 맞게 들어가 있으나
"." 과 ".."의 inode 섹션 부분은 /dev 를 부모로 갖고 있고, 알수 없는 inode
넘버로 이루어져 있습니다. 그리고 name descriptor length의 길이 또한 "."은
12 크기로 되어 있으나 나머지는 이상한 쓰레기 값으로 이루어져 있습니다.
근데 더 이상한 것은 /dev/ 은 거의 완벽에 가깝게 읽어지는 반면, /bin 혹은
다른 디렉토리는 이상하게 읽어져 error를 발생시키고 있습니다.
참고로 /dev와 /bin/ 의 아이노드 번호를 말씀드리면
/dev = 8161
/bin = 44881
로 되어 있습니다. block을 잃어올 때 이렇게 말썽을 부리니 작업에 진척이
별로 없습니다. int 0x13 이나 int 0x25(?) 를 써서 BIOS 에 의존적인 면도
없는데(IO 포트 0x1f0를 사용합니다) 이상하게 /dev 를 뺀 다른
디렉토리(대부분 inode 번호가 큽니다)에서 이런 현상을 발생시키니
참 답답합니다. 현재 추정하기로는 읽어오는 부분에서 문제가 있지 않을까
생각합니다만 확실치 않습니다.
그리고 제 하드의 구성은 아래와 같습니다.
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda2 347515 73676 255897 23% /
/dev/hda1 50723 6573 41531 14% /boot
/dev/hda3 296755 66639 214795 24% /home
none 22996 0 22996 0% /dev/shm
/dev/hda6 1257984 225104 968976 19% /usr
왜 이런 에러를 발생시키는지 알고 있으신 분은 꼭 답변 부탁드립니다.
댓글 달기