1 2#if __OBJC2__ 3 4#include <mach/shared_region.h> 5 6#if __LP64__ 7# define PTR " .quad " 8#else 9# define PTR " .long " 10#endif 11 12#define str(x) #x 13#define str2(x) str(x) 14 15__BEGIN_DECLS 16void nop(void) { } 17__END_DECLS 18 19asm( 20 ".section __DATA,__objc_data \n" 21 ".align 3 \n" 22 "L_category: \n" 23 PTR "L_cat_name \n" 24 PTR "_OBJC_CLASS_$_NSObject \n" 25#if EVIL_INSTANCE_METHOD 26 PTR "L_evil_methods \n" 27#else 28 PTR "L_good_methods \n" 29#endif 30#if EVIL_CLASS_METHOD 31 PTR "L_evil_methods \n" 32#else 33 PTR "L_good_methods \n" 34#endif 35 PTR "0 \n" 36 PTR "0 \n" 37 38 "L_evil_methods: \n" 39 ".long 24 \n" 40 ".long 1 \n" 41 PTR "L_load \n" 42 PTR "L_load \n" 43 PTR str2(SHARED_REGION_BASE+SHARED_REGION_SIZE-PAGE_SIZE) " \n" 44 45 "L_good_methods: \n" 46 ".long 24 \n" 47 ".long 1 \n" 48 PTR "L_load \n" 49 PTR "L_load \n" 50 PTR "_nop \n" 51 52 ".cstring \n" 53 "L_cat_name: .ascii \"Evil\\0\" \n" 54 "L_load: .ascii \"load\\0\" \n" 55 56 ".section __DATA,__objc_catlist \n" 57#if !OMIT_CAT 58 PTR "L_category \n" 59#endif 60 61 ".section __DATA,__objc_nlcatlist \n" 62#if !OMIT_NL_CAT 63 PTR "L_category \n" 64#endif 65 66 ".text \n" 67 ); 68 69// __OBJC2__ 70#endif 71 72void fn(void) { } 73