2011-08-31 58 views
1

我試圖讓這個代碼工作的字符串,從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; 
} 

有一些類型的錯誤,像着初始化字符*無符號的char *。

當我嘗試用char *替換unsigned char * int第一行我不能使用[]符號,我怎樣才能用這個代碼使用memcmp

+4

你得到什麼錯誤信息,並在哪些行? –

+0

爲什麼你不能在'unsigned char *'中使用[]符號? – duedl0r

+0

在該行上給出exc_bad_access – yolo

回答

0

的代碼無法工作,因爲它是電噴找到SMBIOS切入點結構地址不正確的方法機器,

2

在第一行,你投給unsigned char*,但儘量分配給char*。爲什麼不直接投到char*

我假設您正在使用的一些嵌入式系統的代碼,因爲與多任務操作系統,只需訪問硬編碼的內存位置會導致程序崩潰。

+0

是什麼?爲什麼會崩潰? – duedl0r

+0

它會崩潰,因爲在大多數系統中,您不允許讀取不屬於當前進程的內存 –

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); 

編輯:OPS ......誤讀這個:)你要比較:)

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; 
     ... 
    } 
}