2012-02-19 2 views
-3

그래서 나는 사용자가 지정한 드라이브에 파일을 삭제하고 추가 할 수있는 작은 부팅 가능한 어셈블리 프로그램을 만들려고 노력하고 있습니다. 유일한 문제는 어셈블리로 드라이브에 액세스하는 방법을 모르는 것입니다. 누군가 내가이 정보를 어디서 찾을 수 있는지 지시 할 수 있겠습니까? 이 정보는 C 프로그래밍 언어를위한 것일 수도 있습니다.어셈블리 코드로 하드 ​​드라이브 파일에 액세스 하시겠습니까?

일부 부팅 가능한 어셈블리 코드 유형에서 기본 창 7 hardrive에 액세스하려고합니다. 어떤 NTFS입니다.

+0

어떤 파일 시스템입니까? 각 파일 시스템에는 파일 정보를 저장하는 다른 방법이 있습니다. –

+0

파일 시스템과 함께, 우리는 꽤 많이 쓰고있는 OS를 알아야합니다. –

+0

Windows 7과 기본 파일 시스템이 ext3라고 생각합니다. –

답변

8

x86 PC에서 부팅 가능한 코드로 디스크에 액세스하려면 가장 쉽고 가장 자연스러운 방법은 BIOS int 13h functions을 사용하는 것입니다. 그러면 개별 디스크 섹터를 읽고 쓸 수 있습니다.

하드 드라이브는 일반적으로 파티션으로 분할되며 각 파티션의 위치, 크기 및 유형을 나타내는 Master Boot Record (MBR)도 있습니다. MBR은 HDD의 첫 번째 섹터입니다.

각 파티션에는 파일 시스템이 있습니다. NTFS에서 파일을 읽고 쓸 수 있으려면 NTFS 드라이버를 구현해야합니다.

AFAIK, NTFS은 열려 있지 않지만 리버스 엔지니어링 기반의 NTFS 드라이버가 있습니다 (예 : Linux). NTFS 드라이버는 어셈블리가 아닌 C (++)로 작성되며, NTFS는 크고 복잡하며 C는 어셈블리보다 개발, 유지 관리 및 이식성면에서 더 실용적입니다. 어셈블리에 FS 코드를 쓰는 것을 권장하지 않습니다.

P. EFI 시스템의 상황이 다소 다릅니다. MBR 대신 GPT이 있고 EFI 기능을 사용하여 BIOS int 13h 대신 디스크에 액세스합니다.

P.P.S. 나는 C와 약간의 어셈블리에서 원하는 것을했지만 NTFS 대신 FAT1x/32를 사용했다. 그게 가능합니다. NTFS는 더 어렵습니다. 특히 충분한 지식과 기술이없는 한 사람에게는 불가능할 수 있습니다.

+0

좋은 대답! 또한 일부 상황 (예 : CD 또는 USB 플래시에 저장된 파일에 액세스하려는 "PC BIOS"를 사용하여 하드 디스크에서 부팅)은 자신의 저수준 드라이버를 구현해야 할 수도 있습니다. – Brendan

+0

@Brendan : 가능할 수도 있지만, CD/USB로 부팅하면 같은 BIOS 기능을 사용하여 액세스 할 수 있습니다. BIOS는 FDD/HDD처럼 보이게합니다. –

관련 문제