Exemplo n.º 1
0
Arquivo: io.c Projeto: Oblomov/tig
int
io_load_span(struct io *io, const char *separators, size_t *lineno,
	     io_read_fn read_property, void *data)
{
	io->span = TRUE;
	return io_load_file(io, separators, lineno, read_property, data);
}
Exemplo n.º 2
0
int
dl_get_funcs (int *numentries, IXFMODULEENTRY **entries)
{
  unsigned long addr, size;
  char buf[0x100];
  char *line = buf;
  char str[24];
  char *s = str;
  char *p, *funcname;
  int funcaddr;
  int i, n, rc;

  memset(line, 0, 0x100);  
  rc = io_load_file("c:\\dl.map", &addr, &size);
  
  if (rc)
    return rc;
    
  p = (char *)addr;    

  getline(&p, line);

  n = atol(line);
  
  *numentries = n;
  *entries = (IXFMODULEENTRY *)malloc(n * sizeof(IXFMODULEENTRY));
  if (!*entries) return 1;

  for (i = 0; i < n; i++)
  {
    getline(&p, line);
    sscanf(line, "%x %s", &funcaddr, s);
    funcname = (char *)malloc(strlen(s) + 1);
    if (!funcname) return 1;
    strcpy(funcname, s);
    LOG("function %s", funcname);
    LOG("address %x",  funcaddr);
    (*entries)[i].FunctionName = funcname;
    (*entries)[i].Address = funcaddr;
    (*entries)[i].Ordinal  = i + 1;
    (*entries)[i].ModuleName = NULL;
  }
  
  return 0;
Exemplo n.º 3
0
Arquivo: io.c Projeto: Oblomov/tig
int
io_load(struct io *io, const char *separators,
	io_read_fn read_property, void *data)
{
	return io_load_file(io, separators, NULL, read_property, data);
}
Exemplo n.º 4
0
unsigned long OpenModule(char *          pszName,
                         unsigned long   cbName,
                         char const *    pszModname,
			 char            exeflag,
                         unsigned long * phmod)
{
#ifdef L4API_l4v2
  l4_addr_t pageaddr, addr2;
#endif
  #define buf_size 4096
  char buf[buf_size+1];
  char *p_buf = (char *) &buf;
  //char *orig_name = NULL;
  struct module_rec *prev;
  IXFModule *ixfModule, *ixf;
  IXFSYSDEP *ixfSysDep, *sd;
  slist_t *s, *s0, *r;
  l4exec_section_t *section;
  void *addr;
  unsigned long size;
  int  rc, t, n, i;

  // Check input arguments
  if ((phmod==NULL)||
      (pszModname==NULL)||
      (pszName==NULL)) return 87 /*ERROR_INVALID_PARAMETER*/;

  // Initialize return vars
  *pszName=0;
  *phmod=0;

  // @todo extract filename only because can be fullname with path

  char *mname = get_fname(pszModname);

  
  // Specail case - EMXWRAP.DLL. Read more in docs\os2\sub32.txt
  if (!exeflag && !strcasecmp(mname, "EMXWRAP"))
  {
    if (options.debugmodmgr) LOG("ModLoadModule: EXMWRAP module replaced by SUB32 module.");
    //mname="SUB32";
    pszModname="SUB32.DLL";
  }

  if (options.debugmodmgr) LOG("ModLoadModule: Loading module %s...", mname);

  ////
  //if (!exeflag)
    if (!(t = getrec(mname, &prev)))
    {
      if (!exeflag)
      {
        // @todo use handles here
        *phmod=(unsigned long)prev->module_struct;
        LOG("already loaded");
        return 0/*NO_ERROR*/;
      }
    }
    else if (t == -1)
    {
      LOG("mod not loaded!");
      *phmod=NULL;
      if (cbName<=strlen(mname)) return 8 /*ERROR_NOT_ENOUGH_MEMORY*/;
      strcpy(pszName, mname);
      return 5 /*ERROR_ACCESS_DENIED*/; // @todo Need more accurate code
    }

  // Ok. No module found. Try to load file
  LOG("open: %s", pszModname);
  // Consider fully-qualified name specified.
  rc=io_load_file(pszModname, &addr, &size);
  if (rc)
  {
    // Searches for module name and returns the full path in the buffer p_buf.
    LOG("io_load_file1: rc=%u", rc);

    if (!exeflag)
      rc = find_module_path(pszModname, p_buf);
    else
      rc = find_path(pszModname, p_buf);

    LOG("find_module_path: rc=%u, p_buf=%s", rc, p_buf);
    if (!rc) rc=io_load_file(p_buf, &addr, &size);
  }
  else
    LOG("successful");
  
  if (rc)
  {
    LOG("io_load_file2: rc=%u", rc);
    strcpy(pszName, pszModname);
    *phmod=NULL;
    return rc;
  }

  ixfModule = (IXFModule *)malloc(sizeof(IXFModule));
#ifdef L4API_l4v2
  ixfSysDep = (IXFSYSDEP *)malloc(sizeof(IXFSYSDEP));

  if (!t && exeflag)
  {
    // 1st instance IXFModule structure
    ixf = (IXFModule *)(prev->module_struct);
    memmove(ixfModule, ixf, sizeof(IXFModule));

    sd = (IXFSYSDEP *)(ixf->hdlSysDep);
    memmove(ixfSysDep, sd, sizeof(IXFSYSDEP));
    ixfModule->hdlSysDep = (unsigned int)ixfSysDep;

    for (i = 0, r = 0, s0 = sd->seclist; 
         s0; i++, r = s, s0 = s0->next)
    {
      s = (slist_t *)malloc(sizeof(slist_t));
      if (i == 0) // 1st loop iteration
        ixfSysDep->seclist = s;
      else
      {
        r->next = s;
	s->next = 0;
      }
      section = (l4exec_section_t *)malloc(sizeof(l4exec_section_t));
      s->section = section;
      memmove(section, s0->section, sizeof(l4exec_section_t));
      // create Copy-On-Write copy of original dataspace
      rc = l4dm_copy(&s0->section->ds, L4DM_COW, 
                     "os2exec section", &section->ds);
      if (rc)
        LOG("dataspace copy rc=%d", rc);
    }
    // @todo use handles here
    *phmod=(unsigned long)ixfModule;
    ModRegister(mname, ixfModule, exeflag);
    LOG("copy created");
    return 0/*NO_ERROR*/;
  }
  else
  {
    ixfModule->hdlSysDep = (unsigned int)ixfSysDep;
    // initialize section number to zero
    ixfSysDep->secnum = 0;
    ixfSysDep->seclist = 0;
  }
#else
  // other hosts
  // ...
#endif

  rc=IXFIdentifyModule(addr, size, ixfModule);
  if (rc)
  {
    LOG("IXFIdentifyModule: rc=%u", rc);
    strcpy(pszName, pszModname);
    *phmod=NULL;
    free((void *)(ixfModule->hdlSysDep));
    free(ixfModule);
    return rc;
  }

//save addr and size into the structure
  ixfModule->addr = addr;
  ixfModule->size = size;
  ixfModule->name = (char *)malloc(strlen(pszModname) + 1);
  strcpy(ixfModule->name, pszModname);
  ixfModule->exec = exeflag;
  //@todo use handle table
  *phmod=(unsigned long)ixfModule;

  return rc;
}