当前位置:首页>Linux>Linux Kernel/optee/ATF等操作系统的异常向量表的速查

Linux Kernel/optee/ATF等操作系统的异常向量表的速查

  • 2026-04-16 20:45:18
Linux Kernel/optee/ATF等操作系统的异常向量表的速查
点击左上方蓝色“Arm精选”,选择“设为星标

说明:在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 5.14, optee3.14, TF-A 2.4, armv8.8

目录

    • 硬件:armv8-aarch64\arch以及armv7的向量表和基地址寄存器介绍

      • 1、ARMV8 aarch64的异常向量表介绍

      • 2、ARMV8 aarch32的异常向量表介绍

      • 3、ARMV7 4的异常向量表介绍

      • 4、ARMV8 aarch64的向量表基地址

      • 5、ARMV8 aarch的向量表基地址

      • 6、ARMV7的向量表基地址

    • 软件:各个系统的异常向量表(Linux, optee, ATF ...32位/64位)

      • 1、Linux Kernel 中arm64定义的向量表

      • 2、Linux Kernel 中arm定义的向量表

      • 3、optee中arm64定义的异常向量表

      • 4、optee中arm定义的异常向量表

      • 5、在ATF中arm64异常向量表的实现定义

      • 6、、在ATF中arm64异常向量表的实现定义

    • 软件:各个系统的向量表基地址的设置(Linux, optee, ATF ...32位/64位)

      • 1、linux kernel的arm64下设置向量表基地址VBAR

      • 2、linux kernel的arm32下设置向量表基地址VBAR

      • 3、optee中arm64设置向量表基地址VBAR_EL1

      • 4、optee中arm设置向量表基地址VBAR_EL1

  • 软件中定义的向量表,是否和ARM文档中的向量offset一致

  • 向量表的基地址是否写入到了VBAR寄存器

硬件:armv8-aarch64\arch以及armv7的向量表和基地址寄存器介绍

1、ARMV8 aarch64的异常向量表介绍

我们可以看出,实际上有四组表,每组表有四个异常入口,分别对应同步异常,IRQ,FIQ和serror。

  • 如果发生异常后并没有exception level切换,并且发生异常之前使用的栈指针是SP_EL0,那么使用第一组异常向量表。

  • 如果发生异常后并没有exception level切换,并且发生异常之前使用的栈指针是SP_EL1/2/3,那么使用第二组异常向量表。

  • 如果发生异常导致了exception level切换,并且发生异常之前的exceptionlevel运行在AARCH64模式,那么使用第三组异常向量表。

  • 如果发生异常导致了exception level切换,并且发生异常之前的exceptionlevel运行在AARCH32模式,那么使用第四组异常向量表。

另外我们还可以看到的一点是,每一个异常入口不再仅仅占用4bytes的空间,而是占用0x80 bytes空间,也就是说,每一个异常入口可以放置多条指令,而不仅仅是一条跳转指令

2、ARMV8 aarch32的异常向量表介绍

3、ARMV7 4的异常向量表介绍

4、ARMV8 aarch64的向量表基地址

VBAR(Vector Base Address Register)的寄存器有:

(如果是aarch64)

  • VBAR_EL1

  • VBAR_EL2

  • VBAR_EL3

在开启MMU的系统,VBAR中写入的是虚拟地址,以VBAR_EL1为例,介绍下field的使用:

Bits [10:0] reserved

Bits [11:63]:如果不支持ARMv8.2-LVA(Large VA support:使用64kb页面时,有效虚拟地址达到52bit)(1)、如果支持tagged addresses, bits [55:48]必需都是一样的(2)、如果不支持tagged addresses , bits [63:48] 必需都是一样的如果支持ARMv8.2-LVA(Large VA support:使用64kb页面时,有效虚拟地址达到52bit)(1)、如果支持tagged addresses , bits [55:52] 必需都是一样的(2)、如果不支持tagged addresses , bits [63:52] 必需都是一样的

该寄存器的低11bit是reserve的,11~63表示了Vector Base Address,因此这里的异常向量表基地址是2K对齐的

5、ARMV8 aarch的向量表基地址

如果是aarch32

  • VBAR

  • HVBAR

  • MVBAR

6、ARMV7的向量表基地址

TODO

软件:各个系统的异常向量表(Linux, optee, ATF …32位/64位)

1、Linux Kernel 中arm64定义的向量表

(linux/arch/arm64/kernel/entry.S)/* * Exception vectors. */.pushsection ".entry.text","ax".align	11SYM_CODE_START(vectors)	kernel_ventry	1, sync_invalid			// Synchronous EL1t	kernel_ventry	1, irq_invalid			// IRQ EL1t	kernel_ventry	1, fiq_invalid			// FIQ EL1t	kernel_ventry	1, error_invalid		// Error EL1t	kernel_ventry	1, sync				// Synchronous EL1h	kernel_ventry	1, irq				// IRQ EL1h	kernel_ventry	1, fiq				// FIQ EL1h	kernel_ventry	1, error			// Error EL1h	kernel_ventry	0, sync				// Synchronous 64-bit EL0	kernel_ventry	0, irq				// IRQ 64-bit EL0	kernel_ventry	0, fiq				// FIQ 64-bit EL0	kernel_ventry	0, error			// Error 64-bit EL0#ifdefCONFIG_COMPAT	kernel_ventry	0, sync_compat,32// Synchronous 32-bit EL0	kernel_ventry	0, irq_compat,32// IRQ 32-bit EL0	kernel_ventry	0, fiq_compat,32// FIQ 32-bit EL0	kernel_ventry	0, error_compat,32// Error 32-bit EL0#else	kernel_ventry	0, sync_invalid,32// Synchronous 32-bit EL0	kernel_ventry	0, irq_invalid,32// IRQ 32-bit EL0	kernel_ventry	0, fiq_invalid,32// FIQ 32-bit EL0	kcernel_ventry	0, error_invalid,32// Error 32-bit EL0#endifSYM_CODE_END(vectors)

注意.align=7,说明该段代码是以2^7=128字节对其的,这和向量表中每一个offset的大小是一致的代码看似非常复杂,其实最终跳转到了b el\()\el\()_\label, 翻译一下,其实就是跳转到了如下这样的函数中

el1_sync_invalid	el1_irq_invalid	el1_fiq_invalid	el1_error_invalidel1_sync			el1_irq			el1_fiq			el1_error		el0_sync			el0_irq			el0_fiq			el0_error	

2、Linux Kernel 中arm定义的向量表

.section .stubs,"ax",%progbits__stubs_start:	@ This must be the first word.word	vector_swi.section .vectors,"ax",%progbits__vectors_start:W(b)	vector_rstW(b)	vector_undW(ldr)	pc, __vectors_start +0x1000W(b)	vector_pabtW(b)	vector_dabtW(b)	vector_addrexcptnW(b)	vector_irqW(b)	vector_fiq

3、optee中arm64定义的异常向量表

(core/arch/arm/kernel/thread_a64.S).section .text.thread_excp_vect.align	11, INV_INSNFUNC thread_excp_vect ,:/* -----------------------------------------------------	 * EL1 with SP0 : 0x0 - 0x180	 * -----------------------------------------------------	 */.align	7, INV_INSNel1_sync_sp0:	store_xregs sp, THREAD_CORE_LOCAL_X0,0,3	b	el1_sync_abort	check_vector_size el1_sync_sp0.align	7, INV_INSNel1_irq_sp0:	store_xregs sp, THREAD_CORE_LOCAL_X0,0,3	b	elx_irq	check_vector_size el1_irq_sp0.align	7, INV_INSNel1_fiq_sp0:	store_xregs sp, THREAD_CORE_LOCAL_X0,0,3	b	elx_fiq	check_vector_size el1_fiq_sp0.align	7, INV_INSNel1_serror_sp0:	b	el1_serror_sp0	check_vector_size el1_serror_sp0/* -----------------------------------------------------	 * Current EL with SP1: 0x200 - 0x380	 * -----------------------------------------------------	 */.align	7, INV_INSNel1_sync_sp1:	b	el1_sync_sp1	check_vector_size el1_sync_sp1.align	7, INV_INSNel1_irq_sp1:	b	el1_irq_sp1	check_vector_size el1_irq_sp1.align	7, INV_INSNel1_fiq_sp1:	b	el1_fiq_sp1	check_vector_size el1_fiq_sp1.align	7, INV_INSNel1_serror_sp1:	b	el1_serror_sp1	check_vector_size el1_serror_sp1/* -----------------------------------------------------	 * Lower EL using AArch64 : 0x400 - 0x580	 * -----------------------------------------------------	 */.align	7, INV_INSNel0_sync_a64:	restore_mapping	mrs	x2, esr_el1	mrs	x3, sp_el0	lsr	x2, x2, #ESR_EC_SHIFT	cmp	x2, #ESR_EC_AARCH64_SVC	b.eq	el0_svc	b	el0_sync_abort	check_vector_size el0_sync_a64.align	7, INV_INSNel0_irq_a64:	restore_mapping	b	elx_irq	check_vector_size el0_irq_a64.align	7, INV_INSNel0_fiq_a64:	restore_mapping	b	elx_fiq	check_vector_size el0_fiq_a64.align	7, INV_INSNel0_serror_a64:	b   	el0_serror_a64	check_vector_size el0_serror_a64/* -----------------------------------------------------	 * Lower EL using AArch32 : 0x0 - 0x180	 * -----------------------------------------------------	 */.align	7, INV_INSNel0_sync_a32:	restore_mapping	mrs	x2, esr_el1	mrs	x3, sp_el0	lsr	x2, x2, #ESR_EC_SHIFT	cmp	x2, #ESR_EC_AARCH32_SVC	b.eq	el0_svc	b	el0_sync_abort	check_vector_size el0_sync_a32.align	7, INV_INSNel0_irq_a32:	restore_mapping	b	elx_irq	check_vector_size el0_irq_a32.align	7, INV_INSNel0_fiq_a32:	restore_mapping	b	elx_fiq	check_vector_size el0_fiq_a32.align	7, INV_INSNel0_serror_a32:	b	el0_serror_a32	check_vector_size el0_serror_a32

align 7,对齐方式为7,也就是0x80对齐,恰好符合armv7-aarch64中文档中的向量表的offset偏移

4、optee中arm定义的异常向量表

(core/arch/arm/kernel/thread_a32.S).section .text.thread_excp_vect.align	5FUNC thread_excp_vect ,:UNWIND(.fnstart)UNWIND(.cantunwind)	b	./* Reset			*/	b	thread_und_handler	/* Undefined instruction	*/	b	thread_svc_handler	/* System call			*/	b	thread_pabort_handler	/* Prefetch abort		*/	b	thread_dabort_handler	/* Data abort			*/	b	./* Reserved			*/	b	thread_irq_handler	/* IRQ				*/	b	thread_fiq_handler	/* FIQ				*/

一条指令占4个字节,所以这里也是和aarch32的异常向量表的offset一一对应的

5、在ATF中arm64异常向量表的实现定义

在ATF的代码中,在不同的阶段有着不同的异常向量表:

  • 在bl1阶段使用bl1_exceptions

  • 在bl2阶段使用bl2_entrypoint

  • 在bl31及其之后使用runtime_exceptions

func bl1_entrypoint......	el3_entrypoint_common					\		_set_endian=1					\		_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS	\		_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU	\		_init_memory=1					\		_init_c_runtime=1				\		_exception_vectors=bl1_exceptionsfunc bl2_entrypoint	el3_entrypoint_common					\		_set_endian=0					\		_warm_boot_mailbox=0				\		_secondary_cold_boot=0				\		_secondary_cpu =0				\		_init_memory=0					\		_init_c_runtime=1				\		_exception_vectors=bl2_vectorfunc bl31_entrypoint......	el3_entrypoint_common					\		_set_endian=0					\		_warm_boot_mailbox=0				\		_secondary_cold_boot=0				\		_init_memory=0					\		_init_c_runtime=1				\		_exception_vectors=runtime_exceptions

我们常说的ATF中的向量表,其实就是bl31之后使用runtime_exceptions向量表,下面重点介绍下

(注意 : 带unhandled的都是未实现的)

  • 用于处理EL0产生异常时的entire(对应第一行向量表)

vector_entry sync_exception_sp_el0b report_unhandled_exceptioncheck_vector_size sync_exception_sp_el0vector_entry irq_sp_el0b report_unhandled_interruptcheck_vector_size irq_sp_el0vector_entry fiq_sp_el0b report_unhandled_interruptcheck_vector_size fiq_sp_el0vector_entry serror_sp_el0b report_unhandled_exceptioncheck_vector_size serror_sp_el0
  • 用于处理当前ELx产生异常时的entire(对应第二行向量表)

vector_entry sync_exception_sp_elxb report_unhandled_exceptioncheck_vector_size sync_exception_sp_elxvector_entry irq_sp_elxb report_unhandled_interruptcheck_vector_size irq_sp_elxvector_entry fiq_sp_elxb report_unhandled_interruptcheck_vector_size fiq_sp_elxvector_entry serror_sp_elxb report_unhandled_exceptioncheck_vector_size serror_sp_elx
  • 用于处理AArch64指令产生的异常,且发生了EL的迁移的entire(对应第三行向量表)

vector_entry sync_exception_aarch64handle_sync_exceptioncheck_vector_size sync_exception_aarch64vector_entry irq_aarch64handle_interrupt_exception irq_aarch64check_vector_size irq_aarch64vector_entry fiq_aarch64handle_interrupt_exception fiq_aarch64check_vector_size fiq_aarch64vector_entry serror_aarch64b report_unhandled_exceptioncheck_vector_size serror_aarch64
  • 用于处理AArch32指令产生的异常,且发生了EL的迁移的entire(对应第四行向量表)

vector_entry sync_exception_aarch32handle_sync_exceptioncheck_vector_size sync_exception_aarch32vector_entry irq_aarch32handle_interrupt_exception irq_aarch32check_vector_size irq_aarch32vector_entry fiq_aarch32handle_interrupt_exception fiq_aarch32check_vector_size fiq_aarch32vector_entry serror_aarch32b report_unhandled_exceptioncheck_vector_size serror_aarch32

6、、在ATF中arm64异常向量表的实现定义

TODO

软件:各个系统的向量表基地址的设置(Linux, optee, ATF …32位/64位)

1、linux kernel的arm64下设置向量表基地址VBAR

在__primary_switched将vectors写入到了VBAR_EL1

__primary_switched:	adrp	x4, init_thread_union	add	sp, x4, #THREAD_SIZE	adr_l	x5, init_task	msr	sp_el0, x5			// Save thread_info	adr_l	x8, vectors			// load VBAR_EL1 with virtual	msr	vbar_el1, x8			// vector table address	isb	stp	xzr, x30,[sp, #-16]!	mov	x29, sp	str_l	x21, __fdt_pointer, x5		// Save FDT pointer..	b	start_kernelENDPROC(__primary_switched)

2、linux kernel的arm32下设置向量表基地址VBAR

Linux Kernel的arm的异常向量表定义在__vectors_start

在vmlinux.lds.S描述了__vectors_start的起始位置,从0xffff0000开始**

(kernel-4.14/arch/arm/kernel/vmlinux.lds.S)__vectors_start =.;.vectors 0xffff0000:AT(__vectors_start){*(.vectors)}.= __vectors_start +SIZEOF(.vectors);__vectors_end =.;__stubs_start =.;.stubs ADDR(.vectors)+0x1000:AT(__stubs_start){*(.stubs)}.= __stubs_start +SIZEOF(.stubs);__stubs_end =.;

在nommu.c中,setup_vectors_base函数通过操作cp15协处理器来写入VBAR.

(kernel-4.14/arch/arm/mm/nommu.c)staticunsignedlong __init setup_vectors_base(void){unsignedlong reg =get_cr();set_cr(reg | CR_V);//其实就是将CR_V写入到了cp15, 也就是写入到了VBAR寄存器.return0xffff0000;}
staticinlinevoidset_cr(unsignedlong val){asmvolatile("mcr p15, 0, %0, c1, c0, 0	@ set CR"::"r"(val):"cc");isb();}

而CR_V的定义在cp15.h中,恰好就是0xffff0000(也就是最地址处,空出64KB的地方,给vector使用)

(kernel-4.14/arch/arm/include/asm/cp15.h)#defineCR_M(1<<0)/* MMU enable				*/#defineCR_A(1<<1)/* Alignment abort enable		*/#defineCR_C(1<<2)/* Dcache enable			*/#defineCR_W(1<<3)/* Write buffer enable			*/#defineCR_P(1<<4)/* 32-bit exception handler		*/#defineCR_D(1<<5)/* 32-bit data address range		*/#defineCR_L(1<<6)/* Implementation defined		*/#defineCR_B(1<<7)/* Big endian				*/#defineCR_S(1<<8)/* System MMU protection		*/#defineCR_R(1<<9)/* ROM MMU protection			*/#defineCR_F(1<<10)/* Implementation defined		*/#defineCR_Z(1<<11)/* Implementation defined		*/#defineCR_I(1<<12)/* Icache enable			*/#defineCR_V(1<<13)/* Vectors relocated to 0xffff0000	*/#defineCR_RR(1<<14)/* Round Robin cache replacement	*/#defineCR_L4(1<<15)/* LDR pc can set T bit			*/#defineCR_DT(1<<16)

setup_vectors_base是在开机的时候调用的

setup_arch ----> arm_memblock_init ----> arm_mm_memblock_reserve  ---> setup_vectors_base

3、optee中arm64设置向量表基地址VBAR_EL1

get_excp_vect()函数获取到thread_a64.S中定义的向量表thread_excp_vect地址

(core/arch/arm/kernel/thread.c)staticvaddr_tget_excp_vect(void){#ifdefCFG_CORE_WORKAROUND_SPECTRE_BP_SECuint32_t midr =read_midr();if(get_midr_implementer(midr)!= MIDR_IMPLEMENTER_ARM)return(vaddr_t)thread_excp_vect;switch(get_midr_primary_part(midr)){#ifdefARM32case CORTEX_A8_PART_NUM:case CORTEX_A9_PART_NUM:case CORTEX_A17_PART_NUM:#endifcase CORTEX_A57_PART_NUM:case CORTEX_A72_PART_NUM:case CORTEX_A73_PART_NUM:case CORTEX_A75_PART_NUM:returnselect_vector((vaddr_t)thread_excp_vect_workaround);#ifdefARM32case CORTEX_A15_PART_NUM:returnselect_vector((vaddr_t)thread_excp_vect_workaround_a15);#endifdefault:return(vaddr_t)thread_excp_vect;}#endif/*CFG_CORE_WORKAROUND_SPECTRE_BP_SEC*/return(vaddr_t)thread_excp_vect;}

在thread_init_per_cpu()时,将向量表基地址写入到VBAR_EL1

voidthread_init_per_cpu(void){size_t pos =get_core_pos();structthread_core_local*=thread_get_core_local();init_sec_mon(pos);set_tmp_stack(l,GET_STACK(stack_tmp[pos])- STACK_TMP_OFFS);set_abt_stack(l,GET_STACK(stack_abt[pos]));thread_init_vbar(get_excp_vect());}

thread_init_vbar函数完成将基地址写入VBAR_EL1(将参数1写入到VBAR_EL1)

(core/arch/arm/kernel/thread_a64.S)FUNC thread_init_vbar ,:	msr	vbar_el1, x0   	retEND_FUNC thread_init_vbar

4、optee中arm设置向量表基地址VBAR_EL1

其流程同aarch64的流程相同,都是thread_init_per_cpu()---->thread_init_vbar ()

(core/arch/arm/kernel/thread_a32.S)FUNC thread_init_vbar ,:UNWIND(.fnstart)/* Set vector (VBAR) */	write_vbar r0	bx	lrUNWIND(.fnend)END_FUNC thread_init_vbar
  • 如需进群可加我微信邀请进群交流:sami01_2023

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-17 06:58:44 HTTP/2.0 GET : https://f.mffb.com.cn/a/485433.html
  2. 运行时间 : 0.171132s [ 吞吐率:5.84req/s ] 内存消耗:4,782.20kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=d44cc05c01801428b4a4bb3e17bd4faf
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001235s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001721s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000748s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000695s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001331s ]
  6. SELECT * FROM `set` [ RunTime:0.000607s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001538s ]
  8. SELECT * FROM `article` WHERE `id` = 485433 LIMIT 1 [ RunTime:0.005046s ]
  9. UPDATE `article` SET `lasttime` = 1776380324 WHERE `id` = 485433 [ RunTime:0.016158s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.001276s ]
  11. SELECT * FROM `article` WHERE `id` < 485433 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.003005s ]
  12. SELECT * FROM `article` WHERE `id` > 485433 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.004065s ]
  13. SELECT * FROM `article` WHERE `id` < 485433 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.009479s ]
  14. SELECT * FROM `article` WHERE `id` < 485433 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003954s ]
  15. SELECT * FROM `article` WHERE `id` < 485433 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.008986s ]
0.177332s