Exemplo n.º 1
0
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(&param);
  MT_ASSERT(p_addr != NULL);
  return p_addr;
}
Exemplo n.º 2
0
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;
}