Beispiel #1
0
  SEXP pycall__funname(SEXP Rmodule_name, SEXP Rfun_name, SEXP Rargv_list, SEXP Rargv_dict) {
#ifdef REMBEDPY_DEBUG
    Rprintf("funname\n");
#endif
    std::string 
  		fun_name(Rcpp::as<std::string>(Rfun_name)),
  		module_name(Rcpp::as<std::string>(Rmodule_name));
    boost::python::object callable(RembedPy::extract_pyobj(fun_name, module_name));
    boost::python::list argv_list(RembedPy::extract_argv_list(Rargv_list));
    boost::python::dict argv_dict(RembedPy::extract_argv_dict(Rargv_dict));
    return RembedPy::pycall(callable, argv_list, argv_dict);
  }
Beispiel #2
0
static int cmd_bt(char *args)
{
	swaddr_t prev_ebp=cpu.ebp;
	swaddr_t ret_addr=swaddr_read(prev_ebp+4, 4, R_SS);
	//printf("prev_ebp:%x, addr:%x\n",prev_ebp,ret_addr);
	int count=1;
	int n=4;
	char* NowName=fun_name(cpu.eip);
	if (NowName!=NULL) printf("#0  0x%x  in %s(",ret_addr+1,NowName);
	swaddr_t var_addr=prev_ebp+8;
	while (n>0) {
		printf("%d,",swaddr_read(var_addr, 4, R_SS));
		var_addr+=4;
		n--;
	}
	printf("\b)\n");

	while (prev_ebp!=0){
		prev_ebp=swaddr_read(prev_ebp, 4, R_SS);
		//ret_addr=swaddr_read(prev_ebp+4,4);
		if (prev_ebp==0) break;
		printf("#%d  0x%x  in ",count++,ret_addr+1);
		char* FunName=fun_name(ret_addr);
		if (FunName!=NULL) printf("%s(",FunName);
		var_addr=prev_ebp+8;
		n=5;
		while (n>0) {
		       printf("%d,",swaddr_read(var_addr, 4, R_SS));
		       var_addr+=4;
		       n--;
		} 
		printf("\b)\n");
		//prev_ebp=swaddr_read(prev_ebp,4);
		ret_addr=swaddr_read(prev_ebp+4, 4, R_SS);
	}
	return 0;

}