그냥 C에서 MBR을 분석하는 프로그램을 작성하고 싶습니다.C에서 MBR (마스터 부트 레코드)을 "읽는"방법은 무엇입니까?
Windows API 또는 Linux 명령을 통해 읽을 수있는 몇 가지 방법을 알고 있습니다.
그러나 플랫폼에 따른 제한없이 에서 수행 할 수 있습니까??
내가 할 수 없다면 어떤 이유가 있습니까?
그냥 C에서 MBR을 분석하는 프로그램을 작성하고 싶습니다.C에서 MBR (마스터 부트 레코드)을 "읽는"방법은 무엇입니까?
Windows API 또는 Linux 명령을 통해 읽을 수있는 몇 가지 방법을 알고 있습니다.
그러나 플랫폼에 따른 제한없이 에서 수행 할 수 있습니까??
내가 할 수 없다면 어떤 이유가 있습니까?
플랫폼에 따라 다릅니다 예를 들어 다음 코드 (당신은 권한이있는 경우 그것을 할)
#include <windows.h>
#include <stdio.h>
#include <iostream>
using namespace std;
short ReadSect
(const char *_dsk, // disk to access
char *&_buff, // buffer where sector will be stored
unsigned int _nsect // sector number, starting with 0
)
{
DWORD dwRead;
HANDLE hDisk=CreateFile(_dsk,GENERIC_READ,FILE_SHARE_VALID_FLAGS,0,OPEN_EXISTING,0,0);
if(hDisk==INVALID_HANDLE_VALUE) // this may happen if another program is already reading from disk
{
CloseHandle(hDisk);
return 1;
}
SetFilePointer(hDisk,_nsect*512,0,FILE_BEGIN); // which sector to read
ReadFile(hDisk,_buff,512,&dwRead,0); // read sector
CloseHandle(hDisk);
return 0;
}
int main()
{
char * drv="\\\\.\\C:";
char *dsk="\\\\.\\PhysicalDrive0";
int sector=0;
char *buff=new char[512];
ReadSect(dsk,buff,sector);
if((unsigned char)buff[510]==0x55 && (unsigned char)buff[511]==0xaa) cout <<"Disk is bootable!"<<endl;
getchar();
}
http://www.cplusplus.com/forum/windows/18019/
리눅스에 당신도 사용할 수있는 윈도우에서 작동 터미널 명령
sudo dd if=/dev/sda ibs=512 count=1 | hexdump -C
최상의 해결 방법은 코드 #ifdef
이며 플랫폼에 따라 달라집니다.
아니요, MBR을 읽는 것은 플랫폼 의존적입니다. 하드 디스크가 두 개 이상인 경우 "MBR"이 무엇인지 묻습니다. 코드에서 플랫폼 종속적 인 것을 숨기는 라이브러리가 가장 좋을 수도 있지만, 아마도 직접 작성해야 할 것입니다. 마스터 부트 레코드를 읽기
이일반적으로 전체 디스크 내용에 대한 파일 핸들을 얻으려면 플랫폼 별 단계를 수행해야하며, 해당 파일을 사용하여 MBR을 조작하는 것은 상대적으로 플랫폼에 구애받지 않습니다.
Guntram에서 언급 한 것처럼 원하는 하드 드라이브를 식별 할 필요가있을뿐만 아니라 많은 플랫폼에서 디스크에 대한 쓰기 액세스 권한을 얻기 전에 해당 드라이브에서 모든 파일 시스템을 마운트 해제해야합니다. 이것은 심지어 당신의 목표를 배제 할 수도 있습니다.
나는 이유가 무엇입니까?
POSIX가 장착 또는 블록 장치 (리눅스 특정)의 개념이 혼자하지 않습니다 ANSI C.