CNum::Counter CNum::Counter::log2() const { assert(isNormalized()); if (*this == 0) { throw; } return bitSize() - 1; }
bool CNum::Counter::isSet(const Unit &idx) const { assert(isNormalized()); if (idx >= bitSize()) { return false; } Unit div = idx / CNum::UNIT_BIT_SIZE; Unit rem = idx % CNum::UNIT_BIT_SIZE; const Unit FILTER = 1; return (value[div] & (FILTER << rem)) != 0; }
void updateGPRs(RegisterViewModel& model, const State& state, bool is64Bit) { if(is64Bit) { for(std::size_t i=0;i<GPR64_COUNT;++i) { const auto reg=state.gp_register(i); Q_ASSERT(!!reg); Q_ASSERT(reg.bitSize()==64); QString comment; if(i==0) { const auto origAX=state["orig_rax"].valueAsSignedInteger(); if(origAX!=-1) { comment="orig: "+edb::value64(origAX).toHexString(); const auto errName=syscallErrName(reg.value<edb::value64>()); if(!errName.isEmpty()) comment="-"+errName+"; "+comment; } } if(comment.isEmpty()) comment=gprComment(reg); model.updateGPR(i,reg.value<edb::value64>(),comment); } } else { for(std::size_t i=0;i<GPR32_COUNT;++i) { const auto reg=state.gp_register(i); Q_ASSERT(!!reg); Q_ASSERT(reg.bitSize()==32); QString comment; if(i==0) { const auto origAX=state["orig_eax"].valueAsSignedInteger(); if(origAX!=-1) { comment="orig: "+edb::value32(origAX).toHexString(); const auto errName=syscallErrName(reg.value<edb::value32>()); if(!errName.isEmpty()) comment="-"+errName+"; "+comment; } } if(comment.isEmpty()) comment=gprComment(reg); model.updateGPR(i,reg.value<edb::value32>(),comment); } } }
int main() { union view font = {{1,12,RIGHT,OFF,OFF,OFF}};//初始化联合的第一个成员,结构体 FONT * pf = &font.st_view; char ch; //init /*font.st_view.font_id = 1; font.st_view.font_size = 12; font.st_view.alignment = LEFT; font.st_view.font_bold = OFF; font.st_view.font_italic = OFF; font.st_view.font_underline = OFF;*/ showSetting(pf); while((ch = menu()) != 'q') { puts("Enter your mode:"); puts("f)bit field mode\tb)bit mode"); switch(ch) { case 'f': ch = getchar(); delMore(); switch(ch) { case 'f':fontId(pf);break; case 'b':bitId(&font.ui_view);break; } break; case 's': ch = getchar(); delMore(); switch(ch) { case 'f':fontSize(pf);break; case 'b':bitSize(&font.ui_view);break; } break; case 'a': ch = getchar(); delMore(); switch(ch) { case 'f':fontAlignment(pf);break; case 'b':bitAlign(&font.ui_view);break; } break; case 'b': ch = getchar(); delMore(); switch(ch) { case 'f':fontBold(pf);break; case 'b':bitBold(&font.ui_view);break; } break; case 'i': ch = getchar(); delMore(); switch(ch) { case 'f':fontItalic(pf);break; case 'b':bitItalic(&font.ui_view);break; } break; case 'u': ch = getchar(); delMore(); switch(ch) { case 'f':fontUnderline(pf);break; case 'b':bitUnderline(&font.ui_view);break; } break; default: puts("Error input,Please type in an character such as f s a b i u or q:"); break; } showSetting(pf); } itobs(font.ui_view); return 0; }