【调试技术】用户态查看PEB和TEB
概述:用户态查看进程 PEB 和 TEB(通过windbg附加或启动调试的exe)
0x01 用户态查看 TEB 和 PEB
在双机调试的时候,可以直接使用 !PEB PID 和 !TEB TID 获取进程和线程的相关信息,在用户态这两个命令就会失效。原因就是用户态不支持大写的 !TEB 和 !PEB 命令。
在用户态调试时获取 teb 和 peb 的命令是小写的。
#获取 peb
!peb# 获取 teb
!teb
除此之外,这里提供另外一种思路。我们都知道 TEB 结构体中保存了PEB的地址,因此可以通过TEB获取PEB的相关信息。
这里以 notepad.exe 为例演示。
0x02 演示
准备步骤
- 运行 notepad.exe, Win+R 输入 notepad 回车即可。
- 运行 windbg,并附加到进程 notepad.exe 上。
开始调试
查看当前线程
使用 ~. 查看当前线程(这里其实查看哪个线程都可以,因为当前进程的 PEB 只有一个,所有的 TEB 都指向了同一个 PEB)
0:007> ~.
. 7 Id: b8f4.d5a0 Suspend: 1 Teb: 000000a3`b61d1000 UnfrozenStart: ntdll!DbgUiRemoteBreakin (00007ff9`ab83c9c0)Priority: 0 Priority class: 32 Affinity: ff
可以看到 Teb 地址为 000000 a 3 ‘ b 61 d 1000 000000a3`b61d1000 000000a3‘b61d1000
查看TEB
dt ntdll!_Teb 000000a3`b61d1000
输出如下所示,可以看到 0x060 偏移处为 _PEB:
0:007> dt ntdll!_Teb 000000a3`b61d1000+0x000 NtTib : _NT_TIB+0x038 EnvironmentPointer : (null) +0x040 ClientId : _CLIENT_ID+0x050 ActiveRpcHandle : (null) +0x058 ThreadLocalStoragePointer : (null) +0x060 ProcessEnvironmentBlock : 0x000000a3`b61b8000 _PEB+0x068 LastErrorValue : 0+0x06c CountOfOwnedCriticalSections : 0+0x070 CsrClientThread : (null) +0x078 Win32ThreadInfo : (null) +0x080 User32Reserved : [26] 0+0x0e8 UserReserved : [5] 0+0x100 WOW32Reserved : (null) +0x108 CurrentLocale : 0x804+0x10c FpSoftwareStatusRegister : 0+0x110 ReservedForDebuggerInstrumentation : [16] (null) +0x190 SystemReserved1 : [30] (null) +0x280 PlaceholderCompatibilityMode : 0 ''+0x281 PlaceholderHydrationAlwaysExplicit : 0 ''+0x282 PlaceholderReserved : [10] ""+0x28c ProxiedProcessId : 0+0x290 _ActivationStack : _ACTIVATION_CONTEXT_STACK+0x2b8 WorkingOnBehalfTicket : [8] ""+0x2c0 ExceptionCode : 0n0+0x2c4 Padding0 : [4] ""+0x2c8 ActivationContextStackPointer : 0x000000a3`b61d1290 _ACTIVATION_CONTEXT_STACK+0x2d0 InstrumentationCallbackSp : 0+0x2d8 InstrumentationCallbackPreviousPc : 0+0x2e0 InstrumentationCallbackPreviousSp : 0+0x2e8 TxFsContext : 0xfffe+0x2ec InstrumentationCallbackDisabled : 0 ''+0x2ed UnalignedLoadStoreExceptions : 0 ''+0x2ee Padding1 : [2] ""+0x2f0 GdiTebBatch : _GDI_TEB_BATCH+0x7d8 RealClientId : _CLIENT_ID+0x7e8 GdiCachedProcessHandle : (null) +0x7f0 GdiClientPID : 0+0x7f4 GdiClientTID : 0+0x7f8 GdiThreadLocalInfo : (null) +0x800 Win32ClientInfo : [62] 0+0x9f0 glDispatchTable : [233] (null) +0x1138 glReserved1 : [29] 0+0x1220 glReserved2 : (null) +0x1228 glSectionInfo : (null) +0x1230 glSection : (null) +0x1238 glTable : (null) +0x1240 glCurrentRC : (null) +0x1248 glContext : (null) +0x1250 LastStatusValue : 0+0x1254 Padding2 : [4] ""+0x1258 StaticUnicodeString : _UNICODE_STRING ""+0x1268 StaticUnicodeBuffer : [261] ""+0x1472 Padding3 : [6] ""+0x1478 DeallocationStack : 0x000000a3`b6400000 Void+0x1480 TlsSlots : [64] (null) +0x1680 TlsLinks : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]+0x1690 Vdm : (null) +0x1698 ReservedForNtRpc : (null) +0x16a0 DbgSsReserved : [2] (null) +0x16b0 HardErrorMode : 0+0x16b4 Padding4 : [4] ""+0x16b8 Instrumentation : [11] (null) +0x1710 ActivityId : _GUID {00000000-0000-0000-0000-000000000000}+0x1720 SubProcessTag : (null) +0x1728 PerflibData : (null) +0x1730 EtwTraceData : (null) +0x1738 WinSockData : (null) +0x1740 GdiBatchCount : 0+0x1744 CurrentIdealProcessor : _PROCESSOR_NUMBER+0x1744 IdealProcessorValue : 0x3030000+0x1744 ReservedPad0 : 0 ''+0x1745 ReservedPad1 : 0 ''+0x1746 ReservedPad2 : 0x3 ''+0x1747 IdealProcessor : 0x3 ''+0x1748 GuaranteedStackBytes : 0+0x174c Padding5 : [4] ""+0x1750 ReservedForPerf : (null) +0x1758 ReservedForOle : (null) +0x1760 WaitingOnLoaderLock : 0+0x1764 Padding6 : [4] ""+0x1768 SavedPriorityState : (null) +0x1770 ReservedForCodeCoverage : 0+0x1778 ThreadPoolData : (null) +0x1780 TlsExpansionSlots : (null) +0x1788 DeallocationBStore : (null) +0x1790 BStoreLimit : (null) +0x1798 MuiGeneration : 0+0x179c IsImpersonating : 0+0x17a0 NlsCache : (null) +0x17a8 pShimData : (null) +0x17b0 HeapData : 0+0x17b4 Padding7 : [4] ""+0x17b8 CurrentTransactionHandle : (null) +0x17c0 ActiveFrame : (null) +0x17c8 FlsData : (null) +0x17d0 PreferredLanguages : (null) +0x17d8 UserPrefLanguages : (null) +0x17e0 MergedPrefLanguages : (null) +0x17e8 MuiImpersonation : 0+0x17ec CrossTebFlags : 0+0x17ec SpareCrossTebBits : 0y0000000000000000 (0)+0x17ee SameTebFlags : 8+0x17ee SafeThunkCall : 0y0+0x17ee InDebugPrint : 0y0+0x17ee HasFiberData : 0y0+0x17ee SkipThreadAttach : 0y1+0x17ee WerInShipAssertCode : 0y0+0x17ee RanProcessInit : 0y0+0x17ee ClonedThread : 0y0+0x17ee SuppressDebugMsg : 0y0+0x17ee DisableUserStackWalk : 0y0+0x17ee RtlExceptionAttached : 0y0+0x17ee InitialThread : 0y0+0x17ee SessionAware : 0y0+0x17ee LoadOwner : 0y0+0x17ee LoaderWorker : 0y0+0x17ee SkipLoaderInit : 0y0+0x17ee SpareSameTebBits : 0y0+0x17f0 TxnScopeEnterCallback : (null) +0x17f8 TxnScopeExitCallback : (null) +0x1800 TxnScopeContext : (null) +0x1808 LockCount : 0+0x180c WowTebOffset : 0n0+0x1810 ResourceRetValue : (null) +0x1818 ReservedForWdf : (null) +0x1820 ReservedForCrt : 0+0x1828 EffectiveContainerId : _GUID {00000000-0000-0000-0000-000000000000}
查看PEB
dt ntdll!_PEB 0xa3b61b8000# 或者使用 dx 命令
dx -r1 ((ntdll!_PEB *)0xa3b61b8000)
输出如下所示,到此就看到了 notepad 的 PEB 了。后文补充了 PEB 结构体中 ProcessParameters 变量的分析和查看。
0:007> dt ntdll!_PEB 0xa3b61b8000+0x000 InheritedAddressSpace : 0 ''+0x001 ReadImageFileExecOptions : 0 ''+0x002 BeingDebugged : 0x1 ''+0x003 BitField : 0x84 ''+0x003 ImageUsesLargePages : 0y0+0x003 IsProtectedProcess : 0y0+0x003 IsImageDynamicallyRelocated : 0y1+0x003 SkipPatchingUser32Forwarders : 0y0+0x003 IsPackagedProcess : 0y0+0x003 IsAppContainer : 0y0+0x003 IsProtectedProcessLight : 0y0+0x003 IsLongPathAwareProcess : 0y1+0x004 Padding0 : [4] ""+0x008 Mutant : 0xffffffff`ffffffff Void+0x010 ImageBaseAddress : 0x00007ff7`7ef80000 Void+0x018 Ldr : 0x00007ff9`ab8db4c0 _PEB_LDR_DATA+0x020 ProcessParameters : 0x000001a6`50d52540 _RTL_USER_PROCESS_PARAMETERS+0x028 SubSystemData : 0x00007ff9`9f7af1d0 Void+0x030 ProcessHeap : 0x000001a6`50d50000 Void+0x038 FastPebLock : 0x00007ff9`ab8db0e0 _RTL_CRITICAL_SECTION+0x040 AtlThunkSListPtr : (null) +0x048 IFEOKey : (null) +0x050 CrossProcessFlags : 1+0x050 ProcessInJob : 0y1+0x050 ProcessInitializing : 0y0+0x050 ProcessUsingVEH : 0y0+0x050 ProcessUsingVCH : 0y0+0x050 ProcessUsingFTH : 0y0+0x050 ProcessPreviouslyThrottled : 0y0+0x050 ProcessCurrentlyThrottled : 0y0+0x050 ProcessImagesHotPatched : 0y0+0x050 ReservedBits0 : 0y000000000000000000000000 (0)+0x054 Padding1 : [4] ""+0x058 KernelCallbackTable : 0x00007ff9`a9a80070 Void+0x058 UserSharedInfoPtr : 0x00007ff9`a9a80070 Void+0x060 SystemReserved : 0+0x064 AtlThunkSListPtr32 : 0+0x068 ApiSetMap : 0x000001a6`50c80000 Void+0x070 TlsExpansionCounter : 0+0x074 Padding2 : [4] ""+0x078 TlsBitmap : 0x00007ff9`ab8db440 Void+0x080 TlsBitmapBits : [2] 0xffffffff+0x088 ReadOnlySharedMemoryBase : 0x00007df4`3dce0000 Void+0x090 SharedData : (null) +0x098 ReadOnlyStaticServerData : 0x00007df4`3dce0750 -> (null) +0x0a0 AnsiCodePageData : 0x00007df5`3fe30000 Void+0x0a8 OemCodePageData : 0x00007df5`3fe30000 Void+0x0b0 UnicodeCaseTableData : 0x00007df5`3fe60028 Void+0x0b8 NumberOfProcessors : 8+0x0bc NtGlobalFlag : 0+0x0c0 CriticalSectionTimeout : _LARGE_INTEGER 0xffffe86d`079b8000+0x0c8 HeapSegmentReserve : 0x100000+0x0d0 HeapSegmentCommit : 0x2000+0x0d8 HeapDeCommitTotalFreeThreshold : 0x10000+0x0e0 HeapDeCommitFreeBlockThreshold : 0x1000+0x0e8 NumberOfHeaps : 6+0x0ec MaximumNumberOfHeaps : 0x10+0x0f0 ProcessHeaps : 0x00007ff9`ab8d9d40 -> 0x000001a6`50d50000 Void+0x0f8 GdiSharedHandleTable : 0x000001a6`51120000 Void+0x100 ProcessStarterHelper : (null) +0x108 GdiDCAttributeList : 0x14+0x10c Padding3 : [4] ""+0x110 LoaderLock : 0x00007ff9`ab8d55c8 _RTL_CRITICAL_SECTION+0x118 OSMajorVersion : 0xa+0x11c OSMinorVersion : 0+0x120 OSBuildNumber : 0x4a65+0x122 OSCSDVersion : 0+0x124 OSPlatformId : 2+0x128 ImageSubsystem : 2+0x12c ImageSubsystemMajorVersion : 0xa+0x130 ImageSubsystemMinorVersion : 0+0x134 Padding4 : [4] ""+0x138 ActiveProcessAffinityMask : 0xff+0x140 GdiHandleBuffer : [60] 0+0x230 PostProcessInitRoutine : (null) +0x238 TlsExpansionBitmap : 0x00007ff9`ab8db420 Void+0x240 TlsExpansionBitmapBits : [32] 1+0x2c0 SessionId : 1+0x2c4 Padding5 : [4] ""+0x2c8 AppCompatFlags : _ULARGE_INTEGER 0x0+0x2d0 AppCompatFlagsUser : _ULARGE_INTEGER 0x0+0x2d8 pShimData : 0x000001a6`50cc0000 Void+0x2e0 AppCompatInfo : (null) +0x2e8 CSDVersion : _UNICODE_STRING ""+0x2f8 ActivationContextData : 0x000001a6`50cb0000 _ACTIVATION_CONTEXT_DATA+0x300 ProcessAssemblyStorageMap : 0x000001a6`50d5b5c0 _ASSEMBLY_STORAGE_MAP+0x308 SystemDefaultActivationContextData : 0x000001a6`50ca0000 _ACTIVATION_CONTEXT_DATA+0x310 SystemAssemblyStorageMap : (null) +0x318 MinimumStackCommit : 0+0x320 SparePointers : [4] (null) +0x340 SpareUlongs : [5] 0+0x358 WerRegistrationData : 0x000001a6`52e00000 Void+0x360 WerShipAssertPtr : (null) +0x368 pUnused : (null) +0x370 pImageHeaderHash : (null) +0x378 TracingFlags : 0+0x378 HeapTracingEnabled : 0y0+0x378 CritSecTracingEnabled : 0y0+0x378 LibLoaderTracingEnabled : 0y0+0x378 SpareTracingBits : 0y00000000000000000000000000000 (0)+0x37c Padding6 : [4] ""+0x380 CsrServerReadOnlySharedMemoryBase : 0x00007df4`66cb0000+0x388 TppWorkerpListLock : 0+0x390 TppWorkerpList : _LIST_ENTRY [ 0x000000a3`b5f0f860 - 0x000000a3`b63ffb70 ]+0x3a0 WaitOnAddressHashTable : [128] (null) +0x7a0 TelemetryCoverageHeader : (null) +0x7a8 CloudFileFlags : 0xe0+0x7ac CloudFileDiagFlags : 0+0x7b0 PlaceholderCompatibilityMode : 2 ''+0x7b1 PlaceholderCompatibilityModeReserved : [7] ""+0x7b8 LeapSecondData : 0x00007df5`3fe20000 _LEAP_SECOND_DATA+0x7c0 LeapSecondFlags : 0+0x7c0 SixtySecondEnabled : 0y0+0x7c0 Reserved : 0y0000000000000000000000000000000 (0)+0x7c4 NtGlobalFlag2 : 0
查看 ProcessParameters
为了进一步了解和查看,这里再查看 ProcessParameters 的变量。
查看 PEB 的输出可以看到 ProcessParameters 的结构体名为 _RTL_USER_PROCESS_PARAMETERS,该结构体保存了进程很多基础信息,如环境变量、命令行等等。查看当前 ProcessParameters
dx -r1 ((ntdll!_RTL_USER_PROCESS_PARAMETERS *)0x1a650d52540)# 或者
dt _RTL_USER_PROCESS_PARAMETERS 0x1a650d52540
输出如下所示:
0:007> dt _RTL_USER_PROCESS_PARAMETERS 0x1a650d52540
ntdll!_RTL_USER_PROCESS_PARAMETERS+0x000 MaximumLength : 0x78a+0x004 Length : 0x78a+0x008 Flags : 0x6001+0x00c DebugFlags : 0+0x010 ConsoleHandle : (null) +0x018 ConsoleFlags : 0+0x020 StandardInput : (null) +0x028 StandardOutput : (null) +0x030 StandardError : (null) +0x038 CurrentDirectory : _CURDIR+0x050 DllPath : _UNICODE_STRING ""+0x060 ImagePathName : _UNICODE_STRING "C:\WINDOWS\system32\notepad.exe"+0x070 CommandLine : _UNICODE_STRING ""C:\WINDOWS\system32\notepad.exe" "+0x080 Environment : 0x000001a6`50d50fe0 Void+0x088 StartingX : 0+0x08c StartingY : 0+0x090 CountX : 0+0x094 CountY : 0+0x098 CountCharsX : 0+0x09c CountCharsY : 0+0x0a0 FillAttribute : 0+0x0a4 WindowFlags : 0x801+0x0a8 ShowWindowFlags : 1+0x0b0 WindowTitle : _UNICODE_STRING "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Notepad.lnk"+0x0c0 DesktopInfo : _UNICODE_STRING "Winsta0\Default"+0x0d0 ShellInfo : _UNICODE_STRING ""+0x0e0 RuntimeData : _UNICODE_STRING ""+0x0f0 CurrentDirectores : [32] _RTL_DRIVE_LETTER_CURDIR+0x3f0 EnvironmentSize : 0x154e+0x3f8 EnvironmentVersion : 3+0x400 PackageDependencyData : (null) +0x408 ProcessGroupId : 0x3ec+0x40c LoaderThreads : 0+0x410 RedirectionDllName : _UNICODE_STRING ""+0x420 HeapPartitionName : _UNICODE_STRING ""+0x430 DefaultThreadpoolCpuSetMasks : (null) +0x438 DefaultThreadpoolCpuSetMaskCount : 0+0x43c DefaultThreadpoolThreadMaximum : 0
到这一步,基本上进程的详细信息就都可以看到了。如果是 windbg preview 版本,点几下就能看到一些信息,但是 Environment 环境变量是一个指针,如果需要查看,还是需要输入命令才行。
查看 Environment
在 _RTL_USER_PROCESS_PARAMETERS 结构中有三个成员与 Environment 相关
# 指向环境变量的指针
+0x080 Environment : 0x000001a6`50d50fe0 Void# 环境变量的大小
+0x3f0 EnvironmentSize : 0x154e# 环境变量的版本
+0x3f8 EnvironmentVersion : 3
通过环境变量指针和大小我们就可以看到环境变量的内容了
db 0x000001a6`50d50fe0 l 0x154e
相关文章:
【调试技术】用户态查看PEB和TEB
概述:用户态查看进程 PEB 和 TEB(通过windbg附加或启动调试的exe) 0x01 用户态查看 TEB 和 PEB 在双机调试的时候,可以直接使用 !PEB PID 和 !TEB TID 获取进程和线程的相关信息,在用户态这两个命令就会失效。原因就是用户态不支持大写的 !T…...
如何搭建一个Spring MVC和Vue3的应用程序
要搭建一个基于Spring MVC框架和Vue3框架的前端应用程序,可以按照以下步骤进行: 创建Java项目并添加Spring MVC依赖 使用Maven或Gradle等构建工具创建一个Java项目,并在项目的pom.xml或build.gradle文件中添加Spring MVC依赖。例如…...
CSS3设计动画样式
CSS3动画包括过渡动画和关键帧动画,它们主要通过改变CSS属性值来模拟实现。我将详细介绍Transform、Transitions和Animations 3大功能模块,其中Transform实现对网页对象的变形操作,Transitions实现CSS属性过渡变化,Animations实现…...
AtCoder abc 144
D - Water Bottle x先除以a,得到面积。体积和面积是等同考虑的。 分两种情况,一种是水比一半面积少,一种是水比一半面积多。 # -*- coding: utf-8 -*- # time : 2023/6/2 13:30 # author : yhdutongwoo.cn # desc : # file : …...
【开题报告】基于SpringBoot的医美在线预约系统的设计与实现
1.研究背景 医美行业是指结合医学和美容技术,为人们提供外貌改善和整容手术等服务的领域。随着社会经济的发展和人们审美观念的变化,医美行业得到了快速的发展,并受到越来越多人的关注和需求。 传统的医美预约方式主要依赖于电话预约或现场…...
AutoGen agent使用;调用本地LLM
参考: https://microsoft.github.io/autogen 安装: pip install pyautogen 代码 本地LLM部署可以用fastchat、vllm等框架部署openai接口: from autogen import AssistantAgent, UserProxyAgent, oai ## 调用本地模型对外的openai接口 conf…...
Docker安装matomo
Docker安装matomo 文章目录 Docker安装matomo1.安装Docker2.matomo安装 1.安装Docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.matomo安装 #拉取matomo镜像 docker pull matomo#启动matomo容器 docker run -d --name matomo -p 8093:80 -v /do…...
DSP开发例程(4): logbuf_print_to_uart
目录 DSP开发例程: logbuf_print_to_uart新建工程源码编辑app.cfgos.cmain.c 调试说明 DSP开发例程: logbuf_print_to_uart SYS/BIOS 提供了 xdc.runtime.Log, xdc.runtime.LoggerBuf 和 xdc.runtime.LoggerSys 这几个模块用于日志记录. 日志信息在 应用程序调试和状态监控中非…...
计算机毕业设计选题推荐-超市售货微信小程序/安卓APP-项目实战
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
Azure 机器学习 - 使用 Visual Studio Code训练图像分类 TensorFlow 模型
了解如何使用 TensorFlow 和 Azure 机器学习 Visual Studio Code 扩展训练图像分类模型来识别手写数字。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员…...
Vue 创建自定义 ref 函数
Vue 创建自定义 ref 函数 customRef customRef 用于:创建一个自定义的 ref 函数,并对其依赖项跟踪和更新触发进行显式控制。 使用 customRef 创建自定义 ref 函数 // 创建自定义 ref 函数 function myRef(value) {return customRef((track, trigger) &…...
[2016-2018]phpstudy的exp制作
[2016-2018]phpstudy的exp制作 用python的requests模块进行编写 修改请求数据包进行远程代码执行 import requests import base64 def remove_code_execute():try:url input("请输入要测试的网址:")cmd input("想要执行的命令:")cmd f"system({…...
服务器数据恢复—Zfs文件系统下文件被误删除的如何恢复数据?
服务器故障: 一台zfs文件系统服务器,管理员误操作删除服务器上的数据。 服务器数据恢复过程: 1、将故障服务器所有磁盘编号后取出,硬件工程师检测所有硬盘后没有发现有磁盘存在硬件故障。以只读方式将全部磁盘做扇区级别的镜像备…...
关于嵌入式rtthread系统与单片机芯片
简介 我估计已经有很久没更新了,近一年都在某个国企里工作,我做的就是嵌入式工程师的岗位,最近才刚刚退出来,想来说说自己的工作使用的软件和系统。 本身进公司的时候,其实做的就是写单片机的板子的程序的工作&#x…...
在Ubuntu上安装Redis并学习使用get、set和keys命令
目录 安装Redis切换到root用户搜索redis相关软件包安装redis修改配置文件重启服务器使用redis客户端连接服务器 get与set命令keys 安装Redis 我们在Ubuntu20.04上进行Redis的安装 切换到root用户 使用su命令: 在终端中,输入su并按回车键。然后输入roo…...
Ubuntu更换镜像源
Ubuntu更换镜像源 镜像源设置文件镜像源设置focal版本镜像源设置bionic版本镜像源设置 更新源问题 镜像源设置文件 备份镜像源设置文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak编辑镜像源设置文件 sudo gedit /etc/apt/sources.list镜像源设置 Ubuntu有不…...
Sulfo-CY5 NHS荧光染料的生物应用2230212-27-6星戈瑞
Sulfo-CY5 NHS ester是一种用于生物学和生物医学研究中的荧光染料,它在生物应用方面具有许多重要用途,包括但不限于以下几个方面: **生物标记:**Sulfo-CY5 NHS ester可以与生物分子(如抗体、蛋白质、核酸等)…...
Python Django 之模板继承详解(extends)
文章目录 1 概述1.1 目的1.2 标签:block、extends1.3 目录结构 2 templates 目录2.1 base.html:父页面2.2 login.html:子页面 3 其它代码3.1 settings.py3.2 views.py3.3 urls.py 1 概述 1.1 目的 模板继承 和 类继承 的目的是一样的&#…...
混合式ANC主动降噪耳机系统设计(含C源代码)
混合式ANC主动降噪耳机系统设计(含C源代码) 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙音频,DSP音频项目核心开发资料, 1 FF信号链路与FB 链路算法处理上一样 X(n)为噪声输…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
