ARM学习(26)链接库的依赖查看

笔者今天来聊一下查看链接库的依赖。

通常情况下,运行一个可执行文件的时候,可能会出现找不到依赖库的情况,比如图下这种情况,可以看到是缺少了license.dll或者libtest.so,所以无法运行。怎么知道它到底缺少什么dll呢?有可能缺少不止一个dll呢?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、PE格式下面查看依赖

1、Dependency Walker工具显示依赖

有一个工具,Dependency Walker,可以显示exe的依赖,以及dll的依赖。比如刚刚那个main.exe,可以看到缺少LICENSE.dll。
在这里插入图片描述
再比如:QT的一些库:Qt5SerialPort.dll,串口库,会依赖QT5CORE.dll、SETUPAPI.dll等

在这里插入图片描述

还比如python的库,本质上也是dll,同样可以看到依赖,缺少:Python3 和python38的dll,如下图所示。

在这里插入图片描述

2、PE工具读取导入表

相比上面那个工具,PE解析工具功能相关更多,可以查看DOS、NT header,section内容等。
例如section 导入表
在这里插入图片描述
还可以看到导入表的函数,当然导出表的函数也可以看到。
在这里插入图片描述

3、命令行工具dumpbin.exe

微软也提供了一个命令行工具: dumpbin.exe同样可以看到依赖。
需要输入参数 /DEPENDENTS,即可显示依赖。
在这里插入图片描述
查看其它功能,发现其优点与readelf文件一样,可以用来解析PE工具,其功能主要如下:

Microsoft (R) COFF/PE Dumper Version 14.29.30141.0
Copyright (C) Microsoft Corporation.  All rights reserved.

用法: DUMPBIN [选项] [文件]

  选项:

   /ALL
   /ARCHIVEMEMBERS
   /CLRHEADER
   /DEPENDENTS
   /DIRECTIVES
   /DISASM[:{BYTES|NOBYTES}]
   /ERRORREPORT:{NONE|PROMPT|QUEUE|SEND}
   /EXPORTS
   /FPO
   /HEADERS
   /IMPORTS[:文件名]
      /LINENUMBERS
      /LINKERMEMBER[:{1|2|4|8|16|32}]
   /LOADCONFIG
   /NOLOGO
      /NOPDB
      /OUT:filename
   /PDATA
   /PDBPATH[:VERBOSE]
   /RANGE:vaMin[,vaMax]
   /RAWDATA[:{NONE|1|2|4|8}[,#]]
   /RELOCATIONS
   /SECTION:名称
   /SUMMARY
   /SYMBOLS
   /TLS
   /UNWINDINFO

比如查看导入表和导出表,dumpbin.exe /IMPORTS Qt5SerialPort.dll
可以看到其依赖了很多dll的符号。

Microsoft (R) COFF/PE Dumper Version 14.29.30141.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file Qt5SerialPort.dll

File Type: DLL

  Section contains the following imports:

    Qt5Core.dll
              100090CC Import Address Table
              1000CBE0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                  BE5 ?data@QByteArray@@QAEPADXZ
                  A77 ?constData@QByteArray@@QBEPBDXZ
                  9C8 ?clear@QByteArray@@QAEXXZ
                  1F8 ??0QString@@QAE@$$QAV0@@Z
                 1F47 ?utf16@QString@@QBEPBGXZ
                 1D1F ?toLocal8Bit@QString@@QHAE?AVQByteArray@@XZ
                  C6C ?detach@QListData@@QAEPAUData@1@H@Z
                  C75 ?detach_grow@QListData@@QAEPAUData@1@PAHH@Z
                 1707 ?realloc@QListData@@QAEXH@Z
                  85B ?append@QListData@@QAEPAPAXXZ
                  A61 ?connectImpl@QObject@@CA?AVConnection@QMetaObject@@PBV1@PAPAX01PAVQSlotObjectBase@QtPrivate@@W4ConnectionType@Qt@@PBHPBU3@@Z
                 16FD ?readyRead@QIODevice@@QAEXXZ
                  92B ?bytesWritten@QIODevice@@QAEX_J@Z
                 16D3 ?read@QRingBuffer@@QAE?AVQByteArray@@XZ
                  85D ?append@QRingBuffer@@QAEXPBD_J@Z
                  EEF ?get@QObjectPrivate@@SAPAV1@PAVQObject@@@Z
                   C7 ??0QDeadlineTimer@@QAE@_JW4TimerType@Qt@@@Z
                  F2B ?hasExpired@QDeadlineTimer@@QBE_NXZ
                 1752 ?remainingTime@QDeadlineTimer@@QBE_JXZ
                  156 ??0QLibrary@@QAE@PAVQObject@@@Z
                  322 ??1QLibrary@@UAE@XZ
                 1826 ?resolve@QLibrary@@QAEP6AXXZPBD@Z
                 127A ?load@QLibrary@@QAE_NXZ
                 10F0 ?isLoaded@QLibrary@@QBE_NXZ
                 1968 ?setFileName@QLibrary@@QAEXABVQString@@@Z
                  DE4 ?fileName@QLibrary@@QBE?AVQString@@XZ
                  D70 ?errorString@QLibrary@@QBE?AVQString@@XZ
                 15DC ?qt_error_string@@YA?AVQString@@H@Z
                 129D ?lock@QMutex@@QAEXXZ
                 1F0B ?unlock@QMutexLocker@@QAEXXZ
                  23A ??0QTimer@@QAE@PAVQObject@@@Z
                  369 ??1QTimer@@UAE@XZ
                 1B55 ?start@QTimer@@QAEXXZ
                 1C84 ?timeout@QTimer@@QAEXUQPrivateSignal@1@@Z
                  3A7 ??4QByteArray@@QAEAAV0@$$QAV0@@Z
                 1616 ?qt_metacall@QTimer@@UAEHW4Call@QMetaObject@@HPAPAX@Z
                 1653 ?qt_metacast@QTimer@@UAEPAXPBD@Z
                 1C87 ?timerEvent@QTimer@@MAEXPAVQTimerEvent@@@Z
                 1AA6 ?shared_null@QListData@@2UData@1@B
                 1BD7 ?staticMetaObject@QTimer@@2UQMetaObject@@B
                   9A ??0QChar@@QAE@UQLatin1Char@@@Z
                  455 ??4QString@@QAEAAV0@ABV0@@Z
                  A79 ?constData@QString@@QBEPBVQChar@@XZ
                  886 ?arg@QString@@QBE?AV1@KHHVQChar@@@Z
                  F99 ?indexOf@QString@@QBEHVQChar@@HW4CaseSensitivity@Qt@@@Z
                  F9A ?indexOf@QString@@QBEHVQLatin1String@@HW4CaseSensitivity@Qt@@@Z
                  F94 ?indexOf@QString@@QBEHABV1@HW4CaseSensitivity@Qt@@@Z
                 1245 ?lastIndexOf@QString@@QBEHVQChar@@HW4CaseSensitivity@Qt@@@Z
                 1357 ?mid@QString@@QBE?AV1@HH@Z
                 1B7F ?startsWith@QString@@QBE_NVQLatin1String@@W4CaseSensitivity@Qt@@@Z
                 1DEA ?toUpper@QString@@QHAE?AV1@XZ
                  EDA ?fromWCharArray@QString@@SA?AV1@PB_WH@Z
                 1CFA ?toInt@QString@@QBEHPA_NH@Z
                  1FD ??0QString@@QAE@HW4Initialization@Qt@@@Z
                  869 ?appendLatin1To@QAbstractConcatenable@@KAXPBDHPAVQChar@@@Z
                   56 ??0QByteArray@@QAE@$$QAV0@@Z
                  CA5 ?dispose@QListData@@SAXPAUData@1@@Z
                  570 ??8@YA_NABVQString@@0@Z
                 1C85 ?timerEvent@QObject@@MAEXPAVQTimerEvent@@@Z
                 1AFC ?skip@QIODevicePrivate@@UAE_J_J@Z
                 1AEC ?size@QIODevice@@UBE_JXZ
                 18B1 ?seek@QIODevice@@UAE_N_J@Z
                 180F ?reset@QIODevice@@UAE_NXZ
                 1535 ?putCharHelper@QIODevicePrivate@@UAE_ND@Z
                 14B5 ?pos@QIODevice@@UBE_JXZ
                 148F ?peek@QIODevicePrivate@@UAE_JPAD_J@Z
                 148E ?peek@QIODevicePrivate@@UAE?AVQByteArray@@_J@Z
                  D9B ?eventFilter@QObject@@UAE_NPAV1@PAVQEvent@@@Z
                  D89 ?event@QObject@@UAE_NPAVQEvent@@@Z
                  C9A ?disconnectNotify@QObject@@MAEXABVQMetaMethod@@@Z
                 133A ?metaObject@QTimer@@UBEPBUQMetaObject@@XZ
                  2C3 ??1Connection@QMetaObject@@QAE@XZ
                  B62 ?customEvent@QObject@@MAEXPAVQEvent@@@Z
                  A65 ?connectNotify@QObject@@MAEXABVQMetaMethod@@@Z
                  9A9 ?childEvent@QObject@@MAEXPAVQChildEvent@@@Z
                  316 ??1QIODevicePrivate@@UAE@XZ
                  11B ??0QIODevicePrivate@@QAE@XZ
                  9D0 ?clear@QRingBuffer@@QAEXXZ
                 1955 ?setErrorString@QIODevice@@IAEXABVQString@@@Z
                 16EE ?readLineData@QIODevice@@MAE_JPAD_J@Z
                  118 ??0QIODevice@@IAE@AAVQIODevicePrivate@@PAVQObject@@@Z
                  944 ?canReadLine@QIODevice@@UBE_NXZ
                  927 ?bytesToWrite@QIODevice@@UBE_JXZ
                  922 ?bytesAvailable@QIODevice@@UBE_JXZ
                  8AA ?atEnd@QIODevice@@UBE_NXZ
                  9ED ?close@QIODevice@@UAEXXZ
                 1444 ?open@QIODevice@@UAE_NV?$QFlags@W4OpenModeFlag@QIODevice@@@@@Z
                 1149 ?isReadable@QIODevice@@QBE_NXZ
                 1132 ?isOpen@QIODevice@@QBE_NXZ
                  315 ??1QIODevice@@UAE@XZ
                 15FA ?qt_metacall@QIODevice@@UAEHW4Call@QMetaObject@@HPAPAX@Z
                 1637 ?qt_metacast@QIODevice@@UAEPAXPBD@Z
                  CCB ?dynamicMetaObject@QObjectData@@QBEPAUQMetaObject@@XZ
                 1126 ?isNull@QString@@QBE_NXZ
                  453 ??4QString@@QAEAAV0@$$QAV0@@Z
                  356 ??1QString@@QAE@XZ
                  1FA ??0QString@@QAE@ABV0@@Z
                  203 ??0QString@@QAE@XZ
                  2E0 ??1QByteArray@@QAE@XZ
                   58 ??0QByteArray@@QAE@HD@Z
                   5C ??0QByteArray@@QAE@XZ
                  7BA ?activate@QMetaObject@@SAXPAVQObject@@PBU1@HPAPAX@Z
                 1E38 ?tr@QMetaObject@@QBE?AVQString@@PBD0H@Z
                 1F9D ?warning@QMessageLogger@@QBAXPBDZZ
                  16B ??0QMessageLogger@@QAE@PBDH0@Z
                   4B ??0QBasicMutex@@QAE@XZ
                 1BB8 ?staticMetaObject@QIODevice@@2UQMetaObject@@B

    SETUPAPI.dll
              1000927C Import Address Table
              1000CD90 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                   80 CM_Get_Parent
                   52 CM_Get_DevNode_Status
                   55 CM_Get_Device_IDW
                  172 SetupDiGetDeviceRegistryPropertyW
                  191 SetupDiOpenDevRegKey
                  154 SetupDiGetClassDevsW
                  13D SetupDiDestroyDeviceInfoList
                  140 SetupDiEnumDeviceInfo

    ADVAPI32.dll
              10009000 Import Address Table
              1000CB14 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                  25B RegCloseKey
                  28C RegOpenKeyExW
                  299 RegQueryValueExW
                  27D RegEnumValueW

    MSVCP140.dll
              100090C4 Import Address Table
              1000CBD8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                  28E ?_Xlength_error@std@@YAXPBD@Z

    KERNEL32.dll
              10009014 Import Address Table
              1000CB28 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                   BF CreateEventW
                  5D8 WaitForSingleObjectEx
                  4C6 ResetEvent
                  516 SetEvent
                  110 DeleteCriticalSection
                  35F InitializeCriticalSectionAndSpinCount
                  3BD LeaveCriticalSection
                  131 EnterCriticalSection
                  4E1 SetCommTimeouts
                  4E0 SetCommState
                  4DF SetCommMask
                  4DD SetCommBreak
                  43E PurgeComm
                  1D5 GetCommTimeouts
                  2AE GetProcAddress
                  1D2 GetCommModemStatus
                  15D EscapeCommFunction
                   84 ClearCommError
                   83 ClearCommBreak
                  57D Sleep
                  580 SleepEx
                   72 CancelIoEx
                  11D DeviceIoControl
                  532 SetLastError
                  261 GetLastError
                   86 CloseHandle
                  613 WriteFileEx
                  474 ReadFileEx
                   CB CreateFileW
                  278 GetModuleHandleW
                  37F IsDebuggerPresent
                  5AD UnhandledExceptionFilter
                  1D4 GetCommState
                  386 IsProcessorFeaturePresent
                  217 GetCurrentProcess
                  58C TerminateProcess
                  44D QueryPerformanceCounter
                  218 GetCurrentProcessId
                  21C GetCurrentThreadId
                  2E9 GetSystemTimeAsFileTime
                  11E DisableThreadLibraryCalls
                  363 InitializeSListHead
                  56D SetUnhandledExceptionFilter

    VCRUNTIME140.dll
              100092A0 Import Address Table
              1000CDB4 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                   46 memcpy
                    1 _CxxThrowException
                   10 __CxxFrameHandler3
                   47 memmove
                   21 __std_exception_copy
                   22 __std_exception_destroy
                   48 memset
                   35 _except_handler4_common
                   25 __std_type_info_destroy_list

    api-ms-win-crt-runtime-l1-1-0.dll
              100092D8 Import Address Table
              1000CDEC Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                   19 _configure_narrow_argv
                   35 _initialize_narrow_environment
                   36 _initialize_onexit_table
                   41 _seh_filter_dll
                   24 _execute_onexit_table
                   1F _crt_atexit
                   17 _cexit
                   38 _initterm
                   39 _initterm_e
                   3E _register_onexit_function
                   3B _invalid_parameter_noinfo_noreturn

    api-ms-win-crt-heap-l1-1-0.dll
              100092C8 Import Address Table
              1000CDDC Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                    8 _callnewh
                   19 malloc
                   18 free

  Summary

        1000 .data
        6000 .rdata
        1000 .reloc
        1000 .rsrc
        8000 .text

查看导出表,dumpbin.exe /EXPORTS Qt5SerialPort.dll

Microsoft (R) COFF/PE Dumper Version 14.29.30141.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file Qt5SerialPort.dll

File Type: DLL

  Section contains the following exports for Qt5SerialPort.dll

    00000000 characteristics
    FFFFFFFF time date stamp
        0.00 version
           1 ordinal base
          95 number of functions
          95 number of names

    ordinal hint RVA      name

          1    0 00001010 ??0QSerialPort@@QAE@ABVQSerialPortInfo@@PAVQObject@@@Z
          2    1 00001080 ??0QSerialPort@@QAE@ABVQString@@PAVQObject@@@Z
          3    2 000010F0 ??0QSerialPort@@QAE@PAVQObject@@@Z
          4    3 00002AD0 ??0QSerialPortInfo@@AAE@ABVQSerialPortInfoPrivate@@@Z
          5    4 00002AF0 ??0QSerialPortInfo@@QAE@ABV0@@Z
          6    5 00002B30 ??0QSerialPortInfo@@QAE@ABVQSerialPort@@@Z
          7    6 00002B60 ??0QSerialPortInfo@@QAE@ABVQString@@@Z
          8    7 00002D70 ??0QSerialPortInfo@@QAE@XZ
          9    8 00001350 ??1QSerialPort@@UAE@XZ
         10    9 00002DF0 ??1QSerialPortInfo@@QAE@XZ
         11    A 00002E30 ??4QSerialPortInfo@@QAEAAV0@ABV0@@Z
         12    B 0000A524 ??_7QSerialPort@@6B@
         13    C 00001410 ??_FQSerialPort@@QAEXXZ
         14    D 000014A0 ?atEnd@QSerialPort@@UBE_NXZ
         15    E 00006220 ?availablePorts@QSerialPortInfo@@SA?AV?$QList@VQSerialPortInfo@@@@XZ
         16    F 000014B0 ?baudRate@QSerialPort@@QBEHV?$QFlags@W4Direction@QSerialPort@@@@@Z
         17   10 000014F0 ?baudRateChanged@QSerialPort@@QAEXHV?$QFlags@W4Direction@QSerialPort@@@@@Z
         18   11 00001540 ?breakEnabledChanged@QSerialPort@@QAEX_N@Z
         19   12 00001570 ?bytesAvailable@QSerialPort@@UBE_JXZ
         20   13 00001580 ?bytesToWrite@QSerialPort@@UBE_JXZ
         21   14 000015B0 ?canReadLine@QSerialPort@@UBE_NXZ
         22   15 000015C0 ?clear@QSerialPort@@QAE_NV?$QFlags@W4Direction@QSerialPort@@@@@Z
         23   16 00001670 ?clearError@QSerialPort@@QAEXXZ
         24   17 000016B0 ?close@QSerialPort@@UAEXXZ
         25   18 00001720 ?d_func@QSerialPort@@AAEPAVQSerialPortPrivate@@XZ
         26   19 00001720 ?d_func@QSerialPort@@ABEPBVQSerialPortPrivate@@XZ
         27   1A 00001730 ?d_func@QSerialPortInfo@@AAEPAVQSerialPortInfoPrivate@@XZ
         28   1B 00001730 ?d_func@QSerialPortInfo@@ABEPBVQSerialPortInfoPrivate@@XZ
         29   1C 00001740 ?dataBits@QSerialPort@@QBE?AW4DataBits@1@XZ
         30   1D 00001750 ?dataBitsChanged@QSerialPort@@QAEXW4DataBits@1@@Z
         31   1E 00001780 ?dataErrorPolicy@QSerialPort@@QBE?AW4DataErrorPolicy@1@XZ
         32   1F 00001790 ?dataErrorPolicyChanged@QSerialPort@@QAEXW4DataErrorPolicy@1@@Z
         33   20 000017C0 ?dataTerminalReadyChanged@QSerialPort@@QAEX_N@Z
         34   21 00002EA0 ?description@QSerialPortInfo@@QBE?AVQString@@XZ
         35   22 000017F0 ?error@QSerialPort@@QAEXW4SerialPortError@1@@Z
         36   23 00001820 ?error@QSerialPort@@QBE?AW4SerialPortError@1@XZ
         37   24 00001830 ?errorOccurred@QSerialPort@@QAEXW4SerialPortError@1@@Z
         38   25 00001860 ?flowControl@QSerialPort@@QBE?AW4FlowControl@1@XZ
         39   26 00001870 ?flowControlChanged@QSerialPort@@QAEXW4FlowControl@1@@Z
         40   27 000018A0 ?flush@QSerialPort@@QAE_NXZ
         41   28 00003BF0 ?handle@QSerialPort@@QBEPAXXZ
         42   29 00002F10 ?hasProductIdentifier@QSerialPortInfo@@QBE_NXZ
         43   2A 00002F20 ?hasVendorIdentifier@QSerialPortInfo@@QBE_NXZ
         44   2B 00001920 ?isBreakEnabled@QSerialPort@@QBE_NXZ
         45   2C 000072C0 ?isBusy@QSerialPortInfo@@QBE_NXZ
         46   2D 00001930 ?isDataTerminalReady@QSerialPort@@QAE_NXZ
         47   2E 00001950 ?isNull@QSerialPortInfo@@QBE_NXZ
         48   2F 00001960 ?isRequestToSend@QSerialPort@@QAE_NXZ
         49   30 00001980 ?isSequential@QSerialPort@@UBE_NXZ
         50   31 00007320 ?isValid@QSerialPortInfo@@QBE_NXZ
         51   32 00002F30 ?manufacturer@QSerialPortInfo@@QBE?AVQString@@XZ
         52   33 00001990 ?metaObject@QSerialPort@@UBEPBUQMetaObject@@XZ
         53   34 000019B0 ?open@QSerialPort@@UAE_NV?$QFlags@W4OpenModeFlag@QIODevice@@@@@Z
         54   35 00001AC0 ?parity@QSerialPort@@QBE?AW4Parity@1@XZ
         55   36 00001AD0 ?parityChanged@QSerialPort@@QAEXW4Parity@1@@Z
         56   37 00001B00 ?pinoutSignals@QSerialPort@@QAE?AV?$QFlags@W4PinoutSignal@QSerialPort@@@@XZ
         57   38 00001B90 ?portName@QSerialPort@@QBE?AVQString@@XZ
         58   39 00002FA0 ?portName@QSerialPortInfo@@QBE?AVQString@@XZ
         59   3A 00003000 ?productIdentifier@QSerialPortInfo@@QBEGXZ
         60   3B 00001BB0 ?qt_metacall@QSerialPort@@UAEHW4Call@QMetaObject@@HPAPAX@Z
         61   3C 00001C70 ?qt_metacast@QSerialPort@@UAEPAXPBD@Z
         62   3D 00001CD0 ?qt_static_metacall@QSerialPort@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z
         63   3E 00002110 ?readBufferSize@QSerialPort@@QBE_JXZ
         64   3F 00002120 ?readData@QSerialPort@@MAE_JPAD_J@Z
         65   40 00002130 ?readLineData@QSerialPort@@MAE_JPAD_J@Z
         66   41 00002150 ?requestToSendChanged@QSerialPort@@QAEX_N@Z
         67   42 00002180 ?sendBreak@QSerialPort@@QAE_NH@Z
         68   43 00003010 ?serialNumber@QSerialPortInfo@@QBE?AVQString@@XZ
         69   44 00002210 ?setBaudRate@QSerialPort@@QAE_NHV?$QFlags@W4Direction@QSerialPort@@@@@Z
         70   45 000022F0 ?setBreakEnabled@QSerialPort@@QAE_N_N@Z
         71   46 000023D0 ?setDataBits@QSerialPort@@QAE_NW4DataBits@1@@Z
         72   47 00002450 ?setDataErrorPolicy@QSerialPort@@QAE_NW4DataErrorPolicy@1@@Z
         73   48 00002520 ?setDataTerminalReady@QSerialPort@@QAE_N_N@Z
         74   49 00002690 ?setFlowControl@QSerialPort@@QAE_NW4FlowControl@1@@Z
         75   4A 00002710 ?setParity@QSerialPort@@QAE_NW4Parity@1@@Z
         76   4B 00002790 ?setPort@QSerialPort@@QAEXABVQSerialPortInfo@@@Z
         77   4C 000027C0 ?setPortName@QSerialPort@@QAEXABVQString@@@Z
         78   4D 000027F0 ?setReadBufferSize@QSerialPort@@QAEX_J@Z
         79   4E 00002820 ?setRequestToSend@QSerialPort@@QAE_N_N@Z
         80   4F 00002920 ?setSettingsRestoredOnClose@QSerialPort@@QAEX_N@Z
         81   50 00002970 ?setStopBits@QSerialPort@@QAE_NW4StopBits@1@@Z
         82   51 000029F0 ?settingsRestoredOnClose@QSerialPort@@QBE_NXZ
         83   52 00002A00 ?settingsRestoredOnCloseChanged@QSerialPort@@QAEX_N@Z
         84   53 00003080 ?standardBaudRates@QSerialPortInfo@@SA?AV?$QList@H@@XZ
         85   54 0000F000 ?staticMetaObject@QSerialPort@@2UQMetaObject@@B
         86   55 00002A30 ?stopBits@QSerialPort@@QBE?AW4StopBits@1@XZ
         87   56 00002A40 ?stopBitsChanged@QSerialPort@@QAEXW4StopBits@1@@Z
         88   57 000030A0 ?swap@QSerialPortInfo@@QAEXAAV1@@Z
         89   58 000030C0 ?systemLocation@QSerialPortInfo@@QBE?AVQString@@XZ
         90   59 00002A70 ?tr@QSerialPort@@SA?AVQString@@PBD0H@Z
         91   5A 00002A70 ?trUtf8@QSerialPort@@SA?AVQString@@PBD0H@Z
         92   5B 00003130 ?vendorIdentifier@QSerialPortInfo@@QBEGXZ
         93   5C 00002A90 ?waitForBytesWritten@QSerialPort@@UAE_NH@Z
         94   5D 00002AA0 ?waitForReadyRead@QSerialPort@@UAE_NH@Z
         95   5E 00002AB0 ?writeData@QSerialPort@@MAE_JPBD_J@Z

  Summary

        1000 .data
        6000 .rdata
        1000 .reloc
        1000 .rsrc
        8000 .text

4、命令行工具 objdump

objdump工具可以解析PE格式,提取header信息,以及导入导出表等信息。

$ objdump
Usage: C:\MinGW\bin\objdump.exe <option(s)> <file(s)>
 Display information from object <file(s)>.
 At least one of the following switches must be given:
  -a, --archive-headers    Display archive header information
  -f, --file-headers       Display the contents of the overall file header
  -p, --private-headers    Display object format specific file header contents
  -P, --private=OPT,OPT... Display object format specific contents
  -h, --[section-]headers  Display the contents of the section headers
  -x, --all-headers        Display the contents of all headers
  -d, --disassemble        Display assembler contents of executable sections
  -D, --disassemble-all    Display assembler contents of all sections
  -S, --source             Intermix source code with disassembly
  -s, --full-contents      Display the full contents of all sections requested
  -g, --debugging          Display debug information in object file
  -e, --debugging-tags     Display debug information using ctags style
  -G, --stabs              Display (in raw form) any STABS info in the file
  -W[lLiaprmfFsoRt] or
  --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,
          =frames-interp,=str,=loc,=Ranges,=pubtypes,
          =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,
          =addr,=cu_index]
                           Display DWARF info in the file
  -t, --syms               Display the contents of the symbol table(s)
  -T, --dynamic-syms       Display the contents of the dynamic symbol table
  -r, --reloc              Display the relocation entries in the file
  -R, --dynamic-reloc      Display the dynamic relocation entries in the file
  @<file>                  Read options from <file>
  -v, --version            Display this program's version number
  -i, --info               List object formats and architectu

比如导入表信息,可以看到依赖的库信息。

D:\个人资料\OD\license_study>objdump -p main.exe

There is an import table in .idata at 0x408000

The Import Tables (interpreted .idata section contents)
 vma:            Hint    Time      Forward  DLL       First
                 Table   Stamp     Chain    Name      Thunk
 00008000       00008064 00000000 00000000 00008568 0000814c

        DLL Name: KERNEL32.dll
        vma:  Hint/Ord Member-Name Bound-To
        8234      207  DeleteCriticalSection
        824c      236  EnterCriticalSection
        8264      279  ExitProcess
        8272      300  FindClose
        827e      304  FindFirstFileA
        8290      321  FindNextFileA
        82a0      352  FreeLibrary
        82ae      388  GetCommandLineA
        82c0      510  GetLastError
        82d0      529  GetModuleHandleA
        82e4      577  GetProcAddress
        82f6      734  InitializeCriticalSection
        8312      814  LeaveCriticalSection
        832a      817  LoadLibraryA
        833a     1140  SetUnhandledExceptionFilter
        8358     1173  TlsGetValue
        8366     1213  VirtualProtect
        8378     1215  VirtualQuery

 00008014       000080b0 00000000 00000000 00008580 00008198

        DLL Name: msvcrt.dll
        vma:  Hint/Ord Member-Name Bound-To
        8388       80  _strdup
        8392       82  _stricoll

 00008028       000080bc 00000000 00000000 00008610 000081a4

        DLL Name: msvcrt.dll
        vma:  Hint/Ord Member-Name Bound-To
        839e       88  __getmainargs
        83ae      119  __mb_cur_max
        83be      131  __p__environ
        83ce      133  __p__fmode
        83dc      153  __set_app_type
        83ee      219  _cexit
        83f8      285  _errno
        8402      324  _fpreset
        840e      350  _fullpath
        841a      417  _iob
        8422      422  _isctype
        842e      689  _onexit
        8438      698  _pctype
        8442      753  _setmode
        844e     1083  abort
        8456     1091  atexit
        8460     1098  calloc
        846a     1131  free
        8472     1142  fwrite
        847c     1187  malloc
        8486     1194  mbstowcs
        8492     1199  memcpy
        849c     1208  printf
        84a6     1211  putchar
        84b0     1212  puts
        84b8     1220  realloc
        84c2     1227  setlocale
        84ce     1229  signal
        84d8     1242  strcoll
        84e2     1249  strlen
        84ec     1277  tolower
        84f6     1284  vfprintf
        8502     1325  wcstombs

 0000803c       00008144 00000000 00000000 00008620 0000822c

        DLL Name: license.dll
        vma:  Hint/Ord Member-Name Bound-To
        8510        0  get_license

 00008050       00000000 00000000 00000000 00000000 00000000

看到header信息

main.exe:     file format pei-i386

Characteristics 0x107
        relocations stripped
        executable
        line numbers stripped
        32 bit words

Time/Date               Tue Feb 06 15:38:57 2024
Magic                   010b    (PE32)
MajorLinkerVersion      2
MinorLinkerVersion      28
SizeOfCode              00003000
SizeOfInitializedData   00004e00
SizeOfUninitializedData 00000200
AddressOfEntryPoint     000012e0
BaseOfCode              00001000
BaseOfData              00004000
ImageBase               00400000
SectionAlignment        00001000
FileAlignment           00000200
MajorOSystemVersion     4
MinorOSystemVersion     0
MajorImageVersion       1
MinorImageVersion       0
MajorSubsystemVersion   4
MinorSubsystemVersion   0
Win32Version            00000000
SizeOfImage             00011000
SizeOfHeaders           00000400
CheckSum                00013a06
Subsystem               00000003        (Windows CUI)
DllCharacteristics      00000000
SizeOfStackReserve      00200000
SizeOfStackCommit       00001000
SizeOfHeapReserve       00100000
SizeOfHeapCommit        00001000
LoaderFlags             00000000
NumberOfRvaAndSizes     00000010

二、ELF格式下面查看依赖

1、readelf工具

比如刚刚那个a.out文件,可以通过readelf 可以查看依赖,方便定位问题。
readelf -d xxxx.elf 文件,-d用来显示动态的section,即依赖的动态链接库。
在这里插入图片描述
示例操作:可以看到a.out除了依赖libtest.so,还依赖libc库。
在这里插入图片描述
readelf 这个工具是命令行工具,用来解析elf文件格式,linux下面也可以使用。

2、objdump工具

windows下面解析PE格式文件,linux下面解析elf文件格式,很方便的跨平台工具,windows下面mingw的一个工具。
在这里插入图片描述
当然同elf文件一样,也可以解析header,symbol,section等信息。

a.out:     file format elf64-little
a.out
architecture: UNKNOWN!, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x0000000000400810

Program Header:
    PHDR off    0x0000000000000040 vaddr 0x0000000000400040 paddr 0x0000000000400040 align 2**3
         filesz 0x0000000000000188 memsz 0x0000000000000188 flags r-x
  INTERP off    0x00000000000001c8 vaddr 0x00000000004001c8 paddr 0x00000000004001c8 align 2**0
         filesz 0x000000000000001b memsz 0x000000000000001b flags r--
    LOAD off    0x0000000000000000 vaddr 0x0000000000400000 paddr 0x0000000000400000 align 2**16
         filesz 0x0000000000000a7c memsz 0x0000000000000a7c flags r-x
    LOAD off    0x0000000000000a80 vaddr 0x0000000000410a80 paddr 0x0000000000410a80 align 2**16
         filesz 0x0000000000000278 memsz 0x00000000000002c0 flags rw-
 DYNAMIC off    0x0000000000000a98 vaddr 0x0000000000410a98 paddr 0x0000000000410a98 align 2**3
         filesz 0x00000000000001e0 memsz 0x00000000000001e0 flags rw-
    NOTE off    0x00000000000001e4 vaddr 0x00000000004001e4 paddr 0x00000000004001e4 align 2**2
         filesz 0x0000000000000044 memsz 0x0000000000000044 flags r--
   STACK off    0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**4
         filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw-

Dynamic Section:
  NEEDED               libtest.so
  NEEDED               libc.so.6
  INIT                 0x0000000000400740
  FINI                 0x0000000000400a40
  INIT_ARRAY           0x0000000000410a80
  INIT_ARRAYSZ         0x0000000000000008
  FINI_ARRAY           0x0000000000410a88
  FINI_ARRAYSZ         0x0000000000000008
  HASH                 0x0000000000400228
  STRTAB               0x00000000004004e0
  SYMTAB               0x00000000004002d0
  STRSZ                0x0000000000000123
  SYMENT               0x0000000000000018
  DEBUG                0x0000000000000000
  PLTGOT               0x0000000000410c88
  PLTRELSZ             0x00000000000000d8
  PLTREL               0x0000000000000007
  JMPREL               0x0000000000400668
  RELA                 0x0000000000400650
  RELASZ               0x0000000000000018
  RELAENT              0x0000000000000018
  VERNEED              0x0000000000400630
  VERNEEDNUM           0x0000000000000001
  VERSYM               0x0000000000400604

Version References:
  required from libc.so.6:
    0x06969197 0x00 02 GLIBC_2.17

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .interp       0000001b  00000000004001c8  00000000004001c8  000001c8  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .note.ABI-tag 00000020  00000000004001e4  00000000004001e4  000001e4  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .note.gnu.build-id 00000024  0000000000400204  0000000000400204  00000204  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .hash         000000a4  0000000000400228  0000000000400228  00000228  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .dynsym       00000210  00000000004002d0  00000000004002d0  000002d0  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 .dynstr       00000123  00000000004004e0  00000000004004e0  000004e0  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  6 .gnu.version  0000002c  0000000000400604  0000000000400604  00000604  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  7 .gnu.version_r 00000020  0000000000400630  0000000000400630  00000630  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  8 .rela.dyn     00000018  0000000000400650  0000000000400650  00000650  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  9 .rela.plt     000000d8  0000000000400668  0000000000400668  00000668  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 10 .init         00000014  0000000000400740  0000000000400740  00000740  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 11 .plt          000000b0  0000000000400760  0000000000400760  00000760  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 12 .text         00000230  0000000000400810  0000000000400810  00000810  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 13 .fini         00000010  0000000000400a40  0000000000400a40  00000a40  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 14 .rodata       00000028  0000000000400a50  0000000000400a50  00000a50  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 15 .eh_frame     00000004  0000000000400a78  0000000000400a78  00000a78  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 16 .init_array   00000008  0000000000410a80  0000000000410a80  00000a80  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 17 .fini_array   00000008  0000000000410a88  0000000000410a88  00000a88  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 18 .jcr          00000008  0000000000410a90  0000000000410a90  00000a90  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 19 .dynamic      000001e0  0000000000410a98  0000000000410a98  00000a98  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 20 .got          00000010  0000000000410c78  0000000000410c78  00000c78  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 21 .got.plt      00000060  0000000000410c88  0000000000410c88  00000c88  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 22 .data         00000010  0000000000410ce8  0000000000410ce8  00000ce8  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 23 .bss          00000048  0000000000410cf8  0000000000410cf8  00000cf8  2**3
                  ALLOC
 24 .comment      0000002f  0000000000000000  0000000000000000  00000cf8  2**0
                  CONTENTS, READONLY
 25 .debug_aranges 00000110  0000000000000000  0000000000000000  00000d30  2**4
                  CONTENTS, READONLY, DEBUGGING
 26 .debug_info   00000452  0000000000000000  0000000000000000  00000e40  2**0
                  CONTENTS, READONLY, DEBUGGING
 27 .debug_abbrev 00000183  0000000000000000  0000000000000000  00001292  2**0
                  CONTENTS, READONLY, DEBUGGING
 28 .debug_line   0000028a  0000000000000000  0000000000000000  00001415  2**0
                  CONTENTS, READONLY, DEBUGGING
 29 .debug_frame  00000068  0000000000000000  0000000000000000  000016a0  2**3
                  CONTENTS, READONLY, DEBUGGING
 30 .debug_str    0000026c  0000000000000000  0000000000000000  00001708  2**0
                  CONTENTS, READONLY, DEBUGGING
 31 .debug_loc    00000143  0000000000000000  0000000000000000  00001974  2**0
                  CONTENTS, READONLY, DEBUGGING
 32 .debug_ranges 000000d0  0000000000000000  0000000000000000  00001ac0  2**4
                  CONTENTS, READONLY, DEBUGGING
SYMBOL TABLE:
00000000004001c8 l    d  .interp        0000000000000000              .interp
00000000004001e4 l    d  .note.ABI-tag  0000000000000000              .note.ABI-tag
0000000000400204 l    d  .note.gnu.build-id     0000000000000000              .note.gnu.build-id
0000000000400228 l    d  .hash  0000000000000000              .hash
00000000004002d0 l    d  .dynsym        0000000000000000              .dynsym
00000000004004e0 l    d  .dynstr        0000000000000000              .dynstr
0000000000400604 l    d  .gnu.version   0000000000000000              .gnu.version
0000000000400630 l    d  .gnu.version_r 0000000000000000              .gnu.version_r
0000000000400650 l    d  .rela.dyn      0000000000000000              .rela.dyn
0000000000400668 l    d  .rela.plt      0000000000000000              .rela.plt
0000000000400740 l    d  .init  0000000000000000              .init
0000000000400760 l    d  .plt   0000000000000000              .plt
0000000000400810 l    d  .text  0000000000000000              .text
0000000000400a40 l    d  .fini  0000000000000000              .fini
0000000000400a50 l    d  .rodata        0000000000000000              .rodata
0000000000400a78 l    d  .eh_frame      0000000000000000              .eh_frame
0000000000410a80 l    d  .init_array    0000000000000000              .init_array
0000000000410a88 l    d  .fini_array    0000000000000000              .fini_array
0000000000410a90 l    d  .jcr   0000000000000000              .jcr
0000000000410a98 l    d  .dynamic       0000000000000000              .dynamic
0000000000410c78 l    d  .got   0000000000000000              .got
0000000000410c88 l    d  .got.plt       0000000000000000              .got.plt
0000000000410ce8 l    d  .data  0000000000000000              .data
0000000000410cf8 l    d  .bss   0000000000000000              .bss
0000000000000000 l    d  .comment       0000000000000000              .comment
0000000000000000 l    d  .debug_aranges 0000000000000000              .debug_aranges
0000000000000000 l    d  .debug_info    0000000000000000              .debug_info
0000000000000000 l    d  .debug_abbrev  0000000000000000              .debug_abbrev
0000000000000000 l    d  .debug_line    0000000000000000              .debug_line
0000000000000000 l    d  .debug_frame   0000000000000000              .debug_frame
0000000000000000 l    d  .debug_str     0000000000000000              .debug_str
0000000000000000 l    d  .debug_loc     0000000000000000              .debug_loc
0000000000000000 l    d  .debug_ranges  0000000000000000              .debug_ranges
0000000000000000 l    df *ABS*  0000000000000000              /home/tcwg-buildslave/workspace/tcwg-make-release/label/tcwg-x86_64-ex40/target/aarch64-linux-gnu/_build/builds/x86_64-unknown-linux-gnu/aarch64-linux-gnu/glibc.git~release-2.21-master/csu/abi-note.o
00000000004001e4 l       .note.ABI-tag  0000000000000000              $d
0000000000000000 l    df *ABS*  0000000000000000              /home/tcwg-buildslave/workspace/tcwg-make-release/label/tcwg-x86_64-ex40/target/aarch64-linux-gnu/_build/builds/x86_64-unknown-linux-gnu/aarch64-linux-gnu/glibc.git~release-2.21-master/csu/start.o
0000000000400810 l       .text  0000000000000000              $x
000000000040083c l       .text  0000000000000000              $d
000000000000000c l       .debug_aranges 0000000000000000              $d
0000000000000000 l    df *ABS*  0000000000000000              init.c
0000000000400a50 l       .rodata        0000000000000000              $d
0000000000000000 l    df *ABS*  0000000000000000              /home/guoqing.zhang/gcc-linaro-5.2-2015.11-2-x86_64_aarch64-linux-gnu/bin/../aarch64-linux-gnu/libc/usr/lib/crti.o
0000000000400858 l       .text  0000000000000000              $x
0000000000400858 l     F .text  0000000000000014              call_weak_fn
0000000000400740 l       .init  0000000000000000              $x
0000000000400a40 l       .fini  0000000000000000              $x
000000000000005c l       .debug_aranges 0000000000000000              $d
0000000000000000 l    df *ABS*  0000000000000000              /home/guoqing.zhang/gcc-linaro-5.2-2015.11-2-x86_64_aarch64-linux-gnu/bin/../aarch64-linux-gnu/libc/usr/lib/crtn.o
000000000040074c l       .init  0000000000000000              $x
0000000000400a48 l       .fini  0000000000000000              $x
00000000000000dc l       .debug_aranges 0000000000000000              $d
0000000000000000 l    df *ABS*  0000000000000000              crtstuff.c
0000000000410a90 l     O .jcr   0000000000000000              __JCR_LIST__
0000000000400870 l       .text  0000000000000000              $x
0000000000400870 l     F .text  0000000000000000              deregister_tm_clones
00000000004008a8 l       .text  0000000000000000              $d
00000000004008b0 l       .text  0000000000000000              $x
00000000004008b0 l     F .text  0000000000000000              register_tm_clones
00000000004008e8 l       .text  0000000000000000              $d
0000000000410cf0 l       .data  0000000000000000              $d
00000000004008f0 l       .text  0000000000000000              $x
00000000004008f0 l     F .text  0000000000000000              __do_global_dtors_aux
0000000000410cf8 l     O .bss   0000000000000001              completed.7262
0000000000410a88 l       .fini_array    0000000000000000              $d
0000000000410a88 l     O .fini_array    0000000000000000              __do_global_dtors_aux_fini_array_entry
0000000000400920 l     F .text  0000000000000000              frame_dummy
0000000000400958 l       .text  0000000000000000              $d
0000000000410a80 l       .init_array    0000000000000000              $d
0000000000410a80 l     O .init_array    0000000000000000              __frame_dummy_init_array_entry
0000000000410cf8 l       .bss   0000000000000000              $d
0000000000000000 l    df *ABS*  0000000000000000              hello.c
0000000000400a58 l       .rodata        0000000000000000              $d
0000000000400960 l       .text  0000000000000000              $x
0000000000000000 l    df *ABS*  0000000000000000              elf-init.c
00000000004009c0 l       .text  0000000000000000              $x
0000000000000010 l       .debug_frame   0000000000000000              $d
0000000000000000 l    df *ABS*  0000000000000000              crtstuff.c
0000000000400a78 l       .eh_frame      0000000000000000              $d
0000000000400a78 l     O .eh_frame      0000000000000000              __FRAME_END__
0000000000410a90 l       .jcr   0000000000000000              $d
0000000000410a90 l     O .jcr   0000000000000000              __JCR_END__
0000000000000000 l    df *ABS*  0000000000000000
0000000000410a88 l       .init_array    0000000000000000              __init_array_end
0000000000410a98 l     O .dynamic       0000000000000000              _DYNAMIC
0000000000410a80 l       .init_array    0000000000000000              __init_array_start
0000000000410c78 l     O .got   0000000000000000              _GLOBAL_OFFSET_TABLE_
0000000000400780 l       .plt   0000000000000000              $x
0000000000400a38 g     F .text  0000000000000004              __libc_csu_fini
0000000000000000  w      *UND*  0000000000000000              _ITM_deregisterTMCloneTable
0000000000410ce8  w      .data  0000000000000000              data_start
0000000000410cf8 g       .bss   0000000000000000              __bss_start__
0000000000410d40 g       .bss   0000000000000000              _bss_end__
0000000000410cf8 g       .data  0000000000000000              _edata
0000000000400a40 g     F .fini  0000000000000000              _fini
0000000000410d40 g       .bss   0000000000000000              __bss_end__
0000000000400780       F *UND*  0000000000000000              __libc_start_main@@GLIBC_2.17
0000000000400790       F *UND*  0000000000000000              test_func
0000000000410ce8 g       .data  0000000000000000              __data_start
00000000004007a0       F *UND*  0000000000000000              pthread_mutex_init@@GLIBC_2.17
0000000000000000  w      *UND*  0000000000000000              __gmon_start__
0000000000410cf0 g     O .data  0000000000000000              .hidden __dso_handle
00000000004007c0       F *UND*  0000000000000000              abort@@GLIBC_2.17
0000000000400a50 g     O .rodata        0000000000000004              _IO_stdin_used
0000000000410d00 g     O .bss   0000000000000040              data
00000000004007d0       F *UND*  0000000000000000              puts@@GLIBC_2.17
00000000004009c0 g     F .text  0000000000000078              __libc_csu_init
0000000000410d40 g       .bss   0000000000000000              _end
0000000000400810 g     F .text  0000000000000000              _start
0000000000410d40 g       .bss   0000000000000000              __end__
0000000000410cf8 g       .bss   0000000000000000              __bss_start
0000000000400960 g     F .text  0000000000000060              main
0000000000000000  w      *UND*  0000000000000000              _Jv_RegisterClasses
0000000000410cf8 g     O .data  0000000000000000              .hidden __TMC_END__
0000000000000000  w      *UND*  0000000000000000              _ITM_registerTMCloneTable
00000000004007e0       F *UND*  0000000000000000              printf@@GLIBC_2.17
00000000004007f0       F *UND*  0000000000000000              pthread_mutex_lock@@GLIBC_2.17
0000000000400740 g     F .init  0000000000000000              _init
0000000000400800       F *UND*  0000000000000000              pthread_mutex_unlock@@GLIBC_2.17

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/558800.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论婚恋相亲交友软件的市场前景和开发方案H5小程序APP源码

随着移动互联网的快速发展和社交需求的日益增长&#xff0c;婚恋相亲交友软件小程序成为了越来越多单身人士的选择。本文将从市场前景、使用人群、盈利模式以及竞品分析等多个角度&#xff0c;综合论述这一领域的现状与发展趋势。 一、市场前景 在快节奏的现代生活中&#xf…

矩阵混乱度(熵值)代码计算

1、先回顾下熵值的数据公式&#xff1a; 2、jax.numpy代码 注意的点&#xff1a;熵值计算的输入的必须是归一化的正值 import jax.numpy as jnp import jax def _entroy(probs):log_probs jnp.log2(jnp.maximum(1.0e-30, probs))mean_sum_plogp jnp.mean(- jnp.sum(log_pro…

面试题:Redis如何防止缓存穿透 + 布隆过滤器原理

题目来源 招银网络-技术-1面 题目描述 缓存穿透是什么&#xff1f;如何防止缓存穿透布隆过滤器的原理是什么&#xff1f; 我的回答 缓存穿透是什么&#xff1f; 攻击者大量请求缓存和数据库中都不存在的key。如何防止缓存穿透 可以使用布隆过滤器布隆过滤器的原理是什么&a…

mysql数据库连接工具(mysql数据库连接工具怎么备份数据不备份表结构)

MySQLWorkbench连接,导入和导出数据库? 1、导出&#xff1a;使用MySQL Workbench连接到MySQL服务器&#xff0c;选择要导出的数据库&#xff0c;右键单击数据库并选择“导出”。选择要导出的表和数据&#xff0c;将导出文件保存为.sql文件。 2、打开MySQL Workbench&#xf…

【GlobalMapper精品教程】074:从Lidar点云创建3D地形模型

本文基于地形点云数据,基于泊松方法、贪婪三角形测量方法和阿尔法形状创建3d地形模型。 文章目录 一、加载地形点云数据二、创建三维地形模型1. 泊松方法2. 贪婪三角形测量方法3. 阿尔法形状注意事项一、加载地形点云数据 加载配套案例数据包中的data074.rar中的地形点云数据…

分类分析模型

目录 1.目的 2.内容 2.1决策树分类模型 2.2K近邻分类模型 3.代码实现 3.1分类分析模型 3.2K近邻分类模型 1.目的 掌握利用Python语言及相关库编写决策树分类分析模型的方法&#xff0c;所构建的决策树能够对给定的数据集进行分类。掌握利用Python语言及相关库编写K近邻分…

matlab学习003-绘制由差分方程表示的离散系统图像

目录 1&#xff0c;题目 2&#xff0c;使用函数求解差分方程 1&#xff09;基础知识 ①filter函数和impz函数 ②zeros函数 ☀ 2&#xff09;绘制图像 ​☀ 3&#xff09;对应代码 如果连简单的信号都不会的&#xff0c;建议先看如下文章&#x1f447;&#xff0c;之…

2024华中杯C题光纤传感器平面曲线重建原创论文分享

大家好&#xff0c;从昨天肝到现在&#xff0c;终于完成了2024华中杯数学建模C题的完整论文啦。 给大家看一下目录吧&#xff1a; 目录 摘 要&#xff1a; 10 一、问题重述 12 二&#xff0e;问题分析 13 2.1问题一 13 2.2问题二 14 2.3问题三 14 三、模型假设 15 四、…

一文学会Amazon transit GateWay

这是一个中转网关&#xff0c;使用时候需要在需要打通的VPC内创建一个挂载点&#xff0c;TGW会管理一张路由表来决定流量的转发到对应的挂载点上。本质上是EC2的请求路由到TGW&#xff0c;然后在查询TGW的路由表来再来决定下一跳&#xff0c;所以需要同时修改VPC 内子网的路由表…

【深度学习实战(10)】图像推理之预处理

一、预处理流程 在把一张图像送入模型进行推理时&#xff0c;需要先进行预处理&#xff0c;预处理流程包括&#xff1a; &#xff08;1&#xff09;读取图像 &#xff08;2&#xff09;尺寸调整&#xff0c;letter_box&#xff08;不失真&#xff09; &#xff08;3&#xff0…

从 Elastic 的 Go APM 代理迁移到 OpenTelemetry Go SDK

作者&#xff1a;来自 Elastic Damien Mathieu 正如我们之前所分享的&#xff0c;Elastic 致力于帮助 OpenTelemetry&#xff08;OTel&#xff09;取得成功&#xff0c;这意味着在某些情况下构建语言 SDK 的分发版本。 Elastic 在观察性和安全数据收集方面战略性地选择了 OTel…

【Win】怎么下载m3u8视频\怎么通过F12开发人员工具获取视频地址\怎么下载完整的.ts格式视频

怎么下载m3u8视频&#xff1f;首先通过浏览器本地的开发人员工具&#xff0c;获取m3u8的地址&#xff0c;然后再通过第三方下载工具下载&#xff0c;此处以N_m3u8DL-CLI_v3.0.2为例 如下图的步骤&#xff0c;即可获取到视频的m3u8地址 打开N_m3u8DL-CLI_v3.0.2&#xff0c;粘贴…

JAVA 线程状态

一、简介 每一个java线程都会有六种状态&#xff0c;即&#xff1a;NEW&#xff0c;RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED等。这些线程状态是JVM的线程状态&#xff0c;并不映射操作系统的线程状态。可以通过t1.getState().toString()获取线程状态。 1、NE…

数据结构(顺序队列 循环队列

目录 1. 讲解&#xff1a;2. C代码实现&#xff1a;小结&#xff1a; 1. 讲解&#xff1a; 2. C代码实现&#xff1a; #include <stdlib.h> #include <iostream>using namespace std;#define MaxSize 10 #define ElemType inttypedef struct {ElemType data[MaxSi…

JavaWeb--06Vue组件库Element

Element 1 Element组件的快速入门1.1 Table表格 1 Element组件的快速入门 https://element.eleme.cn/#/zh-CN Element是饿了么团队开发的 接下来我们来学习一下ElementUI的常用组件&#xff0c;对于组件的学习比较简单&#xff0c;我们只需要参考官方提供的代码&#xff0c;然…

2010年认证杯SPSSPRO杯数学建模B题(第一阶段)交通拥堵问题全过程文档及程序

2010年认证杯SPSSPRO杯数学建模 交通拥堵问题 B题 Braess 悖论 原题再现&#xff1a; Dietrich Braess 在 1968 年的一篇文章中提出了道路交通体系当中的Braess 悖论。它的含义是&#xff1a;有时在一个交通网络上增加一条路段&#xff0c;或者提高某个路段的局部通行能力&a…

【Java框架】SpringMVC(二)——SpringMVC数据交互

目录 前后端数据交互RequestMapping注解基于RequestMapping注解设置接口的请求方式RequestMapping注解的常用属性一个方法配置多个接口method属性params属性headers属性consumes属性produces属性 SpringMVC中的参数传递默认单个简单参数默认多个简单参数默认参数中有基本数据类…

关基网络战时代,赛宁网安电力网络攻防靶场全面提升电网安全防护力

随着网络空间成为与陆地、海洋、天空、太空同等重要的人类活动新领域&#xff0c;自网络空间向物理电网发起攻击&#xff0c;破坏电力等国家关键基础设施成为当前大国博弈、大规模战争的重要手段和常态进攻形式。同时&#xff0c;新型电力系统建设发展驱动电力系统形态和控制方…

鸢尾花数据集的KNN探索与乳腺癌决策树洞察

鸢尾花数据集的KNN探索与乳腺癌决策树洞察 今天博主做了这个KNN和决策树的实验。 一.数据集介绍 介绍一下数据集&#xff1a; 威斯康星州乳腺癌数据集&#xff1a; 威斯康星州乳腺癌数据集&#xff08;Wisconsin Breast Cancer Dataset&#xff09;是一个经典的机器学习数…

vue+node使用RSA非对称加密,实现登录接口加密密码

背景 登录接口&#xff0c;密码这种重要信息不可以用明文传输&#xff0c;必须加密处理。 这里就可以使用RSA非对称加密&#xff0c;后端生成公钥和私钥。 公钥&#xff1a;给前端&#xff0c;公钥可以暴露出来&#xff0c;没有影响&#xff0c;因为公钥加密的数据只有私钥才…