/*======================================================================* loadELFFile *======================================================================*/ void loadELF(){ /* 0x1000存放加载的文件数 * 0x1004开始存放文件名,单个字节的 * 0x50000开始,每0x2000个字节放一个bin文件,bin文件的入口为0x400000(4M) */ int i,startAddr; char filename[12]="a.bin"; u8 data[8192]; FILEINFO file; int totalFileAddr=0x1000; u8 totalFile=read_mem_byte(totalFileAddr); for (i=0,startAddr=0x50000; i<totalFile;i++,startAddr+=0x2000){ memset((void *)0x400000+0x2000*i,0,sizeof(data)); memset(data,0,sizeof(data)); readelf(startAddr); memcpy(data,(void *)0x400000+0x2000*i,sizeof(data)); memcpy(file.name,filename,sizeof(filename)); u8 c=read_mem_byte(0x1004+i); if ('A'<=c && c<='Z') c=c-'A'+'a'; file.name[0]=c; file.size=sizeof(data); file.start_pos=new_space(FILESTOREADDR,file.size); write_fileinfo(file); write_data(file.start_pos,data,sizeof(data)); ++filename[0]; } }
int dump_mem(char *start, char *len){ if (!is_hex(start) || !is_number(len)) return -1; int st=hextoi(start),ed=st+atoi(len),i,total; char output[2]; total=0; memset(output,0,sizeof(output)); for (i=st; i<ed; i++){ u8 temp=read_mem_byte(i); display_byte_hex(temp); ++total; if (total%8==0 && total%16!=0) display_string("-"); else display_string(" "); if ((total)%16==0) display_string("\n"); } if (total%16!=0) display_string("\n"); return 0; }
QString SpimView::formatAsChars(mem_addr from, mem_addr to) { QString windowContents = nnbsp(2); if (to - from != BYTES_PER_LINE) { int missing = (BYTES_PER_LINE - (to - from)) / BYTES_PER_WORD; windowContents += nnbsp(2); switch (st_dataSegmentDisplayBase) { case 10: windowContents += nnbsp(missing * (WORD_WIDTH_10 + 2)); break; case 16: windowContents += nnbsp(missing * (WORD_WIDTH_16 + 2)); break; default: windowContents += nnbsp(missing * (WORD_WIDTH_DEFAULT + 2)); break; } } for (mem_addr a = from; a < to; a += 1) { mem_word val = read_mem_byte(a); windowContents += formatChar(val) % " "; } return windowContents; }