+ char proc_mem[64];
+ if( tid > 0 && tid != pid )
+ sprintf(proc_mem,"/proc/%d/task/%d/mem",pid,tid);
+ else
+ sprintf(proc_mem,"/proc/%d/mem",pid);
+ int pfd = open(proc_mem,O_RDONLY);
+ if( pfd >= 0 ) {
+ fprintf(fp,"\nCODE:\n");
+ for( int i=-32; i<32; ) {
+ uint8_t v; void *vp = (void *)(ip + i);
+ if( !(i & 7) ) fprintf(fp,"%p: ", vp);
+ if( pread(pfd,&v,sizeof(v),(off_t)vp) != sizeof(v) ) break;
+ fprintf(fp,"%c%02x", !i ? '>' : ' ', v);
+ if( !(++i & 7) ) fprintf(fp,"\n");
+ }
+ fprintf(fp,"\n");
+ close(pfd);
+ }
+ else
+ fprintf(fp,"err opening: %s, %m\n", proc_mem);
+