pawndisasm: Output native names as comments for sysreq.c instructions

This commit is contained in:
Zeex 2014-08-31 14:06:45 +07:00
parent 2f6b38dc51
commit 2796907cd7

View File

@ -41,6 +41,7 @@ cell parm5(FILE *ftxt,const cell *params,cell opcode,cell cip);
cell do_proc(FILE *ftxt,const cell *params,cell opcode,cell cip);
cell do_call(FILE *ftxt,const cell *params,cell opcode,cell cip);
cell do_jump(FILE *ftxt,const cell *params,cell opcode,cell cip);
cell do_sysreq(FILE *ftxt,const cell *params,cell opcode,cell cip);
cell do_switch(FILE *ftxt,const cell *params,cell opcode,cell cip);
cell casetbl(FILE *ftxt,const cell *params,cell opcode,cell cip);
cell do_file(FILE *ftxt,const cell *params,cell opcode,cell cip);
@ -177,7 +178,7 @@ static OPCODE opcodelist[] = {
{120, "halt", parm1 },
{121, "bounds", parm1 },
{122, "sysreq.pri", parm0 },
{123, "sysreq.c", parm1 },
{123, "sysreq.c", do_sysreq },
{124, "file", do_file },
{125, "line", parm2 },
{126, "symbol", do_symbol },
@ -306,6 +307,36 @@ cell do_jump(FILE *ftxt,const cell *params,cell opcode,cell cip)
return 2;
}
cell do_sysreq(FILE *ftxt,const cell *params,cell opcode,cell cip)
{
int idx,numnatives,nameoffset;
AMX_FUNCSTUBNT func;
char name[sNAMEMAX+1];
/* find the procedure in the table (only works for a public function) */
nameoffset=-1;
name[0]='\0';
/* find the address in the public function table */
numnatives=(amxhdr.libraries-amxhdr.natives)/sizeof(AMX_FUNCSTUBNT);
fseek(fpamx,amxhdr.natives,SEEK_SET);
for (idx=0; idx<numnatives && nameoffset<0; idx++) {
fread(&func,sizeof func,1,fpamx);
if (idx==*params)
nameoffset=func.nameofs;
} /* for */
if (nameoffset>=0) {
fseek(fpamx,nameoffset,SEEK_SET);
fread(name,1,sNAMEMAX+1,fpamx);
} /* if */
print_opcode(ftxt,opcode,cip);
fprintf(ftxt,"%08lx",*params);
if (strlen(name)>0)
fprintf(ftxt,"\t; %s",name);
fprintf(ftxt,"\n");
return 2;
}
cell do_switch(FILE *ftxt,const cell *params,cell opcode,cell cip)
{
print_opcode(ftxt,opcode,cip);