Monitor process+driver+register

本文介绍了一个内核驱动程序的设计,该驱动程序通过hook ZwCreateProcess、ZwSetValueKey 和 ZwLoadDriver 函数来监控进程创建、注册表键值更改及驱动加载行为。此驱动能够根据特定条件阻止这些操作。
*

hookzwcreateprocess.C

Author: <X-STAR/heartdbg>
Last Updated: 2007-11-17

This framework is generated by EasySYS 0.3.0
This template file is copying from QuickSYS 0.3.0 written by Chunhua Liu

*/
// ***************************************************************
// hookzwcreateprocess version: 1.0 ? date: 11/17/2007
// -------------------------------------------------------------
// Author:X-STAR/heartdbg
// E-MAIL:qqshow@live.com
// BLOG :http://hi.baidu.com/heartdbg
// -------------------------------------------------------------
// Copyright (C) 2007 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
#include "dbghelp.h"
#include "hookzwcreateprocess.h"
#include <stdio.h>
#include <stdarg.h>
#include <ntimage.h>
#include <ntiologc.h>

//
// A structure representing the instance information associated with
// a particular device
//

#define DWORD unsigned long
#define WORD unsigned short
#define BOOL unsigned long
#define BYTE unsigned char
#define MAXPATHLEN 256
#define SEC_IMAGE 0x01000000
int position;
int pos;
int      po;
KEVENT event ;
char *output;

extern NTSTATUS
ZwCreateSection(
                    OUT PHANDLE SectionHandle,
                    IN ACCESS_MASK DesiredAccess,
                    IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
                    IN PLARGE_INTEGER MaximumSize OPTIONAL,
                    IN ULONG SectionPageProtection,
                    IN ULONG AllocationAttributes,
                    IN HANDLE FileHandle OPTIONAL
);



NTSTATUS
ObQueryNameString(
                     IN PVOID Object,
                     OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
                     IN ULONG Length,
                     OUT PULONG ReturnLength
);



NTSTATUS
DevCreateClose(
                          IN PDEVICE_OBJECT DeviceObject,
                          IN PIRP Irp
);

NTSTATUS
DevDispatch(
                          IN PDEVICE_OBJECT DeviceObject,
                          IN PIRP Irp
);

VOID RegMoniterOn();
VOID RegMoniterOff();
VOID ProcMoniterOn();
VOID ProcMoniterOff();
VOID ModMonitorOn();
VOID ModMonitorOff();

BOOLEAN bRegMon = FALSE;
BOOLEAN bProcMon= FALSE;
BOOLEAN bModMon = FALSE;

typedef struct ServiceDescriptorEntry {
unsigned int *ServiceTableBase;
unsigned int *ServiceCounterTableBase; //Used only in checked build
unsigned int NumberOfServices;
unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry, *PServiceDescriptorTableEntry;

extern PServiceDescriptorTableEntry KeServiceDescriptorTable;

/*
NTSYSAPI
NTSTATUS
NTAPI
ZwCreateProcess(
                    OUT PHANDLE ProcessHandle,
                    IN ACCESS_MASK DesiredAccess,
                    IN POBJECT_ATTRIBUTES ObjectAttributes,
                    IN HANDLE InheritFromProcessHandle,
                    IN BOOLEAN InheritHandles,
                    IN HANDLE SectionHandle OPTIONAL,
                    IN HANDLE DebugPort OPTIONAL,
                    IN HANDLE ExceptionPort OPTIONAL,
                    IN HANDLE Unknown
);*/
/*
NTSTATUS
ZwLoadDriver(
                IN PUNICODE_STRING DriverServiceName
);*/



typedef NTSTATUS (*ZWCREATEPROCESS)(
                                         OUT PHANDLE ProcessHandle,
                                         IN ACCESS_MASK DesiredAccess,
                                         IN POBJECT_ATTRIBUTES ObjectAttributes,
                                         IN HANDLE InheritFromProcessHandle,
                                         IN BOOLEAN InheritHandles,
                                         IN HANDLE SectionHandle OPTIONAL,
                                         IN HANDLE DebugPort OPTIONAL,
                                         IN HANDLE ExceptionPort OPTIONAL,
                                         IN HANDLE Unknown
);

NTSTATUS FakedZwCreateProcess(
                                    OUT PHANDLE ProcessHandle,
                                    IN ACCESS_MASK DesiredAccess,
                                    IN POBJECT_ATTRIBUTES ObjectAttributes,
                                    IN HANDLE InheritFromProcessHandle,
                                    IN BOOLEAN InheritHandles,
                                    IN HANDLE SectionHandle OPTIONAL,
                                    IN HANDLE DebugPort OPTIONAL,
                                    IN HANDLE ExceptionPort OPTIONAL,
                                    IN HANDLE Unknown
                                    );



typedef NTSTATUS (*ZWSETVALUEKEY)
(
                                    IN HANDLE KeyHandle,
                                    IN PUNICODE_STRING ValueName,
                                    IN ULONG TitleIndex OPTIONAL,
                                    IN ULONG Type,
                                    IN PVOID Data,
                                    IN ULONG DataSize
);

NTSTATUS FakedZwSetValueKey
(
                                    IN HANDLE KeyHandle,
                                    IN PUNICODE_STRING ValueName,
                                    IN ULONG TitleIndex OPTIONAL,
                                    IN ULONG Type,
                                    IN PVOID Data,
                                    IN ULONG DataSize
);

typedef NTSTATUS (*ZWLOADDRIVER)
(
                                IN PUNICODE_STRING DriverServiceName
);

NTSTATUS FakedZwLoadDriver
(                              
                                    IN PUNICODE_STRING DriverServiceName
);

ZWSETVALUEKEY RealZwSetValueKey;
ZWCREATEPROCESS RealZwCreateProcess;
ZWLOADDRIVER RealZwLoadDriver;


typedef struct _SECTION_IMAGE_INFORMATION {
PVOID EntryPoint;
ULONG StackZeroBits;
ULONG StackReserved;
ULONG StackCommit;
ULONG ImageSubsystem;
WORD SubsystemVersionLow;
WORD SubsystemVersionHigh;
ULONG Unknown1;
ULONG ImageCharacteristics;
ULONG ImageMachineType;
ULONG Unknown2[3];
} SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;

// Length of process name (rounded up to next DWORD)
#define PROCNAMELEN 20
// Maximum length of NT process name
#define NT_PROCNAMELEN 16
ULONG gProcessNameOffset;
void GetProcessNameOffset()
{

PEPROCESS curproc;
int i;
curproc = PsGetCurrentProcess();
for( i = 0; i < 3*PAGE_SIZE; i++ )
{
if( !strncmp( "System", (PCHAR) curproc + i, strlen("System") ))
{
gProcessNameOffset = i;
}
}
}


BOOLEAN GetFullName2(HANDLE handle,char * pch)
{
      
     ULONG uactLength;
     POBJECT_NAME_INFORMATION pustr;
     ANSI_STRING astr;
     PVOID pObj;
     NTSTATUS ns;
     ns = ObReferenceObjectByHandle( handle, 0, NULL, KernelMode, &pObj, NULL );
     if (!NT_SUCCESS(ns))
     {
          return FALSE;
     }
     pustr = ExAllocatePool(NonPagedPool,1024+4);
      
     if (pObj==NULL||pch==NULL)
          return FALSE;
      
     ns = ObQueryNameString(pObj,pustr,512,&uactLength);
      
     if (NT_SUCCESS(ns))
     {
          RtlUnicodeStringToAnsiString(&astr,(PUNICODE_STRING)pustr,TRUE);
          strcpy(pch,astr.Buffer);
     }
     ExFreePool(pustr);
     RtlFreeAnsiString( &astr );
     if (pObj)
     {
          ObDereferenceObject(pObj);
     }
      
     return TRUE;
}

/*
KeyHandle:hSection

*/

NTSTATUS GetFullName(HANDLE KeyHandle,char *fullname)
{
     NTSTATUS ns;
     PVOID pKey=NULL,pFile=NULL;
     UNICODE_STRING fullUniName;
     ANSI_STRING akeyname;
     ULONG actualLen;
     UNICODE_STRING dosName;

     fullUniName.Buffer=NULL;
     fullUniName.Length=0;
     fullname[0]=0x00;
     ns= ObReferenceObjectByHandle( KeyHandle, 0, NULL, KernelMode, &pKey, NULL ) ;
     if( !NT_SUCCESS(ns)) return ns;
      
     fullUniName.Buffer = ExAllocatePool( PagedPool, MAXPATHLEN*2);//1024*2
     fullUniName.MaximumLength = MAXPATHLEN*2;

     __try
     {
           
          pFile=(PVOID)*(ULONG *)((char *)pKey+20);
          pFile=(PVOID)*(ULONG *)((char *)pFile);
          pFile=(PVOID)*(ULONG *)((char *)pFile+36);
           
           
          ObReferenceObjectByPointer(pFile, 0, NULL, KernelMode);
          RtlVolumeDeviceToDosName(((PFILE_OBJECT)pFile)->DeviceObject,&dosName);
          //ns=ObQueryNameString( pFile, fullUniName, MAXPATHLEN, &actualLen );
          RtlCopyUnicodeString(&fullUniName, &dosName);
          RtlAppendUnicodeStringToString(&fullUniName,&((PFILE_OBJECT)pFile)->FileName);
           
          ObDereferenceObject(pFile);
          ObDereferenceObject(pKey );
           
          RtlUnicodeStringToAnsiString( &akeyname, &fullUniName, TRUE );
          if(akeyname.Length<MAXPATHLEN)
          {
               memcpy(fullname,akeyname.Buffer,akeyname.Length);
               fullname[akeyname.Length]=0x00;
          }
          else
          {
               memcpy(fullname,akeyname.Buffer,MAXPATHLEN);
               fullname[MAXPATHLEN-1]=0x00;
          }
           
          RtlFreeAnsiString( &akeyname );
          ExFreePool(dosName.Buffer);
          ExFreePool( fullUniName.Buffer );
           
          return STATUS_SUCCESS;
           
     }

     __except(1)
     {
          if(fullUniName.Buffer) ExFreePool( fullUniName.Buffer );
          if(pKey) ObDereferenceObject(pKey );
          return STATUS_SUCCESS;
           
     }

}

BOOL GoOrNot(char *fathername,char *procname)
{
     char buff[256] = {0};
     ULONG a;
     LARGE_INTEGER li;li.QuadPart=-10000;
     KeWaitForSingleObject(&event,Executive,KernelMode,0,0);
      
     strcpy(buff,fathername);
     strcat(buff,procname);
      
     strncpy(&output[8],buff,sizeof(buff));
      
     a = 1;
     memmove(&output[0],&a,4);
     while (1)
     {
          KeDelayExecutionThread(KernelMode,0,&li);
          memmove(&a,&output[0],4);
          if (!a)
          {
               break;
          }
     }
      
     memmove(&a,&output[4],4);
     KeSetEvent(&event,0,0);
     return a;
}


BOOL GetProcessName( PCHAR theName )
{
PEPROCESS curproc;
char *nameptr;
ULONG i;
KIRQL oldirql;
      
if( gProcessNameOffset )
{
curproc = PsGetCurrentProcess();
nameptr = (PCHAR) curproc + gProcessNameOffset;
strncpy( theName, nameptr, NT_PROCNAMELEN );
theName[NT_PROCNAMELEN] = 0; /* NULL at end */
return TRUE;
}
return FALSE;
}

DWORD GetDllFunctionAddress(char* lpFunctionName, PUNICODE_STRING pDllName)
{
HANDLE hThread, hSection, hFile, hMod;
SECTION_IMAGE_INFORMATION sii;
IMAGE_DOS_HEADER* dosheader;
IMAGE_OPTIONAL_HEADER* opthdr;
IMAGE_EXPORT_DIRECTORY* pExportTable;
DWORD* arrayOfFunctionAddresses;
DWORD* arrayOfFunctionNames;
WORD* arrayOfFunctionOrdinals;
DWORD functionOrdinal;
DWORD Base, x, functionAddress;
char* functionName;
STRING ntFunctionName, ntFunctionNameSearch;
PVOID BaseAddress = NULL;
SIZE_T size=0;

OBJECT_ATTRIBUTES oa = {sizeof oa, 0, pDllName, OBJ_CASE_INSENSITIVE};

IO_STATUS_BLOCK iosb;

//_asm int 3;
ZwOpenFile(&hFile, FILE_EXECUTE | SYNCHRONIZE, &oa, &iosb, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_NONALERT);

oa.ObjectName = 0;

ZwCreateSection(&hSection, SECTION_ALL_ACCESS, &oa, 0,PAGE_EXECUTE, SEC_IMAGE, hFile);

ZwMapViewOfSection(hSection, NtCurrentProcess(), &BaseAddress, 0, 1000, 0, &size, (SECTION_INHERIT)1, MEM_TOP_DOWN, PAGE_READWRITE);

ZwClose(hFile);

hMod = BaseAddress;

dosheader = (IMAGE_DOS_HEADER *)hMod;

opthdr =(IMAGE_OPTIONAL_HEADER *) ((BYTE*)hMod+dosheader->e_lfanew+24);

pExportTable =(IMAGE_EXPORT_DIRECTORY*)((BYTE*) hMod + opthdr->DataDirectory[ IMAGE_DIRECTORY_ENTRY_EXPORT]. VirtualAddress);

// now we can get the exported functions, but note we convert from RVA to address
arrayOfFunctionAddresses = (DWORD*)( (BYTE*)hMod + pExportTable->AddressOfFunctions);

arrayOfFunctionNames = (DWORD*)( (BYTE*)hMod + pExportTable->AddressOfNames);

arrayOfFunctionOrdinals = (WORD*)( (BYTE*)hMod + pExportTable->AddressOfNameOrdinals);

Base = pExportTable->Base;

RtlInitString(&ntFunctionNameSearch, lpFunctionName);

for(x = 0; x < pExportTable->NumberOfFunctions; x++)
{
functionName = (char*)( (BYTE*)hMod + arrayOfFunctionNames[x]);

RtlInitString(&ntFunctionName, functionName);

functionOrdinal = arrayOfFunctionOrdinals[x] + Base - 1; // always need to add base, -1 as array counts from 0
// this is the funny bit. you would expect the function pointer to simply be arrayOfFunctionAddresses[x]...
// oh no... thats too simple. it is actually arrayOfFunctionAddresses[functionOrdinal]!!
functionAddress = (DWORD)( (BYTE*)hMod + arrayOfFunctionAddresses[functionOrdinal]);
if (RtlCompareString(&ntFunctionName, &ntFunctionNameSearch, TRUE) == 0)
{
ZwClose(hSection);
return functionAddress;
}
}

ZwClose(hSection);
return 0;
}



VOID OnUnload( IN PDRIVER_OBJECT DriverObject )
{
     UNICODE_STRING devlink;
DbgPrint("PRMonitor: OnUnload called/n");
     if (bRegMon)
     {
          RegMoniterOff();
     }
     if(bProcMon)
     {
          ProcMoniterOff();
     }
     if (bModMon)
     {
          ModMonitorOff();
     }
     RtlInitUnicodeString(&devlink,HOOKZWCREATEPROCESS_DOS_DEVICE_NAME_W);
     IoDeleteSymbolicLink(&devlink);
     if (DriverObject->DeviceObject)
     {
          IoDeleteDevice(DriverObject->DeviceObject);
     }
      
}

NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath )
{
int i;
UNICODE_STRING dllName;
DWORD functionAddress;
     UNICODE_STRING devname;
     UNICODE_STRING devlink;
     PDEVICE_OBJECT devob ;
     NTSTATUS status ;
     //_asm int 3;
     DbgPrint("My Driver Loaded!");

     RtlInitUnicodeString(&devname,HOOKZWCREATEPROCESS_DEVICE_NAME_W);
     RtlInitUnicodeString(&devlink,HOOKZWCREATEPROCESS_DOS_DEVICE_NAME_W);

     status = IoCreateDevice(theDriverObject,
                                   256,
                                   &devname,
                                   FILE_DEVICE_HOOKZWCREATEPROCESS,
                                   0,
                                   TRUE,
                                   &devob);

     if (!NT_SUCCESS(status))
     {
          KdPrint(("Failed to create device ....."));
          return status ;
     }

     status = IoCreateSymbolicLink(&devlink,&devname);

     if (!NT_SUCCESS(status))
     {
          KdPrint(("Failed to create symboliclink ......."));
          IoDeleteDevice(devob);
          return status;
     }

     theDriverObject->MajorFunction[IRP_MJ_CREATE] =
     theDriverObject->MajorFunction[IRP_MJ_CLOSE] = DevCreateClose;
     theDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DevDispatch ;
     theDriverObject->DriverUnload = OnUnload;
     KeInitializeEvent(&event,SynchronizationEvent,1);



GetProcessNameOffset();


RtlInitUnicodeString(&dllName, L"//Device//HarddiskVolume1//Windows//System32//ntdll.dll");
functionAddress = GetDllFunctionAddress("ZwCreateProcessEx", &dllName);
position = *((WORD*)(functionAddress+1));

DbgPrint("ZwCreateProcessEx's Id:%d/n", position);

     RealZwCreateProcess = (ZWCREATEPROCESS)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + position));
     functionAddress = GetDllFunctionAddress("ZwLoadDriver",&dllName);
     pos = *((WORD*)((DWORD)ZwSetValueKey+1));
     po = *((WORD *)(functionAddress+1));

     DbgPrint("ZwSetValueKey's Id:%d/n", pos);
     DbgPrint("ZwLoadDriver's Id:%d/n",po);
     //DbgPrint("ZwLoadDriver's address is %d/n",ZwLoadDriver);

     RealZwSetValueKey = (ZWSETVALUEKEY)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + pos));
     RealZwLoadDriver =      (ZWLOADDRIVER)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + po));
      

return STATUS_SUCCESS;
}


NTSTATUS FakedZwCreateProcess(
                                    OUT PHANDLE ProcessHandle,
                                    IN ACCESS_MASK DesiredAccess,
                                    IN POBJECT_ATTRIBUTES ObjectAttributes,
                                    IN HANDLE InheritFromProcessHandle,
                                    IN BOOLEAN InheritHandles,
                                    IN HANDLE SectionHandle OPTIONAL,
                                    IN HANDLE DebugPort OPTIONAL,
                                    IN HANDLE ExceptionPort OPTIONAL,
                                    IN HANDLE Unknown
                                    )
{
     char aProcessName[PROCNAMELEN];
     char aPathName[MAXPATHLEN];
      
     GetFullName(SectionHandle,aPathName);

     GetProcessName(aProcessName);
      
     DbgPrint("ZwCreateProcess is called by %s/n",aProcessName);
     DbgPrint("The name is %s/n",aPathName);
     strcat(aProcessName,"##");
     if (GoOrNot(aProcessName,aPathName))
     {
          return RealZwCreateProcess(
               ProcessHandle,
               DesiredAccess,
               ObjectAttributes,
               InheritFromProcessHandle,
               InheritHandles,
               SectionHandle,
               DebugPort,
               ExceptionPort,
               Unknown
                                    );

     }
     else
     {

          ProcessHandle = NULL;
          return STATUS_SUCCESS;
     }
           
}

NTSTATUS FakedZwSetValueKey
(
IN HANDLE KeyHandle,
IN PUNICODE_STRING ValueName,
IN ULONG TitleIndex OPTIONAL,
IN ULONG Type,
IN PVOID Data,
IN ULONG DataSize
)
{
     char pch[MAXPATHLEN];
     char regValue[MAXPATHLEN];
     ANSI_STRING ansi;
     char aProcessName[PROCNAMELEN];
     GetFullName2(KeyHandle,pch);
     GetProcessName(aProcessName);
     DbgPrint("ZwSetValueKey is called by %s/n",aProcessName);

     RtlUnicodeStringToAnsiString(&ansi,ValueName,TRUE);
          if(ansi.Length<MAXPATHLEN)
          {
               memcpy(regValue,ansi.Buffer,ansi.Length);
               regValue[ansi.Length]=0x00;
          }
          else
          {
               memcpy(regValue,ansi.Buffer,MAXPATHLEN);
               regValue[MAXPATHLEN-1]=0x00;
          }
           
          RtlFreeAnsiString( &ansi );
     strcat(aProcessName,"$$");
     strcat(pch,regValue);
     if (GoOrNot(aProcessName,pch))
     {
          return RealZwSetValueKey(
                                         KeyHandle,
                                         ValueName,
                                         TitleIndex,
                                         Type,
                                         Data,
                                         DataSize);
     }
     else
     {
          return STATUS_ACCESS_DENIED;
     }

}

NTSTATUS FakedZwLoadDriver(IN PUNICODE_STRING DriverServiceName )
{
     char aProcessName[PROCNAMELEN];
     char aDrvname[MAXPATHLEN];
     ANSI_STRING ansi ;
     GetProcessName(aProcessName);
     RtlUnicodeStringToAnsiString(&ansi,DriverServiceName,TRUE);
     if(ansi.Length<MAXPATHLEN)
     {
          memcpy(aDrvname,ansi.Buffer,ansi.Length);
          aDrvname[ansi.Length]=0x00;
     }
     else
     {
          memcpy(aDrvname,ansi.Buffer,MAXPATHLEN);
          aDrvname[MAXPATHLEN-1]=0x00;
     }
      
          RtlFreeAnsiString( &ansi );
     DbgPrint("ZwLoadDriver is called by %s/n",aProcessName);
     DbgPrint("Driver name is %s/n",aDrvname);

     strcat(aProcessName,"&&");

     if (GoOrNot(aProcessName,aDrvname))
     {
          return RealZwLoadDriver(
                                        DriverServiceName
                                        );
     }
     else
     {
               return STATUS_ACCESS_DENIED;
     }


}

NTSTATUS
DevCreateClose(
                IN PDEVICE_OBJECT DeviceObject,
                IN PIRP Irp
)
{

          Irp->IoStatus.Status = 0;
          Irp->IoStatus.Information = 0 ;

          IoCompleteRequest(Irp,IO_NO_INCREMENT);

          return STATUS_SUCCESS ;

}

NTSTATUS
DevDispatch(
                IN PDEVICE_OBJECT DeviceObject,
                IN PIRP Irp
)
{
     UCHAR *buff =0;
     ULONG a;
     PIO_STACK_LOCATION psloc= IoGetCurrentIrpStackLocation(Irp);

      
     switch(psloc->Parameters.DeviceIoControl.IoControlCode)
     {
     case 1000:
          DbgPrint("IoControlCode 1000/n");
          if(!bProcMon)
          {
               buff = (UCHAR *)Irp->AssociatedIrp.SystemBuffer ;
               
               ProcMoniterOn();
               
               memmove(&a,&buff[4],4);
               output=(char*)MmMapIoSpace(MmGetPhysicalAddress((void*)a),256,0);
           
           
      
          }
               break;

          case 1001:
               DbgPrint("IoControlCode 1001/n");
               if (bProcMon)
               {
                    ProcMoniterOff();
                     
               }
               break;

          case 1002:
               DbgPrint("IoControlCode 1002/n");
               if (!bRegMon)
               {
                    buff = (UCHAR *)Irp->AssociatedIrp.SystemBuffer ;

                    RegMoniterOn();

                    memmove(&a,&buff[4],4);
                    output=(char*)MmMapIoSpace(MmGetPhysicalAddress((void*)a),256,0);

               }
               break;

          case 1003:
               DbgPrint("IoControlCode 1003/n");
               if (bRegMon)
               {
                    RegMoniterOff();
                     
               }
               break;

          case 1004:
               DbgPrint("IoControlCode 1004/n");
               if (!bModMon)
               {
                    buff = (UCHAR *)Irp->AssociatedIrp.SystemBuffer ;
                     
                    ModMonitorOn();
                     
                    memmove(&a,&buff[4],4);
                    output=(char*)MmMapIoSpace(MmGetPhysicalAddress((void*)a),256,0);
               }
               break;
               
          case 1005:
               DbgPrint("IoControlCode 1005/n");
               if (bModMon)
               {
                    ModMonitorOff();
               }
               break;
          }
           
                                             

     Irp->IoStatus.Status = 0;
     IoCompleteRequest(Irp,IO_NO_INCREMENT);
     return STATUS_SUCCESS ;
}

VOID ModMonitorOn()
{
     DbgPrint("ModMonitorOn/n");
     _asm
     {
               CLI //disable interrupt
               MOV EAX, CR0 //move CR0 register into EAX
               AND EAX, NOT 10000H //disable WP bit
               MOV CR0, EAX

     }

     (ZWLOADDRIVER)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + po)) = FakedZwLoadDriver ;


     _asm
     {
           
               MOV EAX, CR0 //move CR0 register into EAX
               OR EAX, 10000H //enable WP bit
               MOV CR0, EAX //write register back
               STI //enable interrupt
     }
     bModMon =1 ;
}

VOID ModMonitorOff()
{
     DbgPrint("ModMonitorOff/n");
     _asm
     {
          CLI //disable interrupt
               MOV EAX, CR0 //move CR0 register into EAX
               AND EAX, NOT 10000H //disable WP bit
               MOV CR0, EAX
               
     }
      
     (ZWLOADDRIVER)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + po)) = RealZwLoadDriver ;
      
      
     _asm
     {
           
          MOV EAX, CR0 //move CR0 register into EAX
               OR EAX, 10000H //enable WP bit
               MOV CR0, EAX //write register back
               STI //enable interrupt
     }
     bModMon =0 ;
}

VOID RegMoniterOn()
{
     DbgPrint("RegMonitorON/n");
     _asm
     {
           
               CLI //disable interrupt
               MOV EAX, CR0 //move CR0 register into EAX
               AND EAX, NOT 10000H //disable WP bit
               MOV CR0, EAX //write register back
               
     }
                     
          (ZWSETVALUEKEY)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + pos)) = FakedZwSetValueKey ;
                     
                     
     _asm
     {
                          
               MOV EAX, CR0 //move CR0 register into EAX
               OR EAX, 10000H //enable WP bit
               MOV CR0, EAX //write register back
               STI //enable interrupt
     }
     bRegMon = 1 ;


}

VOID RegMoniterOff()
{
     DbgPrint("RegMonitorOff/n");
     _asm
     {
           
               CLI //disable interrupt
               MOV EAX, CR0 //move CR0 register into EAX
               AND EAX, NOT 10000H //disable WP bit
               MOV CR0, EAX //write register back
               
     }
                     
               (ZWSETVALUEKEY)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + pos)) = RealZwSetValueKey ;
                     
                     
     _asm
     {
                          
               MOV EAX, CR0 //move CR0 register into EAX
               OR EAX, 10000H //enable WP bit
               MOV CR0, EAX //write register back
               STI //enable interrupt
     }
     bRegMon = 0;

}

VOID ProcMoniterOn()
{
     DbgPrint("ProcMonitorOn/n");
     _asm
           
     {
           
               CLI //disable interrupt
               MOV EAX, CR0 //move CR0 register into EAX
               AND EAX, NOT 10000H //disable WP bit
               MOV CR0, EAX //write register back
               
     }
      
     (ZWCREATEPROCESS)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + position)) = FakedZwCreateProcess ;
      
      
     _asm
     {
           
               MOV EAX, CR0 //move CR0 register into EAX
               OR EAX, 10000H //enable WP bit
               MOV CR0, EAX //write register back
               STI //enable interrupt
     }


     bProcMon = 1;

}

VOID ProcMoniterOff()
{
     DbgPrint("ProcMonitorOff/n");
     _asm
           
     {
           
               CLI //disable interrupt
               MOV EAX, CR0 //move CR0 register into EAX
               AND EAX, NOT 10000H //disable WP bit
               MOV CR0, EAX //write register back
               
     }
      
     (ZWCREATEPROCESS)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + position)) = RealZwCreateProcess ;
      
      
     _asm
     {
           
               MOV EAX, CR0 //move CR0 register into EAX
               OR EAX, 10000H //enable WP bit
               MOV CR0, EAX //write register back
               STI //enable interrupt
     }

     bProcMon = 0;

* 正在执行任务: ninja [1/6] Performing build step for 'bootloader' [1/1] cd /home/coco/esp/xiaozhi/xiaozhi-esp32/build/bootloader/esp-idf/esptool_py && /home/coco/.espressif/python_env/idf5.4_py3.8_env/bin/python /home/coco/esp/esp-idf/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 /home/coco/esp/xiaozhi/xiaozhi-esp32/build/bootloader/bootloader.bin Bootloader binary size 0x4030 bytes. 0x3fd0 bytes (50%) free. [2/4] Linking CXX executable xiaozhi.elf FAILED: xiaozhi.elf : && /home/coco/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/xtensa-esp32s3-elf-g++ -mlongcalls -fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero -fno-builtin-stpcpy -fno-builtin-strncpy -Wl,--cref -Wl,--defsym=IDF_TARGET_ESP32S3=0 -Wl,--Map=/home/coco/esp/xiaozhi/xiaozhi-esp32/build/xiaozhi.map -Wl,--no-warn-rwx-segments -Wl,--orphan-handling=warn -fno-rtti -fno-lto -Wl,--gc-sections -Wl,--warn-common -T esp32s3.peripherals.ld -T esp32s3.rom.ld -T esp32s3.rom.api.ld -T esp32s3.rom.bt_funcs.ld -T esp32s3.rom.libgcc.ld -T esp32s3.rom.wdt.ld -T esp32s3.rom.version.ld -T esp32s3.rom.ble_master.ld -T esp32s3.rom.ble_50.ld -T esp32s3.rom.ble_smp.ld -T esp32s3.rom.ble_dtm.ld -T esp32s3.rom.ble_test.ld -T esp32s3.rom.ble_scan.ld -T esp32s3.rom.newlib.ld -T memory.ld -T sections.ld CMakeFiles/xiaozhi.elf.dir/project_elf_src_esp32s3.c.obj -o xiaozhi.elf -L/home/coco/esp/esp-idf/components/soc/esp32s3/ld -L/home/coco/esp/esp-idf/components/esp_rom/esp32s3/ld -L/home/coco/esp/xiaozhi/xiaozhi-esp32/build/esp-idf/esp_system/ld -L/home/coco/esp/esp-idf/components/esp_phy/lib/esp32s3 -L/home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3 esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/app_trace/libapp_trace.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/unity/libunity.a esp-idf/cmock/libcmock.a esp-idf/console/libconsole.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_driver_cam/libesp_driver_cam.a esp-idf/esp_psram/libesp_psram.a esp-idf/esp_eth/libesp_eth.a esp-idf/esp_hid/libesp_hid.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/esp_https_server/libesp_https_server.a esp-idf/esp_lcd/libesp_lcd.a esp-idf/protobuf-c/libprotobuf-c.a esp-idf/protocomm/libprotocomm.a esp-idf/esp_local_ctrl/libesp_local_ctrl.a esp-idf/espcoredump/libespcoredump.a esp-idf/wear_levelling/libwear_levelling.a esp-idf/fatfs/libfatfs.a esp-idf/json/libjson.a esp-idf/mqtt/libmqtt.a esp-idf/nvs_sec_provider/libnvs_sec_provider.a esp-idf/perfmon/libperfmon.a esp-idf/rt/librt.a esp-idf/spiffs/libspiffs.a esp-idf/touch_element/libtouch_element.a esp-idf/usb/libusb.a esp-idf/wifi_provisioning/libwifi_provisioning.a esp-idf/78__esp-ml307/lib78__esp-ml307.a esp-idf/78__esp-opus/lib78__esp-opus.a esp-idf/78__esp-opus-encoder/lib78__esp-opus-encoder.a esp-idf/78__esp-wifi-connect/lib78__esp-wifi-connect.a esp-idf/78__esp_lcd_nv3023/lib78__esp_lcd_nv3023.a esp-idf/lvgl__lvgl/liblvgl__lvgl.a esp-idf/78__xiaozhi-fonts/lib78__xiaozhi-fonts.a esp-idf/espressif__adc_battery_estimation/libespressif__adc_battery_estimation.a esp-idf/espressif__esp_codec_dev/libespressif__esp_codec_dev.a esp-idf/espressif__adc_mic/libespressif__adc_mic.a esp-idf/espressif__button/libespressif__button.a esp-idf/espressif__dl_fft/libespressif__dl_fft.a esp-idf/espressif__esp-dsp/libespressif__esp-dsp.a esp-idf/espressif__esp-sr/libespressif__esp-sr.a esp-idf/espressif__esp_jpeg/libespressif__esp_jpeg.a esp-idf/espressif__esp32-camera/libespressif__esp32-camera.a esp-idf/espressif__esp_io_expander/libespressif__esp_io_expander.a esp-idf/espressif__esp_io_expander_tca9554/libespressif__esp_io_expander_tca9554.a esp-idf/espressif__esp_io_expander_tca95xx_16bit/libespressif__esp_io_expander_tca95xx_16bit.a esp-idf/espressif__esp_lcd_touch/libespressif__esp_lcd_touch.a esp-idf/espressif__esp_lcd_axs15231b/libespressif__esp_lcd_axs15231b.a esp-idf/espressif__esp_lcd_gc9a01/libespressif__esp_lcd_gc9a01.a esp-idf/espressif__esp_lcd_ili9341/libespressif__esp_lcd_ili9341.a esp-idf/espressif__esp_lcd_panel_io_additions/libespressif__esp_lcd_panel_io_additions.a esp-idf/espressif__esp_lcd_spd2010/libespressif__esp_lcd_spd2010.a esp-idf/espressif__esp_lcd_st77916/libespressif__esp_lcd_st77916.a esp-idf/espressif__esp_lcd_st7796/libespressif__esp_lcd_st7796.a esp-idf/espressif__esp_lcd_touch_cst816s/libespressif__esp_lcd_touch_cst816s.a esp-idf/espressif__esp_lcd_touch_ft5x06/libespressif__esp_lcd_touch_ft5x06.a esp-idf/espressif__esp_lcd_touch_gt911/libespressif__esp_lcd_touch_gt911.a esp-idf/espressif__esp_mmap_assets/libespressif__esp_mmap_assets.a esp-idf/espressif__knob/libespressif__knob.a esp-idf/espressif__led_strip/libespressif__led_strip.a esp-idf/espressif2022__esp_emote_gfx/libespressif2022__esp_emote_gfx.a esp-idf/espressif2022__image_player/libespressif2022__image_player.a esp-idf/tny-robotics__sh1106-esp-idf/libtny-robotics__sh1106-esp-idf.a esp-idf/txp666__otto-emoji-gif-component/libtxp666__otto-emoji-gif-component.a esp-idf/waveshare__esp_lcd_sh8601/libwaveshare__esp_lcd_sh8601.a esp-idf/waveshare__esp_lcd_touch_cst9217/libwaveshare__esp_lcd_touch_cst9217.a esp-idf/wvirgil123__sscma_client/libwvirgil123__sscma_client.a -Wl,--whole-archive esp-idf/main/libmain.a -Wl,--no-whole-archive esp-idf/app_trace/libapp_trace.a esp-idf/app_trace/libapp_trace.a esp-idf/cmock/libcmock.a esp-idf/unity/libunity.a esp-idf/esp_driver_cam/libesp_driver_cam.a esp-idf/esp_eth/libesp_eth.a esp-idf/esp_hid/libesp_hid.a esp-idf/esp_local_ctrl/libesp_local_ctrl.a esp-idf/esp_https_server/libesp_https_server.a esp-idf/espcoredump/libespcoredump.a -u esp_system_include_coredump_init esp-idf/fatfs/libfatfs.a esp-idf/wear_levelling/libwear_levelling.a esp-idf/nvs_sec_provider/libnvs_sec_provider.a -u nvs_sec_provider_include_impl esp-idf/perfmon/libperfmon.a esp-idf/rt/librt.a esp-idf/touch_element/libtouch_element.a esp-idf/usb/libusb.a esp-idf/wifi_provisioning/libwifi_provisioning.a esp-idf/protocomm/libprotocomm.a esp-idf/console/libconsole.a esp-idf/protobuf-c/libprotobuf-c.a esp-idf/78__esp-ml307/lib78__esp-ml307.a esp-idf/mqtt/libmqtt.a esp-idf/78__esp-opus-encoder/lib78__esp-opus-encoder.a esp-idf/78__esp-opus/lib78__esp-opus.a esp-idf/78__esp-wifi-connect/lib78__esp-wifi-connect.a esp-idf/78__esp_lcd_nv3023/lib78__esp_lcd_nv3023.a esp-idf/78__xiaozhi-fonts/lib78__xiaozhi-fonts.a esp-idf/espressif__adc_battery_estimation/libespressif__adc_battery_estimation.a esp-idf/espressif__adc_mic/libespressif__adc_mic.a esp-idf/espressif__esp_codec_dev/libespressif__esp_codec_dev.a esp-idf/espressif__esp-sr/libespressif__esp-sr.a ../managed_components/espressif__esp-sr/lib/esp32s3/libdl_lib.a ../managed_components/espressif__esp-sr/lib/esp32s3/libc_speech_features.a ../managed_components/espressif__esp-sr/lib/esp32s3/libesp_audio_front_end.a ../managed_components/espressif__esp-sr/lib/esp32s3/libesp_audio_processor.a ../managed_components/espressif__esp-sr/esp-tts/esp_tts_chinese/esp32s3/libesp_tts_chinese.a ../managed_components/espressif__esp-sr/esp-tts/esp_tts_chinese/esp32s3/libvoice_set_xiaole.a ../managed_components/espressif__esp-sr/lib/esp32s3/libfst.a ../managed_components/espressif__esp-sr/lib/esp32s3/libflite_g2p.a ../managed_components/espressif__esp-sr/lib/esp32s3/libhufzip.a ../managed_components/espressif__esp-sr/lib/esp32s3/libmultinet.a ../managed_components/espressif__esp-sr/lib/esp32s3/libnsnet.a ../managed_components/espressif__esp-sr/lib/esp32s3/libvadnet.a ../managed_components/espressif__esp-sr/lib/esp32s3/libwakenet.a esp-idf/espressif__esp-sr/libespressif__esp-sr.a ../managed_components/espressif__esp-sr/lib/esp32s3/libdl_lib.a ../managed_components/espressif__esp-sr/lib/esp32s3/libc_speech_features.a ../managed_components/espressif__esp-sr/lib/esp32s3/libesp_audio_front_end.a ../managed_components/espressif__esp-sr/lib/esp32s3/libesp_audio_processor.a ../managed_components/espressif__esp-sr/esp-tts/esp_tts_chinese/esp32s3/libesp_tts_chinese.a ../managed_components/espressif__esp-sr/esp-tts/esp_tts_chinese/esp32s3/libvoice_set_xiaole.a ../managed_components/espressif__esp-sr/lib/esp32s3/libfst.a ../managed_components/espressif__esp-sr/lib/esp32s3/libflite_g2p.a ../managed_components/espressif__esp-sr/lib/esp32s3/libhufzip.a ../managed_components/espressif__esp-sr/lib/esp32s3/libmultinet.a ../managed_components/espressif__esp-sr/lib/esp32s3/libnsnet.a ../managed_components/espressif__esp-sr/lib/esp32s3/libvadnet.a ../managed_components/espressif__esp-sr/lib/esp32s3/libwakenet.a esp-idf/spiffs/libspiffs.a esp-idf/espressif__dl_fft/libespressif__dl_fft.a esp-idf/espressif__esp-dsp/libespressif__esp-dsp.a -L /home/coco/esp/xiaozhi/xiaozhi-esp32/managed_components/espressif__esp-sr/lib/esp32s3 -L /home/coco/esp/xiaozhi/xiaozhi-esp32/managed_components/espressif__esp-sr/esp-tts/esp_tts_chinese/esp32s3 esp-idf/espressif__esp-dsp/libespressif__esp-dsp.a esp-idf/espressif__dl_fft/libespressif__dl_fft.a esp-idf/espressif__esp32-camera/libespressif__esp32-camera.a esp-idf/espressif__esp_jpeg/libespressif__esp_jpeg.a esp-idf/espressif__esp_io_expander_tca9554/libespressif__esp_io_expander_tca9554.a esp-idf/espressif__esp_io_expander_tca95xx_16bit/libespressif__esp_io_expander_tca95xx_16bit.a esp-idf/espressif__esp_lcd_axs15231b/libespressif__esp_lcd_axs15231b.a esp-idf/espressif__esp_lcd_gc9a01/libespressif__esp_lcd_gc9a01.a esp-idf/espressif__esp_lcd_ili9341/libespressif__esp_lcd_ili9341.a esp-idf/espressif__esp_lcd_panel_io_additions/libespressif__esp_lcd_panel_io_additions.a esp-idf/espressif__esp_lcd_spd2010/libespressif__esp_lcd_spd2010.a esp-idf/espressif__esp_lcd_st77916/libespressif__esp_lcd_st77916.a esp-idf/espressif__esp_lcd_st7796/libespressif__esp_lcd_st7796.a esp-idf/espressif__esp_lcd_touch_cst816s/libespressif__esp_lcd_touch_cst816s.a esp-idf/espressif__esp_lcd_touch_ft5x06/libespressif__esp_lcd_touch_ft5x06.a esp-idf/espressif__esp_lcd_touch_gt911/libespressif__esp_lcd_touch_gt911.a esp-idf/espressif__esp_lvgl_port/liblvgl_port_lib.a esp-idf/espressif__button/libespressif__button.a esp-idf/espressif__esp_mmap_assets/libespressif__esp_mmap_assets.a esp-idf/espressif__knob/libespressif__knob.a esp-idf/espressif__led_strip/libespressif__led_strip.a esp-idf/espressif2022__esp_emote_gfx/libespressif2022__esp_emote_gfx.a -Wl,--start-group -Wl,--end-group ../managed_components/espressif__esp_new_jpeg/lib/esp32s3/libesp_new_jpeg.a esp-idf/espressif__freetype/output/libfreetype.a esp-idf/espressif2022__image_player/libespressif2022__image_player.a esp-idf/tny-robotics__sh1106-esp-idf/libtny-robotics__sh1106-esp-idf.a esp-idf/txp666__otto-emoji-gif-component/libtxp666__otto-emoji-gif-component.a esp-idf/lvgl__lvgl/liblvgl__lvgl.a esp-idf/waveshare__esp_lcd_sh8601/libwaveshare__esp_lcd_sh8601.a esp-idf/waveshare__esp_lcd_touch_cst9217/libwaveshare__esp_lcd_touch_cst9217.a esp-idf/espressif__esp_lcd_touch/libespressif__esp_lcd_touch.a esp-idf/esp_lcd/libesp_lcd.a esp-idf/wvirgil123__sscma_client/libwvirgil123__sscma_client.a esp-idf/json/libjson.a esp-idf/espressif__esp_io_expander/libespressif__esp_io_expander.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_psram/libesp_psram.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libespnow.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libmesh.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libpp.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libsmartconfig.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_psram/libesp_psram.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libespnow.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libmesh.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libpp.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libsmartconfig.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_psram/libesp_psram.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libespnow.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libmesh.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libpp.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libsmartconfig.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_psram/libesp_psram.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libespnow.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libmesh.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libpp.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libsmartconfig.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_psram/libesp_psram.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libespnow.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libmesh.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libpp.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libsmartconfig.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_psram/libesp_psram.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libespnow.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libmesh.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libpp.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libsmartconfig.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libwapi.a /home/coco/esp/esp-idf/components/xtensa/esp32s3/libxt_hal.a -Wl,--wrap=mbedtls_ssl_write_client_hello -Wl,--wrap=mbedtls_ssl_handshake_client_step -Wl,--wrap=mbedtls_ssl_handshake_server_step -Wl,--wrap=mbedtls_ssl_read -Wl,--wrap=mbedtls_ssl_write -Wl,--wrap=mbedtls_ssl_session_reset -Wl,--wrap=mbedtls_ssl_free -Wl,--wrap=mbedtls_ssl_setup -Wl,--wrap=mbedtls_ssl_send_alert_message -Wl,--wrap=mbedtls_ssl_close_notify -u esp_app_desc -u esp_efuse_startup_include_func -u ld_include_highint_hdl -u start_app -u start_app_other_cores -u __ubsan_include -u esp_system_include_startup_funcs -Wl,--wrap=longjmp -u __assert_func -u esp_security_init_include_impl -u esp_sleep_gpio_include -Wl,--undefined=FreeRTOS_openocd_params -u app_main -lc -lm -u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u newlib_include_assert_impl -u newlib_include_getentropy_impl -u newlib_include_init_funcs --specs=nano.specs -u pthread_include_pthread_impl -u pthread_include_pthread_cond_var_impl -u pthread_include_pthread_local_storage_impl -u pthread_include_pthread_rwlock_impl -u pthread_include_pthread_semaphore_impl -u __cxa_guard_dummy -u __cxx_init_dummy -lstdc++ esp-idf/pthread/libpthread.a esp-idf/newlib/libnewlib.a -lgcc esp-idf/cxx/libcxx.a -u esp_timer_init_include_func -u uart_vfs_include_dev_init -u usb_serial_jtag_vfs_include_dev_init -u usb_serial_jtag_connection_monitor_include -u include_esp_phy_override -lphy -lbtbb esp-idf/esp_phy/libesp_phy.a -lphy -lbtbb esp-idf/esp_phy/libesp_phy.a -lphy -lbtbb -u esp_vfs_include_console_register -u vfs_include_syscalls_impl -u esp_vfs_include_nullfs_register && : /home/coco/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/14.2.0/../../../../xtensa-esp-elf/bin/ld: /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a(ieee80211_regdomain.o):(.text.ieee80211_get_regdomain+0x0): undefined reference to `regdomain_table' /home/coco/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/14.2.0/../../../../xtensa-esp-elf/bin/ld: /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a(ieee80211_regdomain.o):(.text.ieee80211_get_regdomain+0x4): undefined reference to `regulatory_data' collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed. * 终端进程“ninja”已终止,退出代码: 1。 idf编译小智ai出现错误(源码,没有修改过)
最新发布
09-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值