Esempio n. 1
0
CNum::Counter CNum::Counter::log2() const {
    assert(isNormalized());
    if (*this == 0) {
        throw;
    }
    return bitSize() - 1;
}
Esempio n. 2
0
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;
}
Esempio n. 3
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);
		}
	}
}
Esempio n. 4
0
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;
}