Tutorial 5: Section Table

RAG系统生产落地:检索质量、延迟控制与幻觉抑制实战指南 RAG(检索增强生成)是一种将外部知识库与大语言模型协同工作的关键技术,其核心原理在于通过向量检索获取相关上下文,再引导LLM生成准确、可溯源的答案。技术价值体现在突破模型固有知识边界、降低幻觉风险、支持动态知识更新。典型应用场景包括金融合规问答、法律条款检索、医疗指南辅助和企业知识管理。然而,从本地Demo到高可用生产环境,关键挑战集中于检索质量不稳定、端到端延迟超标、领域适配不足引发的语义坍塌,以及缺乏可审计的事实溯源机制。本文聚焦真实业务中反复验证的工程实践,深入解析chunk策略失效、embeddi 阅读详情

Download the example.

Theory:

Up to this tutorial, we learned about the DOS header, the PE header. What remains is the section table. A section table is actually an array of structure immediately following the PE header. The number of the array members is determined by NumberOfSections field in the file header (IMAGE_FILE_HEADER) structure. The structure is called IMAGE_SECTION_HEADER.

IMAGE_SIZEOF_SHORT_NAME equ 8

IMAGE_SECTION_HEADER STRUCT
   Name1 db IMAGE_SIZEOF_SHORT_NAME dup(?)
   union Misc
      PhysicalAddress dd ?
      VirtualSize dd ?
   ends
   VirtualAddress dd ?
   SizeOfRawData dd ?
   PointerToRawData dd ?
   PointerToRelocations dd ?
   PointerToLinenumbers dd ?
   NumberOfRelocations dw ?
   NumberOfLinenumbers dw ?
   Characteristics dd ?
IMAGE_SECTION_HEADER ENDS

Again, not all members are useful. I'll describe only the ones that are really important.

FieldMeanings
Name1Actually the name of this field is "name" but the word "name" is an MASM keyword so we have to use "Name1" instead. This member contains the name of the section. Note that the maximum length is 8 bytes. The name is just a label, nothing more. You can use any name or even leave this field blank. Note that there is no mention of the terminating null. The name is not an ASCIIZ string so don't expect it to be terminated with a null.
VirtualAddressThe RVA of the section. The PE loader examines and uses the value in this field when it's mapping the section into memory. Thus if the value in this field is 1000h and the PE file is loaded at 400000h, the section will be loaded at 401000h.
SizeOfRawDataThe size of the section's data rounded up to the next multiple of file alignment. The PE loader examines the value in this field so it knows how many bytes in the section it should map into memory.
PointerToRawDataThe file offset of the beginning of the section. The PE loader uses the value in this field to find where the data in the section is in the file.
CharacteristicsContains flags such as whether this section contains executable code, initialized data, uninitialized data, can it be written to or read from.

Now that we know about IMAGE_SECTION_HEADER structure, let's see how we can emulate the PE loader's job:

  1. Read NumberOfSections in IMAGE_FILE_HEADER so we know how many sections there are in the file.
  2. Use the value in SizeOfHeaders as the file offset of the section table and moves the file pointer to that offset.
  3. Walk the structure array, examining each member.
  4. For each structure, we obtain the value in PointerToRawData and move the file pointer to that offset. Then we read the value in SizeOfRawData so we know how many bytes we should map into memory. Read the value in VirtualAddress and add the value in ImageBase to it to get the virtual address the section should start from. And then we are ready to map the section into memory and mark the attribute of the memory according to the flags in Characteristics.
  5. Walk the array until all the sections are processed.

Note that we didn't make use the the name of the section: it's not really necessary.

Example:

This example opens a PE file and walks the section table, showing the information about the sections in a listview control.

.386
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/kernel32.inc
include /masm32/include/comdlg32.inc
include /masm32/include/user32.inc
include /masm32/include/comctl32.inc
includelib /masm32/lib/comctl32.lib
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/comdlg32.lib

IDD_SECTIONTABLE equ 104
IDC_SECTIONLIST equ 1001

SEH struct
PrevLink dd ? ; the address of the previous seh structure
CurrentHandler dd ? ; the address of the new exception handler
SafeOffset dd ? ; The offset where it's safe to continue execution
PrevEsp dd ? ; the old value in esp
PrevEbp dd ? ; The old value in ebp
SEH ends

.data
AppName db "PE tutorial no.5",0
ofn OPENFILENAME <>
FilterString db "Executable Files (*.exe, *.dll)",0,"*.exe;*.dll",0
             db "All Files",0,"*.*",0,0
FileOpenError db "Cannot open the file for reading",0
FileOpenMappingError db "Cannot open the file for memory mapping",0
FileMappingError db "Cannot map the file into memory",0
FileInValidPE db "This file is not a valid PE",0
template db "%08lx",0
SectionName db "Section",0
VirtualSize db "V.Size",0
VirtualAddress db "V.Address",0
SizeOfRawData db "Raw Size",0
RawOffset db "Raw Offset",0
Characteristics db "Characteristics",0

.data?
hInstance dd ?
buffer db 512 dup(?)
hFile dd ?
hMapping dd ?
pMapping dd ?
ValidPE dd ?
NumberOfSections dd ?

.code
start proc
LOCAL seh:SEH
   invoke GetModuleHandle,NULL
   mov hInstance,eax
   mov ofn.lStructSize,SIZEOF ofn
   mov ofn.lpstrFilter, OFFSET FilterString
   mov ofn.lpstrFile, OFFSET buffer
   mov ofn.nMaxFile,512
   mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
   invoke GetOpenFileName, ADDR ofn
   .if eax==TRUE
      invoke CreateFile, addr buffer, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
      .if eax!=INVALID_HANDLE_VALUE
         mov hFile, eax
         invoke CreateFileMapping, hFile, NULL, PAGE_READONLY,0,0,0
         .if eax!=NULL
            mov hMapping, eax
            invoke MapViewOfFile,hMapping,FILE_MAP_READ,0,0,0
            .if eax!=NULL
               mov pMapping,eax
               assume fs:nothing
               push fs:[0]
               pop seh.PrevLink
               mov seh.CurrentHandler,offset SEHHandler
               mov seh.SafeOffset,offset FinalExit
               lea eax,seh
               mov fs:[0], eax
               mov seh.PrevEsp,esp
               mov seh.PrevEbp,ebp
               mov edi, pMapping
               assume edi:ptr IMAGE_DOS_HEADER
               .if [edi].e_magic==IMAGE_DOS_SIGNATURE
                  add edi, [edi].e_lfanew
                  assume edi:ptr IMAGE_NT_HEADERS
                  .if [edi].Signature==IMAGE_NT_SIGNATURE
                     mov ValidPE, TRUE
                  .else
                     mov ValidPE, FALSE
                  .endif
               .else
                  mov ValidPE,FALSE
               .endif
FinalExit:
               push seh.PrevLink
               pop fs:[0]
               .if ValidPE==TRUE
                  call ShowSectionInfo
               .else
                  invoke MessageBox, 0, addr FileInValidPE, addr AppName, MB_OK+MB_ICONINFORMATION
               .endif
               invoke UnmapViewOfFile, pMapping
           .else
               invoke MessageBox, 0, addr FileMappingError, addr AppName, MB_OK+MB_ICONERROR
          .endif
          invoke CloseHandle,hMapping
       .else
          invoke MessageBox, 0, addr FileOpenMappingError, addr AppName, MB_OK+MB_ICONERROR
       .endif
       invoke CloseHandle, hFile
    .else
       invoke MessageBox, 0, addr FileOpenError, addr AppName, MB_OK+MB_ICONERROR
    .endif
  .endif
  invoke ExitProcess, 0
  invoke InitCommonControls
start endp

SEHHandler proc C uses pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD
   mov edx,pFrame
   assume edx:ptr SEH
   mov eax,pContext
   assume eax:ptr CONTEXT
   push [edx].SafeOffset
   pop [eax].regEip
   push [edx].PrevEsp
   pop [eax].regEsp
   push [edx].PrevEbp
   pop [eax].regEbp
   mov ValidPE, FALSE
   mov eax,ExceptionContinueExecution
   ret
SEHHandler endp

DlgProc proc uses edi esi hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
   LOCAL lvc:LV_COLUMN
   LOCAL lvi:LV_ITEM
   .if uMsg==WM_INITDIALOG
      mov esi, lParam
      mov lvc.imask,LVCF_FMT or LVCF_TEXT or LVCF_WIDTH or LVCF_SUBITEM
      mov lvc.fmt,LVCFMT_LEFT
      mov lvc.lx,80
      mov lvc.iSubItem,0
      mov lvc.pszText,offset SectionName
      invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTCOLUMN,0,addr lvc inc lvc.iSubItem
      mov lvc.fmt,LVCFMT_RIGHT
      mov lvc.pszText,offset VirtualSize
      invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTCOLUMN,1,addr lvc
      inc lvc.iSubItem
      mov lvc.pszText,offset VirtualAddress
      invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTCOLUMN,2,addr lvc
      inc lvc.iSubItem
      mov lvc.pszText,offset SizeOfRawData
      invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTCOLUMN,3,addr lvc
      inc lvc.iSubItem
      mov lvc.pszText,offset RawOffset
      invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTCOLUMN,4,addr lvc
      inc lvc.iSubItem
      mov lvc.pszText,offset Characteristics
      invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTCOLUMN,5,addr lvc
      mov ax, NumberOfSections
      movzx eax,ax
      mov edi,eax      
      mov lvi.imask,LVIF_TEXT
      mov lvi.iItem,0
      assume esi:ptr IMAGE_SECTION_HEADER
      .while edi>0
         mov lvi.iSubItem,0
         invoke RtlZeroMemory,addr buffer,9
         invoke lstrcpyn,addr buffer,addr [esi].Name1,8
         lea eax,buffer
         mov lvi.pszText,eax
         invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTITEM,0,addr lvi
         invoke wsprintf,addr buffer,addr template,[esi].Misc.VirtualSize
         lea eax,buffer
         mov lvi.pszText,eax
         inc lvi.iSubItem
         invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_SETITEM,0,addr lvi
         invoke wsprintf,addr buffer,addr template,[esi].VirtualAddress
         lea eax,buffer
         mov lvi.pszText,eax
         inc lvi.iSubItem
         invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_SETITEM,0,addr lvi
         invoke wsprintf,addr buffer,addr template,[esi].SizeOfRawData
         lea eax,buffer
         mov lvi.pszText,eax
         inc lvi.iSubItem
         invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_SETITEM,0,addr lvi
         invoke wsprintf,addr buffer,addr template,[esi].PointerToRawData
         lea eax,buffer
         mov lvi.pszText,eax
         inc lvi.iSubItem
         invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_SETITEM,0,addr lvi
         invoke wsprintf,addr buffer,addr template,[esi].Characteristics
         lea eax,buffer
         mov lvi.pszText,eax
         inc lvi.iSubItem
         invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_SETITEM,0,addr lvi
         inc lvi.iItem
         dec edi
         add esi, sizeof IMAGE_SECTION_HEADER
      .endw
   .elseif
      uMsg==WM_CLOSE
         invoke EndDialog,hDlg,NULL
   .else
      mov eax,FALSE
      ret
   .endif
   mov eax,TRUE
   ret
DlgProc endp

ShowSectionInfo proc uses edi
   mov edi, pMapping
   assume edi:ptr IMAGE_DOS_HEADER
   add edi, [edi].e_lfanew
   assume edi:ptr IMAGE_NT_HEADERS
   mov ax,[edi].FileHeader.NumberOfSections
   movzx eax,ax
   mov NumberOfSections,eax
   add edi,sizeof IMAGE_NT_HEADERS
   invoke DialogBoxParam, hInstance, IDD_SECTIONTABLE,NULL, addr DlgProc, edi
   ret
ShowSectionInfo endp
end start

Analysis:

This example reuses the code of the example in PE tutorial 2. After it verifies that the file is a valid PE, it calls a function, ShowSectionInfo.

ShowSectionInfo proc uses edi
   mov edi, pMapping
   assume edi:ptr IMAGE_DOS_HEADER
   add edi, [edi].e_lfanew
   assume edi:ptr IMAGE_NT_HEADERS

We use edi as the pointer to the data in the PE file. At first, we initialize it to the value of pMapping which is the address of the DOS header. Then we add the value in e_lfanew to it so it now contains the address of the PE header.

   mov ax,[edi].FileHeader.NumberOfSections
   mov NumberOfSections,ax

Since we need to walk the section table, we must obtain the number of sections in this file. That's the value in NumberOfSections member of the file header. Don't forget that this member is of word size.

   add edi,sizeof IMAGE_NT_HEADERS

Edi currently contains the address of the PE header. Adding the size of the PE header to it will make it point at the section table.

   invoke DialogBoxParam, hInstance, IDD_SECTIONTABLE,NULL, addr DlgProc, edi

Call DialogBoxParam to show the dialog box containing the listview control. Note that we pass the address of the section table as its last parameter. This value will be available in lParam during WM_INITDIALOG message.

In the dialog box procedure, in response to WM_INITDIALOG message, we store the value of lParam (address of the section table) in esi, the number of sections in edi and then dress up the listview control. When everything is ready, we enter a loop which will insert the info about each section into the listview control. This part is very simple.

      .while edi>0
         mov lvi.iSubItem,0

Put this string in the first column.

         invoke RtlZeroMemory,addr buffer,9
         invoke lstrcpyn,addr buffer,addr [esi].Name1,8
         lea eax,buffer
         mov lvi.pszText,eax

We will display the name of the section but we must convert it to an ASCIIZ string first.

         invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTITEM,0,addr lvi

Then we display it in the first column.
We continue with this scheme until the last value we want to display for this section is displayed. Then we must move to the next structure.

         dec edi
         add esi, sizeof IMAGE_SECTION_HEADER
      .endw

We decrement the value in edi for each section processed. And we add the size of IMAGE_SECTION_HEADER to esi so it contains the address of the next IMAGE_SECTION_HEADER structure.

The steps in walking the section table are:

  1. Verify that the file is a valid PE
  2. Go to the beginning of the PE header
  3. Obtain the number of sections from NumberOfSections field in the file header.
  4. Go to the section table either by adding ImageBase to SizeOfHeaders or by adding the address of the PE header to the size of the PE header. (The section table immediately follows the PE header). If you don't use file mapping, you need to move the file pointer to the section table using SetFilePointer. The file offset of the section table is in SizeOfHeaders.(SizeOfHeaders is a member of IMAGE_OPTIONAL_HEADER)
  5. Process each IMAGE_SECTION_HEADER structure.

[Iczelion's Win32 Assembly Homepage]

Redis+PHP轻量级网站计数器实战:本地化、防并发、零依赖 网站访问计数器是Web基础度量概念,其核心原理在于原子性递增与状态持久化。在数据主权敏感、资源受限的中小项目中,传统文件或数据库方案易出现并发丢数、响应延迟等问题;而Redis凭借单线程原子操作、内存高速读写及AOF/RDB混合持久化能力,成为兼顾可靠性与极简部署的理想技术选型。本文聚焦Ubuntu 20.04 + PHP 7.4 + Redis 6.0这一经生产验证的稳定组合,详解本地化部署、防并发计数、IP+UA轻量防刷、Apache动态注入集成等关键实践,适用于非遗展示站、企业官网、静态博客等拒绝第三 阅读详情

相关推荐

视觉特征-自监督-掩码特征预测【2025-06】:V-JEPA-2【100万小时互联网视频,每样本:4秒×4➜16帧】【Stage1:表征学习⮕Stage2:V-JEPA2-AC(自回归下一帧预测)】

图14 展示了在实验室1中,使用杯子进行抓取操作任务的起始和目标框架示例。对于抓取和带物体到达任务,模型仅看到一个目标图像。对于拾取-放置任务,除了最终目标外,我们还向模型展示两个子目标图像。第一个目标图像显示物体被抓取,第二个目标图像显示物体在目标位置附近。模型首先针对第一个子目标优化动作4个时间步,然后自动切换到第二个子目标进行接下来的10个时间步,最后针对第三个目标进行最后4个时间步。

u013250861的博客 97

构建可审计的RAG系统:检索噪声、上下文饱和与答案漂移的实战应对

RAG(检索增强生成)是一种将外部知识库与大语言模型结合的关键技术,其核心原理在于通过向量检索获取相关上下文,再交由LLM进行条件化生成。技术价值体现在避免幻觉、提升事实准确性与支持私有数据闭环,广泛应用于法律文档审查、临床试验分析、内部知识库和多语言技术文档搜索等高可靠性场景。然而真实落地中,三大典型问题持续制约效果:检索噪声导致无关信息干扰、上下文窗口饱和引发静默截断、答案漂移造成结果不一致。本文聚焦LlamaIndex+Gemini Flash+Mirascope技术栈,深入剖析这三类失效模式的根因与

chuange6363的博客 615

Web协作Docx编辑器实现方案:从实时同步到样式还原

在线协作编辑已成为团队文档办公的核心基础设施,而 .docx 作为事实标准格式,其内部其实是 ZIP 包内嵌的复杂 XML 结构。要在 Web 端实现接近 Word 的编辑体验,需要将文档解析为结构化数据模型,并通过 WebSocket 实时同步操作,确保多人同时修改时内容不丢失。面对并发冲突,OT 与 CRDT 提供了不同解决思路,其中 CRDT 以无冲突合并和低复杂度成为当前 Web 协作编辑器的主流选择。本文从工程实践视角,拆解从协作协议设计、服务端同步、Docx 导入导出到样式映射的完整链路,并给出

weixin_30984001的博客 250

Catch2实战指南:5分钟搞定C++单元测试,从此告别测试恐惧症

你是否曾被C++测试框架的复杂配置折磨得头大?是否因为测试代码比业务代码还难写而放弃单元测试?今天,我要为你介绍一个能彻底改变你C++测试体验的框架——Catch2!🚀 ## 第一部分:为什么你需要Catch2?告别传统测试的三大痛点 ### 痛点一:配置复杂,入门门槛高 传统的C++测试框架往往需要复杂的构建系统配置,光是安装和配置就能耗掉你半天时间。Catch2却让你5分钟内就能跑起第

gitblog_00474的博客 396

MATLAB 论文复现——面向紧急需求响应的规模化灵活资源负荷管理快速决策方法

其次,对灵活资源参与EDR的功率分配模型进行了建模,并提出了基于分层分布式共识算法的快速决策方法,对功率分配模型进行快速求解,以满足EDR实时性的需求,在保证较高精度的前提下提高了决策速度。[1]孔祥玉,杨至端,孙裕策,等.面向紧急需求响应的规模化灵活资源负荷管理快速决策方法[J/OL].电力系统自动化,1-13[2024-07-29].http://kns.cnki.net/kcms/detail/32.1180.TP.20240709.1843.002.html.关键词: 规模化灵活资源;

sjr1478的博客 374

C#---第十一课:对列表的各种操作,添加、删除、排序、列表长度、获取元素的索引、FirstOrDefault()、SingleOrDefault()、last()

1.添加元素 2.删除元素 (1)删除列表中指定的元素 (2)删除列表A中所有与列表B相交的元素---常规 (3)删除列表A中所有与列表B相交的元素---lambda 3.排序(正序、倒序) 4.获取列表的最大容量(长度)、已用容量 6.获取元素在列表中的位置(index) 7.判断某元素是否在列表List中 8.获取列表中第一个元素First() & FirstOrDefault() 9.获取列表中唯一元素Single() & SingleOrDefault() 10.获取列表中最后一个元素

Alien-Hu 3627

OpenTRAP 高分屏(HiDPI)适配:JVM 重启缩放与 AppImage 实现原理

OpenTRAP 是一款免费的开源 Web 安全测试套件(Burp Suite 的替代品),内置拦截代理、Repeater、Intruder、Collaborator 以及 OWASP ZAP 扫描引擎。在 4K、2.5K 这类高分辨率屏幕上,它的界面不会缩成"蚂蚁字"——这背后是一套 **JVM 重启缩放**与 **AppImage 启动探测**的 HiDPI 适配方案,本文带你完整看懂它的实现

gitblog_00006的博客 473

Silvaco TCAD实战 | SiC MOSFET工艺仿真与关键参数DOE分析

本文详细介绍了使用Silvaco TCAD进行SiC MOSFET工艺仿真与关键参数DOE分析的实战方法。通过外延生长建模、离子注入工艺调试等步骤,结合DOE分析优化器件性能,帮助工程师在设计阶段预判电学特性,提升产品可靠性。文章还分享了网格划分、界面态建模等实用技巧,助力实现从仿真到产品的闭环验证。

weixin_30235225的博客 506

DigitalOcean社区教程提案写作:技术可信度构建指南

DigitalOcean社区教程提案本质上不是写作任务,而是一份面向SRE与开源维护者的技术合作邀约函。其核心原理在于通过可验证的实操细节建立‘三秒可信度’——编辑仅需扫视即可判断作者是否真正在Droplet环境完成过全流程。这种技术可信度由具体版本约束(如Ubuntu 22.04 LTS)、命令级验证(如curl状态码断言)、环境决策依据(如etcd替代Consul的内存实测数据)共同构成,直接决定教程的生产就绪性与读者复现成功率。典型应用场景包括Next.js Docker部署、PostgreSQL高可

390

django安装mysqlclient (Windows下正确安装mysqlclient)

由于本人也是初学Python和django。本人使用的Python版本是3.7所以连接MySQL数据库需要安装数据驱动,对应Python3的数据驱动是mysqlclient。因此本人习惯性的使用命令pip install mysqlclient,结果安装失败 (venv) C:\Users\songlihui\PycharmProjects\autotest&gt;pip install my...

songlh1234的博客 2万+

别再手动算LLC了!用Mathcad 15分钟搞定谐振参数与增益曲线(附已验证产品案例)

本文详细介绍了如何利用Mathcad在15分钟内高效完成LLC谐振变换器的参数计算与增益曲线绘制。通过对比传统工具,突出Mathcad在自然数学表达、实时单位换算和动态参数关联方面的独特优势,帮助电源工程师大幅提升设计效率。文章还提供了已验证的产品案例和实用模板,助力工程师快速掌握谐振参数优化技巧。

weixin_42548888的博客 548

Play Integrity Fix 上手教程:让 Root 设备重新通过 Play 判定的四步操作

Play Integrity Fix 是给 Root 设备用的模块,专门修复 Google Play Integrity 和 SafetyNet 返回的"未认证"判定:它在 Google 服务进程里伪装构建信息和密钥凭证,让判定重新变绿。这篇文章带你装好模块、填对 pif.json 的字段,并讲清楚出问题时该按什么顺序排查。 ## 装之前,先回答三个问题 **"你的 Android 版本过 1

gitblog_00761的博客 333

基于单目视觉的四旋翼定点降落——如何通过mavros控制pixhawk(二)

    一直拖了这么久没有更新,怪我太懒啦~~~ 今天要特别感谢舒仔仔同学,我的好队友帮我写了这篇博文。这篇文章主要讲了如何通过mavros来控制pixhawk。硬件逻辑是这样子,我们先搞一个odroid(土豪上TX2),再用usb线将odroid与pixhawk连接。所以,odroid发送控制指令来控制pixhawk飞行。pixhawk与外界的通信协议是mavlink。ROS下面有个包叫mavr...

zhengyuxin0507的博客 1万+

CANN Ascend C资料设计规范

Ascend C documentation is the sole official entry point for developers using Ascend NPUs for operator development. Documentation quality directly impacts developer efficiency across the entire "unders

gitblog_00820的博客 391

西门子S7-1200PLC与FANUC机器人进行PROFINET IO通信的具体方法和步骤详解

西门子S7-1200PLC与FANUC机器人进行PROFINET IO通信的具体方法和步骤详解

Robot_PLC_HMI_Automation 1万+

知识图谱实战应用8-从文本关系抽取到知识图谱关系构建流程贯通

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用8-从文本关系抽取到知识图谱关系构建流程贯通。我们从文本数据中采集到关键信息,并抽取出其中的关系信息,然后在存入图数据库中,整个过程实现自动化,我这里将举一个文本例子进行抽取。 对于知识图谱的构建是将实体、概念和它们之间的关系都以图表形式呈现出来的一种数据结构。要构建一个知识图谱,需要从不同的数据源中采集到相关信息,并将这些信息整合在一起,最终形成一个全面而且精确的知识图谱。

微学AI的博客 2545

如何在10分钟内掌握Catch2:现代C++测试框架的完整实战指南

你是否曾为C++项目中的测试代码繁琐而烦恼?是否厌倦了那些需要复杂配置和冗长语法的测试框架?Catch2正是为了解决这些问题而生的现代C++测试框架。作为一个专为单元测试、TDD(测试驱动开发)和BDD(行为驱动开发)设计的原生C++框架,Catch2支持C++14、C++17及更高版本,提供了简洁的API、强大的断言系统和灵活的测试组织方式。 ## 为什么选择Catch2:解决传统测试框架的痛

gitblog_00141的博客 358

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

CANN/asc-devkit文档贡献指南

The Ascend C documentation system consists of five core documents. Developers can improve and contribute to the documentation by submitting PRs: | Document | Content | Directory | |----------|-------

gitblog_00583的博客 460

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

一、单片机基础入门

ARM公司:只做内核设计和IP授权,不参与芯片设计。ST公司:拿到ARM公司授权后,进行芯片设计。类似的公司还有华为、高通、NXP等。

enenxy的博客 536

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Rage(PC) Modding Notes 狂怒 (pc)制作模组 指南 一

从rage狂怒的mod笔记资料来看中看的出来,跟doom3和quake3的很多东西已经完全不一样了,我觉得乃是在doom3源代码的基础之上,不断的改进,基本上大部分都改动过了 ________________________________________ Rage(PC) Modding Notes ___________________________

tailiangliang的专栏 7936

Python PDF生成终极指南:fpdf2高效文档创建与可视化方案

你是否曾经为Python项目中的PDF生成而烦恼?面对复杂的报表需求、数据可视化图表、多语言文本排版时,是否觉得现有解决方案要么过于笨重,要么功能有限?今天,我将为你介绍一个革命性的Python PDF生成库——fpdf2,它不仅解决了传统PDF生成的痛点,还提供了丰富的数据可视化集成方案。 ## 🎯 为什么选择fpdf2:重新定义Python PDF生成体验 在Python生态中,PDF生

gitblog_00037的博客 746

生产级RAG系统落地实战:延迟优化、数据漂移与向量检索稳定性

RAG(检索增强生成)作为当前企业知识应用的核心架构,其本质是将传统信息检索与大语言模型能力深度耦合的技术范式。其核心原理在于通过向量检索实现语义匹配,再经重排序与LLM编排生成精准响应。技术价值不仅体现在问答准确率提升,更在于支撑金融合规、医疗知识库等高可靠性场景的可审计、可降级、可监控服务交付。典型应用场景涵盖多源异构文档实时检索、多租户隔离问答、低延迟工业手册查询等。本文聚焦RAG系统从教程原型迈向生产环境的关键跃迁,深入剖析向量检索稳定性、延迟优化瓶颈及数据漂移应对机制,直击embedding成本失

xSTARx 335

Python数据结构选型实战:从时间复杂度到内存布局的工程决策

Python数据结构并非语法基础,而是影响性能、内存与可维护性的核心工程决策点。理解list的动态数组扩容机制、dict的紧凑哈希表内存布局、set的O(1)成员判断原理,是规避线上慢查询、内存泄漏和调试地狱的前提。技术价值在于将抽象复杂度转化为可测量的响应时间(如用deque替代list.pop(0)降低99.9%延迟)和可预估的内存开销(如tuple比list节省16字节元数据)。典型应用场景包括高并发在线状态服务的分层索引设计、爬虫去重的集合判存优化、金融风控中不可变数据契约保障。本文聚焦真实项目中的

weixin_34072458的博客 421

CANN仿真器AIC性能问题指南

AIC-side pipeline bound diagnosis and fix solutions. All metric paths refer to fields in `summary.json`. > **Reading order**: scan the Quick Reference Table for a row matching your symptoms, then jum

gitblog_00464的博客 803

Great Expectations数据质量实战:从校验到生产防御体系

数据验证是保障数据可信度的基础工程实践,其核心在于将模糊的质量直觉转化为可声明、可执行、可追溯的契约化规则。Great Expectations(GX)通过Expectation Suite实现声明式数据质量治理,支持对字段唯一性、值域合规、分布稳定性及跨列逻辑等多维度校验,并天然集成版本管理、审计追踪与自动化告警能力。相比临时性断言(如Pandas assert),GX提供工业级质量闭环:定义‘好数据’标准、记录谁在何时确认、精准定位异常行与值。本文聚焦GX在真实数据管道中的落地路径,涵盖Fluent D

weixin_34343000的博客 367

从零搭建 FastAPI+RAG 垃圾分类回收智能问答系统

文档,自动切片、调用阿里云 Embedding 生成向量存入 ChromaDB,提供初始化入库、语义检索接口。整合全部业务接口,分三大模块:回收站管理、RAG 知识库、AI 对话。这里统一存放 DashScope 密钥、数据库配置,新手只需要修改。使用 Tortoise ORM,自动创建数据表,无需手动操作数据库。用于接口入参、出参格式校验,FastAPI 自动返回友好报错。启动 FastAPI、初始化数据库、挂载全部路由。实现分类、站点、居民分页查询、新增逻辑。在项目根目录打开终端,新建。

2301_78283494的博客 309
上一篇: Tutorial 4: Optional Header
下一篇: Tutorial 6: Import Table
maplewasp
博客等级 码龄23年 22粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值