Example #1
0
int load_elf(const char *elf_file)
{
	/* Place elf file in memory */
	elf_info.loc = read_elf(elf_file);
	if(!elf_info.loc){
		return ELF_READ_ERR;
		}

	printf("Base Address: %#02X\n",elf_info.loc);
	return 0;
}
Example #2
0
void
breakpoints_init(Process *proc) {
	struct library_symbol *sym;

	debug(DEBUG_FUNCTION, "breakpoints_init(pid=%d)", proc->pid);
	if (proc->breakpoints) {	/* let's remove that struct */
		dict_apply_to_all(proc->breakpoints, free_bp_cb, NULL);
		dict_clear(proc->breakpoints);
		proc->breakpoints = NULL;
	}
	proc->breakpoints = dict_init(dict_key2hash_int, dict_key_cmp_int);

	if (options.libcalls && proc->filename) {
		/* FIXME: memory leak when called by exec(): */
		proc->list_of_symbols = read_elf(proc);
		if (opt_e) {
			struct library_symbol **tmp1 = &(proc->list_of_symbols);
			while (*tmp1) {
				struct opt_e_t *tmp2 = opt_e;
				int keep = !opt_e_enable;

				while (tmp2) {
					if (!strcmp((*tmp1)->name, tmp2->name)) {
						keep = opt_e_enable;
					}
					tmp2 = tmp2->next;
				}
				if (!keep) {
					*tmp1 = (*tmp1)->next;
				} else {
					tmp1 = &((*tmp1)->next);
				}
			}
		}
	} else {
		proc->list_of_symbols = NULL;
	}
	for (sym = proc->list_of_symbols; sym; sym = sym->next) {
		/* proc->pid==0 delays enabling. */
		insert_breakpoint(proc, sym2addr(proc, sym), sym);
	}
	proc->callstack_depth = 0;
	proc->breakpoints_enabled = -1;
}
Example #3
0
int main(int argc, char *argv[])
{
struct _memory memory;
char *filename=NULL;
char *uart="/dev/ttyUSB0";
int prog_type=PROG_UNDEF;
int command=COMMAND_UNDEF;
int param1=0,param2=0;
int i;

  printf("\nnaken_prog - by Michael Kohn\n");
  printf("    Web: http://www.mikekohn.net/\n");
  printf("  Email: [email protected]\n\n");
  printf("Version: "VERSION"\n\n");

  if (argc<2)
  {
    printf("Usage: naken_util [options]\n");
    printf("  CPU options:\n");
    printf("   -lpc\n");
    printf("  Command:\n");
    printf("   -info\n");
    printf("   -write <outfile>\n");
    printf("   -read <address> <count> <infile>\n");
    printf("   -execute <address>\n");
    printf("\n");
    exit(0);
  }

  memset(&memory, 0, sizeof(memory));

  for (i=1; i<argc; i++)
  {
    if (strcmp(argv[i], "-lpc")==0)
    {
      prog_type=PROG_LPC;
    }
      else
    if (strcmp(argv[i], "-info")==0)
    {
      command=COMMAND_INFO;
    }
      else
    if (strcmp(argv[i], "-read")==0)
    {
      command=COMMAND_READ;
      if (i+2>=argc)
      {
        printf("Error: -read command takes 2 arguments\n");
        exit(1);
      }
      param1=atoi(argv[++i]);
      param2=atoi(argv[++i]);
    }
      else
    if (strcmp(argv[i], "-write")==0)
    {
      command=COMMAND_WRITE;
    }
      else
    if (strcmp(argv[i], "-run")==0)
    {
      command=COMMAND_RUN;
      param1=atoi(argv[++i]);
    }
      else
    {
      filename=argv[i];
    }
  }

  if (prog_type==PROG_UNDEF)
  {
    printf("Error: No chip type selected.\n");
    exit(0);
  }

  if (command==COMMAND_INFO)
  {
    if (prog_type==PROG_LPC)
    {
      lpc_info(uart);
    }
  }
    else
  if (command==COMMAND_READ)
  {
    if (filename==NULL)
    {
      printf("No output filename.  Exiting...\n");
      exit(1);
    }

    memory_init(&memory, 0xffffffff, 1);
    lpc_memory_read(uart, &memory, param1, param2);
    // FIXME - make filename selectable
    FILE *out=fopen(filename, "wb");
    write_hex(&memory, out);
    fclose(out);
    memory_free(&memory);
  }
    else
  if (command==COMMAND_WRITE)
  {
    unsigned char cpu_type;

    if (filename==NULL)
    {
      printf("No hexfile loaded.  Exiting...\n");
      exit(1);
    }

    memory_init(&memory, 0xffffffff, 1);

    if (read_elf(filename, &memory, &cpu_type, NULL)>=0)
    {
      printf("Loaded ELF %s from 0x%04x to 0x%04x\n", filename, memory.low_address, memory.high_address);
    }
      else
    if (read_hex(filename, &memory)>=0)
    {
      printf("Loaded hexfile %s from 0x%04x to 0x%04x\n", filename, memory.low_address, memory.high_address);
    }
      else
    {
      printf("Could not load hexfile\n");
      memory_free(&memory);
      exit(1);
    }

    lpc_memory_write(uart, &memory);
    memory_free(&memory);
  }
    else
  if (command==COMMAND_RUN)
  {
    if (prog_type==PROG_LPC)
    {
      lpc_run(uart, param1);
    }
  }

  return 0;
}