I want to get the return type and parameters information of a function from the function type declaration.So I use the structure func_type_info_t,which holds the information I am interested.Here is some of my code:
...
qtype type,fnames;
char true_name[MAXSTR];
char type_decl[MAXSTR];
get_name(BADADDR, func_startEa, true_name, sizeof(true_name));
if(get_tinfo(func_startEa,&type,&fnames)&&
(print_type_to_one_line(type_decl,MAXSTR,idati,type.c_str(),true_name,NULL,fnames.c_str())==T_NORMAL))
{
//found some type information
msg("0x%08x type information:%s\n",func_startEa,type_decl);
msg("true_name:%s\n",true_name);
func_type_info_t fti;
int a = build_funcarg_info(idati, type.c_str(), fnames.c_str(), &fti, 0);
msg("number of parameters:%d\n",a);
if(a!=0)
{
//�������Լ��
msg("calling convention:0x%x\n",get_cc(fti.cc));
//�����������
msg("return type:%s\n",(char *)fti.rettype.c_str());
//���в�����Ϣ
for(int k=0;k<a;k++)
{
argloc_t al=fti[k].argloc;
const type_t *argtype=fti[k].type.c_str();
const char *argname=fti[k].name.c_str();
if(is_reg_argloc(al)) msg("argloction:this parameters is in register\n");
if(is_stack_argloc(al)) msg("argloction:this parameter is in stack!\n");
msg("argtype:0x%x\n,argname:%s\n",al,argtype,argname);
}
}
}
....
but the msg() outputint the results as follow:
Executing function 'main'...
0x01001a17:int __stdcall sub_1001A17(int hWnd)
0x01001a17 type information:int __stdcall sub_1001A17(int hWnd)
true_name:sub_1001A17
number of parameters:1
calling convention:0x50
return type:
argloction:this parameter is in stack!
argtype:0x0
,argname:
"msg()" can not output the return type string and also the "argname"
what is the problem?
Thanks for any hints!







