static void *mt_mem_malloc(u32 size) { void *p_addr = NULL; mem_mgr_alloc_param_t param = {0}; param.id = MEM_SYS_PARTITION; param.size = size; param.user_id = SYS_MODULE_SYSTEM; p_addr = mem_mgr_alloc(¶m); MT_ASSERT(p_addr != NULL); return p_addr; }
int* toy_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax) { int ds_base = *((int*)0x0fe8); task_t* task = task_now(); console_t* console = (console_t*)(*((int*)0x0fec)); layer_mgr_t* layermgr = (layer_mgr_t*)(*((int*)0x0fe4)); layer_t* layer; int* reg = &eax + 1; /* address after eax */ /* * force to modify value of pushad * reg[0] : edi, reg[1] : esi, reg[2] : ebp, reg[3] : esp * reg[4] : ebx, reg[5] : edx, reg[6] : ecx, reg[7] : eax */ switch (edx) { case 1: console_putchar(console, eax & 0xff, 1); break; case 2: console_putstr0(console, (char*)ebx + ds_base); break; case 3: console_putstr1(console, (char*)ebx + ds_base, ecx); break; case 4: return &(task->tss.esp0); case 5: { layer = layer_alloc(layermgr); layer_setbuf(layer, (char*)ebx + ds_base, esi, edi, eax); make_window8((char*)ebx + ds_base, esi, edi, (char*)ecx + ds_base, 0); layer_slide(layer, 100, 50); layer_updown(layer, 3); reg[7] = (int)layer; } break; case 6: { layer = (layer_t*)ebx; draw_font8_asc(layer->buf, layer->w_size, esi, edi, eax, (char*)ebp + ds_base); layers_refresh(layer, esi, edi, esi + ecx * 8, edi + 16); } break; case 7: { layer = (layer_t*)ebx; fill_box8(layer->buf, layer->w_size, ebp, eax, ecx, esi, edi); layers_refresh(layer, eax, ecx, esi + 1, edi + 1); } break; case 8: { mem_mgr_init((mem_mgr_t*)(ebx + ds_base)); ecx &= 0xfffffff0; /* unit: 16bytes */ mem_mgr_free((mem_mgr_t*)(ebx + ds_base), eax, ecx); } break; case 9: { ecx = (ecx + 0x0f) & 0xfffffff0; reg[7] = mem_mgr_alloc((mem_mgr_t*)(ebx + ds_base), ecx); } break; case 10: { ecx = (ecx + 0x0f) & 0xfffffff0; mem_mgr_free((mem_mgr_t*)(ebx + ds_base), eax, ecx); } break; } return 0; }