我正试图从here
获取此代码 char *mem = (unsigned char *) 0xF0000;
int length, i;
unsigned char checksum;
while ((unsigned int) mem < 0x100000) {
if (mem[0] == '_' && mem[1] == 'S' && mem[2] == 'M' && mem[3] == '_') {
length = mem[5];
checksum = 0;
for(i = 0; i < length; i++) {
checksum += mem[i];
}
if(checksum == 0) break;
}
mem += 16;
}
存在一些类型错误,例如cant init char * with unsigned char *。
当我尝试用char *
第一行替换unsigned char *
时,我无法使用[]表示法,如何在此代码中使用memcmp
?
答案 0 :(得分:2)
在第一行中,您转为unsigned char*
,但尝试分配到char*
。为什么不直接投射到char*
?
我假设你正在研究一些嵌入式系统代码,因为对于多任务操作系统,只需访问硬编码的内存位置就会导致程序崩溃。
答案 1 :(得分:0)
您想要复制哪一部分?
int start = ?; //wherever you want to start... (0,1,2,...,maxlength)
int len = ?; //however long you need it to be ((maxlength-start) > len > 0)
char *mymem = malloc(len);
memcpy(mymem, mem+start, len);
编辑:操作...误读了这个:)你要比较:))
for(...){
char* search = "_SM_";
char* mymem = (char*)(mem + (i*16));
if (strncmp(search,mymem,4) == 0){
length = (int)mymem + 4; // 0(_),1(S),2(M),3(_),4
checksum = 0;
...
}
}
答案 2 :(得分:0)
代码无法正常工作,因为它是在EFI机器上查找smbios入口点结构地址的错误方法,