我想用C语言编写一个分析MBR的程序。
我知道通过Windows API或Linux命令可以读取MBR。
但是,是否可以没有任何平台依赖限制地在C中实现呢?
如果不能,是否有任何原因?
读取主引导记录是与平台相关的,例如以下代码适用于Windows(如果您有足够的权限)
#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
处理,并使其与平台相关。