#include #include #include #include "dis-asm.h" /********************* DISASSEMBLER *******************/ static disassemble_info _jiti_intern_info; /////////////////////////////// int _jiti_intern_read_mem_func(bfd_vma memaddr, bfd_byte *myaddr, int length, struct disassemble_info *info){ memcpy (myaddr, info->buffer + (memaddr - info->buffer_vma), length); return 0; } int dummyfprintf(FILE * f,char const * p, ...) { unsigned d; // spend some time for (d = 0; d < 10000; d++); return 0; } ////////////////////////////// void _jiti_init_info(){ INIT_DISASSEMBLE_INFO(_jiti_intern_info,stdout,dummyfprintf); _jiti_intern_info.buffer_length = 2^31; _jiti_intern_info.read_memory_func = _jiti_intern_read_mem_func; _jiti_intern_info.display_endian = BFD_ENDIAN_LITTLE; _jiti_intern_info.endian = BFD_ENDIAN_LITTLE; _jiti_intern_info.mach = bfd_mach_i386_i386; _jiti_intern_info.arch = bfd_arch_i386; } //////////////////////////////////////////////////// #include unsigned global; doit(int arg){ int i,l=5000; while (l--) { print_insn_i386((unsigned)arg, &_jiti_intern_info); } pthread_exit(NULL); } int main(){ pthread_t t1, t2, t3,t4,t5,t6,t7,t8,t9,t10; _jiti_init_info(); pthread_create(&t1, NULL /*atrr*/, doit, &main/*arg*/); pthread_create(&t2, NULL /*atrr*/, doit, &main/*arg*/); pthread_create(&t3, NULL /*atrr*/, doit, &main/*arg*/); pthread_create(&t4, NULL /*atrr*/, doit, &main/*arg*/); pthread_create(&t5, NULL /*atrr*/, doit, &main/*arg*/); pthread_create(&t6, NULL /*atrr*/, doit, &main/*arg*/); pthread_create(&t7, NULL /*atrr*/, doit, &main/*arg*/); pthread_create(&t8, NULL /*atrr*/, doit, &main/*arg*/); pthread_create(&t9, NULL /*atrr*/, doit, &main/*arg*/); pthread_create(&t10, NULL /*atrr*/, doit, &main/*arg*/); pthread_join(t1, NULL); pthread_join(t2, NULL); pthread_join(t3, NULL); pthread_join(t4, NULL); pthread_join(t5, NULL); pthread_join(t6, NULL); pthread_join(t7, NULL); pthread_join(t8, NULL); pthread_join(t9, NULL); pthread_join(t10, NULL); return 0; }