rizin/test/unit/legacy_unit/reg/test.c
2022-07-20 22:04:02 +02:00

90 lines
2 KiB
C

#include <rz_reg.h>
void show_regs(struct rz_reg_t *reg, int bitsize) {
RzList *reglist;
RzListIter *iter;
RzRegItem *ri;
printf("%d bit registers:\n", bitsize);
reglist = rz_reg_get_list(reg, bitsize == 1 ? RZ_REG_TYPE_FLG : RZ_REG_TYPE_GPR);
rz_list_foreach (reglist, iter, ri) {
if (ri->size == bitsize)
printf(" - %s : 0x%08" PFMT64x "\n", ri->name, rz_reg_get_value(reg, ri));
}
}
void print_eflags_bits(RzReg *reg) {
int a;
a = rz_reg_getv(reg, "cf");
printf(" c:%d", a);
printf(" 1");
a = rz_reg_getv(reg, "pf");
printf(" p:%d", a);
printf(" 0");
a = rz_reg_getv(reg, "af");
printf(" a:%d", a);
printf(" 0");
a = rz_reg_getv(reg, "zf");
printf(" z:%d", a);
a = rz_reg_getv(reg, "sf");
printf(" s:%d", a);
a = rz_reg_getv(reg, "tf");
printf(" t:%d", a);
a = rz_reg_getv(reg, "if");
printf(" i:%d", a);
a = rz_reg_getv(reg, "df");
printf(" d:%d", a);
a = rz_reg_getv(reg, "of");
printf(" o:%d", a);
printf("\n");
}
int main() {
int i;
int foo[128];
const char *type;
struct rz_reg_t *reg;
for (i = 0; i < 128; i++)
foo[i] = i;
reg = rz_reg_new();
rz_reg_set_profile(reg, "./test.regs");
rz_reg_read_regs(reg, (const ut8 *)foo, sizeof(foo));
{
ut64 a;
RzRegItem *item;
item = rz_reg_get(reg, "eflags", RZ_REG_TYPE_GPR);
rz_reg_set_value(reg, item, 0x00000346); // 0xffffffffffff);
a = rz_reg_get_value(reg, item);
eprintf("A32 = 0x%x\n", (int)a);
if ((int)a != -1) {
eprintf("1 FAIL\n");
}
print_eflags_bits(reg);
item = rz_reg_get(reg, "zf", RZ_REG_TYPE_GPR);
a = rz_reg_get_value(reg, item);
eprintf("A = %d\n", (int)a);
if (a != 1) {
eprintf("2 FAIL\n");
}
item = rz_reg_get(reg, "zf", RZ_REG_TYPE_GPR);
rz_reg_set_value(reg, item, 1);
a = rz_reg_get_value(reg, item);
eprintf("A = %d\n", (int)a);
if (a != 1) {
eprintf("3 FAIL\n");
}
rz_reg_set_value(reg, item, 0);
a = rz_reg_get_value(reg, item);
eprintf("A = %d\n", (int)a);
if (a != 0) {
eprintf("4 FAIL\n");
}
}
show_regs(reg, 1); // 32);
exit(0);
return 0;
}