由于Linux内核运行在受保护的地址空间上,系统中的用户空间程序无法直接跳转到内核代码执行,也就是由于权限的限制,用户程序不能直接调用内核的函数,因此,需要一种机制使应用程序可以某种方式通知内核,使应用程序的执行流进入内核态,这样内核就可以代表应用程序在内核空间执行系统调用。这有点像机场的安检通道,旅客不但只能通过有限的几个通道进入,还要经过严格的安全检查。
但是,安全和效率往往是一体两面,在linux内核中发起一个系统调用是特别昂贵的操作,因为处理器需要中断当前正在执行的任务,执行一系列的操作才能执行真正调用的函数,这些操作包括切换CPU运行模式,陷入内核,保存用户现场,可以看到是非常复杂的。针对这种情况,vsyscall和vdso被设计用来加速系统调用处理。我们先分析一下vsyscall.
vsyscall
vsyscall或virtual system call是一种用于加速系统调用的机制,vsyscall的工作原理其实非常简单,linux内核在用户空间映射一个包含一些变量以及一些系统调用代码实现的内存页,这个页面虽然映射在内核空间,但是可以允许从用户空间直接访问,这样避免了透过用户态运行库进行系统调用的开销。对于X86_64架构可以在Linux内核文档中找到关于这一内存区的细节:
Documentation/x86/x86_64/mm.rst
为什么是ffffffffff600000-ffffffffff601000,这个答案可以在内核中找到。
#include <stdio.h>
#include <stdlib.h>
#define VSYSCALL_ADDR (-10UL << 20)
int main(void)
{
printf("%s line %d, VSYSCALL_ADDR=0x%lx.\n", __func__, __LINE__, VSYSCALL_ADDR);
return 0;
}
内核中的处理过程
start_kernel
\___setup_arch
\___map_vsyscall
\___ __set_fix_map(VSYSCALL_PAGE,...)
\___native_set_fixmap
\___ __native_set_fixmap(idx,...)
\___set_pte_vaddr(address, pte);
arch/x86/entry/vsyscall/vsyscall_64.c:
map_vsyscall函数的实现依赖于内核配置选项CONFIG_X86_VSYSCALL_EMULATION
为何是模拟vsyscall?事实上,由于历史原因,vsyscall是一种遗留ABI,vsyscall调用具有绑定的地址,意味着vsyscall的内存页的位置在任何时刻是相同的,这一位置是在上面的头文件中由VSYSCALL_ADDR宏定义的,在map_vsyscall函数的开始,通过宏__pa_symbol获取了vsyscall内存页的物理地址,__vsyscall_page在arch/x86/entry/vsyscall/vsyscall_emu_64.S中定义,具有如下的虚拟地址。
其中包含了用户态最常用的三个系统调用gettimeofday, time, getcpu.注意虚拟系统调用的地址以1024 byte对齐,中间填充0xcc(int3指令).因为要放在一个独立的页面中,映射,要求vsyscall页面按PAGE对齐:
vsyscall内存页的起始地址为0xffffffffff600000,因此,用户态LIBC知道所有的虚拟系统调用的地址,可以在LIBC源码中找到这些地址的定义:
回到map_vsyscall函数及__vsysall_page的实现,在得到__vsyscall_page的物理地址后,再进行映射。map_vsyscall映射时,会判断vsyscall_mode变量,根据模式的不同,选择不同的映射属性。
vsyscall_mode在系统启动阶段通过命令行参数初始化:
如果vsyscall_mode被设置为映射的vsyscall页面不允许执行,则用户态通过vsyscall table发起的三个系统调用会产生PAGE FAULT,在vsyscall_64.c中,page fault会调用emulate_vsyscall函数对VSYSCALL进行模拟:
__do_page_fault->do_user_addr_fault->emulate_vsyscall:
GDB DUMP VSYSCALL代码
如下方式使用GDB DUMP代码失败,因为映射的VSYSCALL页面不可读。
这是由于默认在内核启动时vsyscall_mode被设置成了XONLY
而我们可以在启动阶段传入命令行参数,修改/etc/default/grub将 vsyscall_mode设置为emulate,之后update grub.
还有一步需要注意,我们需要修改vsyscall的映射属性,因为默认的emulate仍然是不可读的,会触发page fault由emulate_vsyscall来模拟的路径,vsyscall page的映射属性由宏PAGE_KERNEL_VVAR控制,我们按照下图修改,重新编译内核:
之后重新修改编译内核,用新的内核启动系统,可以看到,修改成功:
再次DUMP,这次成功拿到vsyscall镜像:
反编译VSYSCALL页面:
objdump -b binary -Mintel,x86-64,addr64 -m i386:x86-64 --adjust-vma=0xffffffffff600000 -D vsyscall.bin
可以看到,从实际的VSYSCALL页面DUMP出来的三个系统调用地址分配在0xffffffffff600000,ffffffffff600400,0xffffffffff600800.和预期相符。
vsyscall.bin: 文件格式 binary
Disassembly of section .data:
ffffffffff600000 <.data>:
ffffffffff600000: 48 c7 c0 60 00 00 00 mov rax,0x60
ffffffffff600007: 0f 05 syscall
ffffffffff600009: c3 ret
ffffffffff60000a: cc int3
ffffffffff60000b: cc int3
ffffffffff60000c: cc int3
ffffffffff60000d: cc int3
ffffffffff60000e: cc int3
ffffffffff60000f: cc int3
ffffffffff600010: cc int3
ffffffffff600011: cc int3
ffffffffff600012: cc int3
ffffffffff600013: cc int3
ffffffffff600014: cc int3
ffffffffff600015: cc int3
ffffffffff600016: cc int3
ffffffffff600017: cc int3
ffffffffff600018: cc int3
ffffffffff600019: cc int3
ffffffffff60001a: cc int3
ffffffffff60001b: cc int3
ffffffffff60001c: cc int3
ffffffffff60001d: cc int3
ffffffffff60001e: cc int3
ffffffffff60001f: cc int3
ffffffffff600020: cc int3
ffffffffff600021: cc int3
ffffffffff600022: cc int3
ffffffffff600023: cc int3
ffffffffff600024: cc int3
ffffffffff600025: cc int3
ffffffffff600026: cc int3
ffffffffff600027: cc int3
ffffffffff600028: cc int3
ffffffffff600029: cc int3
ffffffffff60002a: cc int3
ffffffffff60002b: cc int3
ffffffffff60002c: cc int3
ffffffffff60002d: cc int3
ffffffffff60002e: cc int3
ffffffffff60002f: cc int3
ffffffffff600030: cc int3
ffffffffff600031: cc int3
ffffffffff600032: cc int3
ffffffffff600033: cc int3
ffffffffff600034: cc int3
ffffffffff600035: cc int3
ffffffffff600036: cc int3
ffffffffff600037: cc int3
ffffffffff600038: cc int3
ffffffffff600039: cc int3
ffffffffff60003a: cc int3
ffffffffff60003b: cc int3
ffffffffff60003c: cc int3
ffffffffff60003d: cc int3
ffffffffff60003e: cc int3
ffffffffff60003f: cc int3
ffffffffff600040: cc int3
ffffffffff600041: cc int3
ffffffffff600042: cc int3
ffffffffff600043: cc int3
ffffffffff600044: cc int3
ffffffffff600045: cc int3
ffffffffff600046: cc int3
ffffffffff600047: cc int3
ffffffffff600048: cc int3
ffffffffff600049: cc int3
ffffffffff60004a: cc int3
ffffffffff60004b: cc int3
ffffffffff60004c: cc int3
ffffffffff60004d: cc int3
ffffffffff60004e: cc int3
ffffffffff60004f: cc int3
ffffffffff600050: cc int3
ffffffffff600051: cc int3
ffffffffff600052: cc int3
ffffffffff600053: cc int3
ffffffffff600054: cc int3
ffffffffff600055: cc int3
ffffffffff600056: cc int3
ffffffffff600057: cc int3
ffffffffff600058: cc int3
ffffffffff600059: cc int3
ffffffffff60005a: cc int3
ffffffffff60005b: cc int3
ffffffffff60005c: cc int3
ffffffffff60005d: cc int3
ffffffffff60005e: cc int3
ffffffffff60005f: cc int3
ffffffffff600060: cc int3
ffffffffff600061: cc int3
ffffffffff600062: cc int3
ffffffffff600063: cc int3
ffffffffff600064: cc int3
ffffffffff600065: cc int3
ffffffffff600066: cc int3
ffffffffff600067: cc int3
ffffffffff600068: cc int3
ffffffffff600069: cc int3
ffffffffff60006a: cc int3
ffffffffff60006b: cc int3
ffffffffff60006c: cc int3
ffffffffff60006d: cc int3
ffffffffff60006e: cc int3
ffffffffff60006f: cc int3
ffffffffff600070: cc int3
ffffffffff600071: cc int3
ffffffffff600072: cc int3
ffffffffff600073: cc int3
ffffffffff600074: cc int3
ffffffffff600075: cc int3
ffffffffff600076: cc int3
ffffffffff600077: cc int3
ffffffffff600078: cc int3
ffffffffff600079: cc int3
ffffffffff60007a: cc int3
ffffffffff60007b: cc int3
ffffffffff60007c: cc int3
ffffffffff60007d: cc int3
ffffffffff60007e: cc int3
ffffffffff60007f: cc int3
ffffffffff600080: cc int3
ffffffffff600081: cc int3
ffffffffff600082: cc int3
ffffffffff600083: cc int3
ffffffffff600084: cc int3
ffffffffff600085: cc int3
ffffffffff600086: cc int3
ffffffffff600087: cc int3
ffffffffff600088: cc int3
ffffffffff600089: cc int3
ffffffffff60008a: cc int3
ffffffffff60008b: cc int3
ffffffffff60008c: cc int3
ffffffffff60008d: cc int3
ffffffffff60008e: cc int3
ffffffffff60008f: cc int3
ffffffffff600090: cc int3
ffffffffff600091: cc int3
ffffffffff600092: cc int3
ffffffffff600093: cc int3
ffffffffff600094: cc int3
ffffffffff600095: cc int3
ffffffffff600096: cc int3
ffffffffff600097: cc int3
ffffffffff600098: cc int3
ffffffffff600099: cc int3
ffffffffff60009a: cc int3
ffffffffff60009b: cc int3
ffffffffff60009c: cc int3
ffffffffff60009d: cc int3
ffffffffff60009e: cc int3
ffffffffff60009f: cc int3
ffffffffff6000a0: cc int3
ffffffffff6000a1: cc int3
ffffffffff6000a2: cc int3
ffffffffff6000a3: cc int3
ffffffffff6000a4: cc int3
ffffffffff6000a5: cc int3
ffffffffff6000a6: cc int3
ffffffffff6000a7: cc int3
ffffffffff6000a8: cc int3
ffffffffff6000a9: cc int3
ffffffffff6000aa: cc int3
ffffffffff6000ab: cc int3
ffffffffff6000ac: cc int3
ffffffffff6000ad: cc int3
ffffffffff6000ae: cc int3
ffffffffff6000af: cc int3
ffffffffff6000b0: cc int3
ffffffffff6000b1: cc int3
ffffffffff6000b2: cc int3
ffffffffff6000b3: cc int3
ffffffffff6000b4: cc int3
ffffffffff6000b5: cc int3
ffffffffff6000b6: cc int3
ffffffffff6000b7: cc int3
ffffffffff6000b8: cc int3
ffffffffff6000b9: cc int3
ffffffffff6000ba: cc int3
ffffffffff6000bb: cc int3
ffffffffff6000bc: cc int3
ffffffffff6000bd: cc int3
ffffffffff6000be: cc int3
ffffffffff6000bf: cc int3
ffffffffff6000c0: cc int3
ffffffffff6000c1: cc int3
ffffffffff6000c2: cc int3
ffffffffff6000c3: cc int3
ffffffffff6000c4: cc int3
ffffffffff6000c5: cc int3
ffffffffff6000c6: cc int3
ffffffffff6000c7: cc int3
ffffffffff6000c8: cc int3
ffffffffff6000c9: cc int3
ffffffffff6000ca: cc int3
ffffffffff6000cb: cc int3
ffffffffff6000cc: cc int3
ffffffffff6000cd: cc int3
ffffffffff6000ce: cc int3
ffffffffff6000cf: cc int3
ffffffffff6000d0: cc int3
ffffffffff6000d1: cc int3
ffffffffff6000d2: cc int3
ffffffffff6000d3: cc int3
ffffffffff6000d4: cc int3
ffffffffff6000d5: cc int3
ffffffffff6000d6: cc int3
ffffffffff6000d7: cc int3
ffffffffff6000d8: cc int3
ffffffffff6000d9: cc int3
ffffffffff6000da: cc int3
ffffffffff6000db: cc int3
ffffffffff6000dc: cc int3
ffffffffff6000dd: cc int3
ffffffffff6000de: cc int3
ffffffffff6000df: cc int3
ffffffffff6000e0: cc int3
ffffffffff6000e1: cc int3
ffffffffff6000e2: cc int3
ffffffffff6000e3: cc int3
ffffffffff6000e4: cc int3
ffffffffff6000e5: cc int3
ffffffffff6000e6: cc int3
ffffffffff6000e7: cc int3
ffffffffff6000e8: cc int3
ffffffffff6000e9: cc int3
ffffffffff6000ea: cc int3
ffffffffff6000eb: cc int3
ffffffffff6000ec: cc int3
ffffffffff6000ed: cc int3
ffffffffff6000ee: cc int3
ffffffffff6000ef: cc int3
ffffffffff6000f0: cc int3
ffffffffff6000f1: cc int3
ffffffffff6000f2: cc int3
ffffffffff6000f3: cc int3
ffffffffff6000f4: cc int3
ffffffffff6000f5: cc int3
ffffffffff6000f6: cc int3
ffffffffff6000f7: cc int3
ffffffffff6000f8: cc int3
ffffffffff6000f9: cc int3
ffffffffff6000fa: cc int3
ffffffffff6000fb: cc int3
ffffffffff6000fc: cc int3
ffffffffff6000fd: cc int3
ffffffffff6000fe: cc int3
ffffffffff6000ff: cc int3
ffffffffff600100: cc int3
ffffffffff600101: cc int3
ffffffffff600102: cc int3
ffffffffff600103: cc int3
ffffffffff600104: cc int3
ffffffffff600105: cc int3
ffffffffff600106: cc int3
ffffffffff600107: cc int3
ffffffffff600108: cc int3
ffffffffff600109: cc int3
ffffffffff60010a: cc int3
ffffffffff60010b: cc int3
ffffffffff60010c: cc int3
ffffffffff60010d: cc int3
ffffffffff60010e: cc int3
ffffffffff60010f: cc int3
ffffffffff600110: cc int3
ffffffffff600111: cc int3
ffffffffff600112: cc int3
ffffffffff600113: cc int3
ffffffffff600114: cc int3
ffffffffff600115: cc int3
ffffffffff600116: cc int3
ffffffffff600117: cc int3
ffffffffff600118: cc int3
ffffffffff600119: cc int3
ffffffffff60011a: cc int3
ffffffffff60011b: cc int3
ffffffffff60011c: cc int3
ffffffffff60011d: cc int3
ffffffffff60011e: cc int3
ffffffffff60011f: cc int3
ffffffffff600120: cc int3
ffffffffff600121: cc int3
ffffffffff600122: cc int3
ffffffffff600123: cc int3
ffffffffff600124: cc int3
ffffffffff600125: cc int3
ffffffffff600126: cc int3
ffffffffff600127: cc int3
ffffffffff600128: cc int3
ffffffffff600129: cc int3
ffffffffff60012a: cc int3
ffffffffff60012b: cc int3
ffffffffff60012c: cc int3
ffffffffff60012d: cc int3
ffffffffff60012e: cc int3
ffffffffff60012f: cc int3
ffffffffff600130: cc int3
ffffffffff600131: cc int3
ffffffffff600132: cc int3
ffffffffff600133: cc int3
ffffffffff600134: cc int3
ffffffffff600135: cc int3
ffffffffff600136: cc int3
ffffffffff600137: cc int3
ffffffffff600138: cc int3
ffffffffff600139: cc int3
ffffffffff60013a: cc int3
ffffffffff60013b: cc int3
ffffffffff60013c: cc int3
ffffffffff60013d: cc int3
ffffffffff60013e: cc int3
ffffffffff60013f: cc int3
ffffffffff600140: cc int3
ffffffffff600141: cc int3
ffffffffff600142: cc int3
ffffffffff600143: cc int3
ffffffffff600144: cc int3
ffffffffff600145: cc int3
ffffffffff600146: cc int3
ffffffffff600147: cc int3
ffffffffff600148: cc int3
ffffffffff600149: cc int3
ffffffffff60014a: cc int3
ffffffffff60014b: cc int3
ffffffffff60014c: cc int3
ffffffffff60014d: cc int3
ffffffffff60014e: cc int3
ffffffffff60014f: cc int3
ffffffffff600150: cc int3
ffffffffff600151: cc int3
ffffffffff600152: cc int3
ffffffffff600153: cc int3
ffffffffff600154: cc int3
ffffffffff600155: cc int3
ffffffffff600156: cc int3
ffffffffff600157: cc int3
ffffffffff600158: cc int3
ffffffffff600159: cc int3
ffffffffff60015a: cc int3
ffffffffff60015b: cc int3
ffffffffff60015c: cc int3
ffffffffff60015d: cc int3
ffffffffff60015e: cc int3
ffffffffff60015f: cc int3
ffffffffff600160: cc int3
ffffffffff600161: cc int3
ffffffffff600162: cc int3
ffffffffff600163: cc int3
ffffffffff600164: cc int3
ffffffffff600165: cc int3
ffffffffff600166: cc int3
ffffffffff600167: cc int3
ffffffffff600168: cc int3
ffffffffff600169: cc int3
ffffffffff60016a: cc int3
ffffffffff60016b: cc int3
ffffffffff60016c: cc int3
ffffffffff60016d: cc int3
ffffffffff60016e: cc int3
ffffffffff60016f: cc int3
ffffffffff600170: cc int3
ffffffffff600171: cc int3
ffffffffff600172: cc int3
ffffffffff600173: cc int3
ffffffffff600174: cc int3
ffffffffff600175: cc int3
ffffffffff600176: cc int3
ffffffffff600177: cc int3
ffffffffff600178: cc int3
ffffffffff600179: cc int3
ffffffffff60017a: cc int3
ffffffffff60017b: cc int3
ffffffffff60017c: cc int3
ffffffffff60017d: cc int3
ffffffffff60017e: cc int3
ffffffffff60017f: cc int3
ffffffffff600180: cc int3
ffffffffff600181: cc int3
ffffffffff600182: cc int3
ffffffffff600183: cc int3
ffffffffff600184: cc int3
ffffffffff600185: cc int3
ffffffffff600186: cc int3
ffffffffff600187: cc int3
ffffffffff600188: cc int3
ffffffffff600189: cc int3
ffffffffff60018a: cc int3
ffffffffff60018b: cc int3
ffffffffff60018c: cc int3
ffffffffff60018d: cc int3
ffffffffff60018e: cc int3
ffffffffff60018f: cc int3
ffffffffff600190: cc int3
ffffffffff600191: cc int3
ffffffffff600192: cc int3
ffffffffff600193: cc int3
ffffffffff600194: cc int3
ffffffffff600195: cc int3
ffffffffff600196: cc int3
ffffffffff600197: cc int3
ffffffffff600198: cc int3
ffffffffff600199: cc int3
ffffffffff60019a: cc int3
ffffffffff60019b: cc int3
ffffffffff60019c: cc int3
ffffffffff60019d: cc int3
ffffffffff60019e: cc int3
ffffffffff60019f: cc int3
ffffffffff6001a0: cc int3
ffffffffff6001a1: cc int3
ffffffffff6001a2: cc int3
ffffffffff6001a3: cc int3
ffffffffff6001a4: cc int3
ffffffffff6001a5: cc int3
ffffffffff6001a6: cc int3
ffffffffff6001a7: cc int3
ffffffffff6001a8: cc int3
ffffffffff6001a9: cc int3
ffffffffff6001aa: cc int3
ffffffffff6001ab: cc int3
ffffffffff6001ac: cc int3
ffffffffff6001ad: cc int3
ffffffffff6001ae: cc int3
ffffffffff6001af: cc int3
ffffffffff6001b0: cc int3
ffffffffff6001b1: cc int3
ffffffffff6001b2: cc int3
ffffffffff6001b3: cc int3
ffffffffff6001b4: cc int3
ffffffffff6001b5: cc int3
ffffffffff6001b6: cc int3
ffffffffff6001b7: cc int3
ffffffffff6001b8: cc int3
ffffffffff6001b9: cc int3
ffffffffff6001ba: cc int3
ffffffffff6001bb: cc int3
ffffffffff6001bc: cc int3
ffffffffff6001bd: cc int3
ffffffffff6001be: cc int3
ffffffffff6001bf: cc int3
ffffffffff6001c0: cc int3
ffffffffff6001c1: cc int3
ffffffffff6001c2: cc int3
ffffffffff6001c3: cc int3
ffffffffff6001c4: cc int3
ffffffffff6001c5: cc int3
ffffffffff6001c6: cc int3
ffffffffff6001c7: cc int3
ffffffffff6001c8: cc int3
ffffffffff6001c9: cc int3
ffffffffff6001ca: cc int3
ffffffffff6001cb: cc int3
ffffffffff6001cc: cc int3
ffffffffff6001cd: cc int3
ffffffffff6001ce: cc int3
ffffffffff6001cf: cc int3
ffffffffff6001d0: cc int3
ffffffffff6001d1: cc int3
ffffffffff6001d2: cc int3
ffffffffff6001d3: cc int3
ffffffffff6001d4: cc int3
ffffffffff6001d5: cc int3
ffffffffff6001d6: cc int3
ffffffffff6001d7: cc int3
ffffffffff6001d8: cc int3
ffffffffff6001d9: cc int3
ffffffffff6001da: cc int3
ffffffffff6001db: cc int3
ffffffffff6001dc: cc int3
ffffffffff6001dd: cc int3
ffffffffff6001de: cc int3
ffffffffff6001df: cc int3
ffffffffff6001e0: cc int3
ffffffffff6001e1: cc int3
ffffffffff6001e2: cc int3
ffffffffff6001e3: cc int3
ffffffffff6001e4: cc int3
ffffffffff6001e5: cc int3
ffffffffff6001e6: cc int3
ffffffffff6001e7: cc int3
ffffffffff6001e8: cc int3
ffffffffff6001e9: cc int3
ffffffffff6001ea: cc int3
ffffffffff6001eb: cc int3
ffffffffff6001ec: cc int3
ffffffffff6001ed: cc int3
ffffffffff6001ee: cc int3
ffffffffff6001ef: cc int3
ffffffffff6001f0: cc int3
ffffffffff6001f1: cc int3
ffffffffff6001f2: cc int3
ffffffffff6001f3: cc int3
ffffffffff6001f4: cc int3
ffffffffff6001f5: cc int3
ffffffffff6001f6: cc int3
ffffffffff6001f7: cc int3
ffffffffff6001f8: cc int3
ffffffffff6001f9: cc int3
ffffffffff6001fa: cc int3
ffffffffff6001fb: cc int3
ffffffffff6001fc: cc int3
ffffffffff6001fd: cc int3
ffffffffff6001fe: cc int3
ffffffffff6001ff: cc int3
ffffffffff600200: cc int3
ffffffffff600201: cc int3
ffffffffff600202: cc int3
ffffffffff600203: cc int3
ffffffffff600204: cc int3
ffffffffff600205: cc int3
ffffffffff600206: cc int3
ffffffffff600207: cc int3
ffffffffff600208: cc int3
ffffffffff600209: cc int3
ffffffffff60020a: cc int3
ffffffffff60020b: cc int3
ffffffffff60020c: cc int3
ffffffffff60020d: cc int3
ffffffffff60020e: cc int3
ffffffffff60020f: cc int3
ffffffffff600210: cc int3
ffffffffff600211: cc int3
ffffffffff600212: cc int3
ffffffffff600213: cc int3
ffffffffff600214: cc int3
ffffffffff600215: cc int3
ffffffffff600216: cc int3
ffffffffff600217: cc int3
ffffffffff600218: cc int3
ffffffffff600219: cc int3
ffffffffff60021a: cc int3
ffffffffff60021b: cc int3
ffffffffff60021c: cc int3
ffffffffff60021d: cc int3
ffffffffff60021e: cc int3
ffffffffff60021f: cc int3
ffffffffff600220: cc int3
ffffffffff600221: cc int3
ffffffffff600222: cc int3
ffffffffff600223: cc int3
ffffffffff600224: cc int3
ffffffffff600225: cc int3
ffffffffff600226: cc int3
ffffffffff600227: cc int3
ffffffffff600228: cc int3
ffffffffff600229: cc int3
ffffffffff60022a: cc int3
ffffffffff60022b: cc int3
ffffffffff60022c: cc int3
ffffffffff60022d: cc int3
ffffffffff60022e: cc int3
ffffffffff60022f: cc int3
ffffffffff600230: cc int3
ffffffffff600231: cc int3
ffffffffff600232: cc int3
ffffffffff600233: cc int3
ffffffffff600234: cc int3
ffffffffff600235: cc int3
ffffffffff600236: cc int3
ffffffffff600237: cc int3
ffffffffff600238: cc int3
ffffffffff600239: cc int3
ffffffffff60023a: cc int3
ffffffffff60023b: cc int3
ffffffffff60023c: cc int3
ffffffffff60023d: cc int3
ffffffffff60023e: cc int3
ffffffffff60023f: cc int3
ffffffffff600240: cc int3
ffffffffff600241: cc int3
ffffffffff600242: cc int3
ffffffffff600243: cc int3
ffffffffff600244: cc int3
ffffffffff600245: cc int3
ffffffffff600246: cc int3
ffffffffff600247: cc int3
ffffffffff600248: cc int3
ffffffffff600249: cc int3
ffffffffff60024a: cc int3
ffffffffff60024b: cc int3
ffffffffff60024c: cc int3
ffffffffff60024d: cc int3
ffffffffff60024e: cc int3
ffffffffff60024f: cc int3
ffffffffff600250: cc int3
ffffffffff600251: cc int3
ffffffffff600252: cc int3
ffffffffff600253: cc int3
ffffffffff600254: cc int3
ffffffffff600255: cc int3
ffffffffff600256: cc int3
ffffffffff600257: cc int3
ffffffffff600258: cc int3
ffffffffff600259: cc int3
ffffffffff60025a: cc int3
ffffffffff60025b: cc int3
ffffffffff60025c: cc int3
ffffffffff60025d: cc int3
ffffffffff60025e: cc int3
ffffffffff60025f: cc int3
ffffffffff600260: cc int3
ffffffffff600261: cc int3
ffffffffff600262: cc int3
ffffffffff600263: cc int3
ffffffffff600264: cc int3
ffffffffff600265: cc int3
ffffffffff600266: cc int3
ffffffffff600267: cc int3
ffffffffff600268: cc int3
ffffffffff600269: cc int3
ffffffffff60026a: cc int3
ffffffffff60026b: cc int3
ffffffffff60026c: cc int3
ffffffffff60026d: cc int3
ffffffffff60026e: cc int3
ffffffffff60026f: cc int3
ffffffffff600270: cc int3
ffffffffff600271: cc int3
ffffffffff600272: cc int3
ffffffffff600273: cc int3
ffffffffff600274: cc int3
ffffffffff600275: cc int3
ffffffffff600276: cc int3
ffffffffff600277: cc int3
ffffffffff600278: cc int3
ffffffffff600279: cc int3
ffffffffff60027a: cc int3
ffffffffff60027b: cc int3
ffffffffff60027c: cc int3
ffffffffff60027d: cc int3
ffffffffff60027e: cc int3
ffffffffff60027f: cc int3
ffffffffff600280: cc int3
ffffffffff600281: cc int3
ffffffffff600282: cc int3
ffffffffff600283: cc int3
ffffffffff600284: cc int3
ffffffffff600285: cc int3
ffffffffff600286: cc int3
ffffffffff600287: cc int3
ffffffffff600288: cc int3
ffffffffff600289: cc int3
ffffffffff60028a: cc int3
ffffffffff60028b: cc int3
ffffffffff60028c: cc int3
ffffffffff60028d: cc int3
ffffffffff60028e: cc int3
ffffffffff60028f: cc int3
ffffffffff600290: cc int3
ffffffffff600291: cc int3
ffffffffff600292: cc int3
ffffffffff600293: cc int3
ffffffffff600294: cc int3
ffffffffff600295: cc int3
ffffffffff600296: cc int3
ffffffffff600297: cc int3
ffffffffff600298: cc int3
ffffffffff600299: cc int3
ffffffffff60029a: cc int3
ffffffffff60029b: cc int3
ffffffffff60029c: cc int3
ffffffffff60029d: cc int3
ffffffffff60029e: cc int3
ffffffffff60029f: cc int3
ffffffffff6002a0: cc int3
ffffffffff6002a1: cc int3
ffffffffff6002a2: cc int3
ffffffffff6002a3: cc int3
ffffffffff6002a4: cc int3
ffffffffff6002a5: cc int3
ffffffffff6002a6: cc int3
ffffffffff6002a7: cc int3
ffffffffff6002a8: cc int3
ffffffffff6002a9: cc int3
ffffffffff6002aa: cc int3
ffffffffff6002ab: cc int3
ffffffffff6002ac: cc int3
ffffffffff6002ad: cc int3
ffffffffff6002ae: cc int3
ffffffffff6002af: cc int3
ffffffffff6002b0: cc int3
ffffffffff6002b1: cc int3
ffffffffff6002b2: cc int3
ffffffffff6002b3: cc int3
ffffffffff6002b4: cc int3
ffffffffff6002b5: cc int3
ffffffffff6002b6: cc int3
ffffffffff6002b7: cc int3
ffffffffff6002b8: cc int3
ffffffffff6002b9: cc int3
ffffffffff6002ba: cc int3
ffffffffff6002bb: cc int3
ffffffffff6002bc: cc int3
ffffffffff6002bd: cc int3
ffffffffff6002be: cc int3
ffffffffff6002bf: cc int3
ffffffffff6002c0: cc int3
ffffffffff6002c1: cc int3
ffffffffff6002c2: cc int3
ffffffffff6002c3: cc int3
ffffffffff6002c4: cc int3
ffffffffff6002c5: cc int3
ffffffffff6002c6: cc int3
ffffffffff6002c7: cc int3
ffffffffff6002c8: cc int3
ffffffffff6002c9: cc int3
ffffffffff6002ca: cc int3
ffffffffff6002cb: cc int3
ffffffffff6002cc: cc int3
ffffffffff6002cd: cc int3
ffffffffff6002ce: cc int3
ffffffffff6002cf: cc int3
ffffffffff6002d0: cc int3
ffffffffff6002d1: cc int3
ffffffffff6002d2: cc int3
ffffffffff6002d3: cc int3
ffffffffff6002d4: cc int3
ffffffffff6002d5: cc int3
ffffffffff6002d6: cc int3
ffffffffff6002d7: cc int3
ffffffffff6002d8: cc int3
ffffffffff6002d9: cc int3
ffffffffff6002da: cc int3
ffffffffff6002db: cc int3
ffffffffff6002dc: cc int3
ffffffffff6002dd: cc int3
ffffffffff6002de: cc int3
ffffffffff6002df: cc int3
ffffffffff6002e0: cc int3
ffffffffff6002e1: cc int3
ffffffffff6002e2: cc int3
ffffffffff6002e3: cc int3
ffffffffff6002e4: cc int3
ffffffffff6002e5: cc int3
ffffffffff6002e6: cc int3
ffffffffff6002e7: cc int3
ffffffffff6002e8: cc int3
ffffffffff6002e9: cc int3
ffffffffff6002ea: cc int3
ffffffffff6002eb: cc int3
ffffffffff6002ec: cc int3
ffffffffff6002ed: cc int3
ffffffffff6002ee: cc int3
ffffffffff6002ef: cc int3
ffffffffff6002f0: cc int3
ffffffffff6002f1: cc int3
ffffffffff6002f2: cc int3
ffffffffff6002f3: cc int3
ffffffffff6002f4: cc int3
ffffffffff6002f5: cc int3
ffffffffff6002f6: cc int3
ffffffffff6002f7: cc int3
ffffffffff6002f8: cc int3
ffffffffff6002f9: cc int3
ffffffffff6002fa: cc int3
ffffffffff6002fb: cc int3
ffffffffff6002fc: cc int3
ffffffffff6002fd: cc int3
ffffffffff6002fe: cc int3
ffffffffff6002ff: cc int3
ffffffffff600300: cc int3
ffffffffff600301: cc int3
ffffffffff600302: cc int3
ffffffffff600303: cc int3
ffffffffff600304: cc int3
ffffffffff600305: cc int3
ffffffffff600306: cc int3
ffffffffff600307: cc int3
ffffffffff600308: cc int3
ffffffffff600309: cc int3
ffffffffff60030a: cc int3
ffffffffff60030b: cc int3
ffffffffff60030c: cc int3
ffffffffff60030d: cc int3
ffffffffff60030e: cc int3
ffffffffff60030f: cc int3
ffffffffff600310: cc int3
ffffffffff600311: cc int3
ffffffffff600312: cc int3
ffffffffff600313: cc int3
ffffffffff600314: cc int3
ffffffffff600315: cc int3
ffffffffff600316: cc int3
ffffffffff600317: cc int3
ffffffffff600318: cc int3
ffffffffff600319: cc int3
ffffffffff60031a: cc int3
ffffffffff60031b: cc int3
ffffffffff60031c: cc int3
ffffffffff60031d: cc int3
ffffffffff60031e: cc int3
ffffffffff60031f: cc int3
ffffffffff600320: cc int3
ffffffffff600321: cc int3
ffffffffff600322: cc int3
ffffffffff600323: cc int3
ffffffffff600324: cc int3
ffffffffff600325: cc int3
ffffffffff600326: cc int3
ffffffffff600327: cc int3
ffffffffff600328: cc int3
ffffffffff600329: cc int3
ffffffffff60032a: cc int3
ffffffffff60032b: cc int3
ffffffffff60032c: cc int3
ffffffffff60032d: cc int3
ffffffffff60032e