在内存中搜索字符串

时间:2011-08-31 11:28:07

标签: c char unsigned-char

我正试图从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

3 个答案:

答案 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入口点结构地址的错误方法,