USB转GPIO数据采集控制器(RM1380)共享函数库解析

一、前言:

最近购买一块usb砖gpio模块,需要使用其共享函数来操作IO口,但是所有的函数都封装为共享文件.so的形式,本笔记主要用于记录该文件的解析方式,以及其中的函数的一些使用方法。

1.RM1380模块:

2.共享函数库libs如下所示: 

 

为了更加方便的使用其中的函数,需要对librockmong.so和lisbusb-1.0.so进行解析:

二、librockmong.so解析

使用命令查看其中的函数:

nm -D librockmong.so

返回结果如下: 

 000000000000560c T ADC_Init
00000000000056e8 T ADC_InitMulti
0000000000005676 T ADC_Read
0000000000005910 T ADC_ReadMulti
0000000000003c17 T CRC16MODBUS_Calc
000000000000a000 R CRC16MODBUS_Table
000000000000a200 R CRC8_Table
00000000000049bf T IO_InitMultiPin
00000000000054a6 T IO_InitMultiPin_Byron
00000000000047fe T IO_InitPin
0000000000004e38 T IO_ReadMultiOutputPin
0000000000004c25 T IO_ReadMultiPin
00000000000048e3 T IO_ReadOutputPin
00000000000052f6 T IO_ReadOutputPin_Bit
0000000000004871 T IO_ReadPin
00000000000053ce T IO_ReadPin_Bit
000000000000504b T IO_WriteMultiPin
0000000000005574 T IO_WriteMultiPin_Byron
0000000000004955 T IO_WritePin
000000000000525e T IO_WritePin_Bit
0000000000007751 T MISC_GetData
0000000000007486 T MISC_GetFwVersion
00000000000078c7 T MISC_GetLibraryVersion
000000000000758e T MISC_GetModel
0000000000007937 T MISC_SetPortLevel
0000000000007696 T MISC_SetSn
00000000000043c9 T MultiplesOf8
0000000000005b38 T PWM_Init
0000000000005ddf T PWM_InitMulti
0000000000005c94 T PWM_SetDuty
0000000000006545 T PWM_SetDutyMulti
0000000000005d6a T PWM_SetFrequency
0000000000006995 T PWM_SetFrequencyMulti
0000000000005cff T PWM_SetPhase
000000000000676d T PWM_SetPhaseMulti
0000000000005bc9 T PWM_Start
0000000000006139 T PWM_StartMulti
0000000000006c12 T PWM_Start_withList
0000000000005c33 T PWM_Stop
0000000000006361 T PWM_StopMulti
00000000000043ff T PlaintextLength2CiphertextLength
0000000000008175 T PwrOn_ADC
00000000000081df T PwrOn_ADC_Multi
0000000000007a83 T PwrOn_IO
0000000000007b00 T PwrOn_IO_Multi
0000000000007d8a T PwrOn_PWM
0000000000007e1b T PwrOn_PWM_Multi
00000000000079db T PwrOn_SerPortLevel
000000000000738f T UART_Clear
0000000000006f09 T UART_Init
00000000000071cc T UART_Read
0000000000007048 T UART_Write
00000000000089c3 T UsbDev_Del_CallBack
0000000000009337 T UsbDev_Transfer
0000000000009612 T UsbDevice_GetPid
0000000000009603 T UsbDevice_GetVid
0000000000008a36 T UsbDevice_Scan
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
                 U __assert_fail@GLIBC_2.2.5
                 w __cxa_finalize@GLIBC_2.2.5
                 w __gmon_start__
                 U __stack_chk_fail@GLIBC_2.4
0000000000008774 T _decrypt
00000000000086c7 T _encrypt
0000000000003dc2 T _rm_list_init
0000000000008892 T _usb_dev_init
000000000000d2e0 B dbg_buf
00000000000041f4 T decrypt
000000000000404b T encrypt
0000000000004420 T frame_transfer
                 U free@GLIBC_2.2.5
000000000000d738 B func_libusb_bulk_transfer
000000000000d710 B func_libusb_claim_interface
000000000000d750 B func_libusb_close
000000000000d770 B func_libusb_control_transfer
000000000000d6f0 B func_libusb_detach_kernel_driver
000000000000d708 B func_libusb_exit
000000000000d760 B func_libusb_free_config_descriptor
000000000000d6f8 B func_libusb_free_device_list
000000000000d748 B func_libusb_get_config_descriptor
000000000000d740 B func_libusb_get_device_descriptor
000000000000d768 B func_libusb_get_device_list
000000000000d728 B func_libusb_init
000000000000d718 B func_libusb_kernel_driver_active
000000000000d758 B func_libusb_open
000000000000d730 B func_libusb_release_interface
000000000000d720 B func_libusb_set_auto_detach_kernel_driver
000000000000d700 B handle_libusb
                 U libusb_bulk_transfer
                 U libusb_claim_interface
                 U libusb_close
                 U libusb_control_transfer
                 U libusb_detach_kernel_driver
                 U libusb_exit
                 U libusb_free_config_descriptor
                 U libusb_free_device_list
                 U libusb_get_config_descriptor
                 U libusb_get_device_descriptor
                 U libusb_get_device_list
                 U libusb_init
                 U libusb_kernel_driver_active
                 U libusb_open
                 U libusb_release_interface
                 U libusb_set_auto_detach_kernel_driver
000000000000d1e0 B list_lock
0000000000003c86 T lw_CRC8_Calc
0000000000003b90 T lw_Convert_LSBBytesToU16
0000000000003bad T lw_Convert_LSBBytesToU32
0000000000003bc7 T lw_Convert_LSBBytesToU64
0000000000003a94 T lw_Convert_MSBBytesToU16
0000000000003ae9 T lw_Convert_MSBBytesToU32
0000000000003b3b T lw_Convert_MSBBytesToU64
0000000000003a06 T lw_Convert_U16ToLSBBytes
0000000000003945 T lw_Convert_U16ToMSBBytes
0000000000003a37 T lw_Convert_U32ToLSBBytes
0000000000003987 T lw_Convert_U32ToMSBBytes
0000000000003a65 T lw_Convert_U64ToLSBBytes
00000000000039c6 T lw_Convert_U64ToMSBBytes
00000000000037ef T lw_EndianExchange
0000000000003799 T lw_memcpy
                 U malloc@GLIBC_2.2.5
                 U memcpy@GLIBC_2.14
                 U memset@GLIBC_2.2.5
000000000000a300 R password
                 U pthread_mutex_destroy@GLIBC_2.2.5
                 U pthread_mutex_init@GLIBC_2.2.5
                 U pthread_mutex_lock@GLIBC_2.2.5
                 U pthread_mutex_unlock@GLIBC_2.2.5
                 U rand@GLIBC_2.2.5
000000000000d220 B rm_devs
0000000000003e06 T rm_list_add
0000000000003e57 T rm_list_clear
0000000000003fa4 T rm_list_get_all
0000000000003f0f T rm_list_get_handle
000000000000d2a0 B rm_lock
                 U sprintf@GLIBC_2.2.5
                 U srand@GLIBC_2.2.5
0000000000008567 T tea_decrypt
0000000000008407 T tea_encrypt
                 U time@GLIBC_2.2.5

查看具体的函数的用法:

objdump -D librockmong.so | grep -A10 -B10 PWM_Start

其中 -A10表示显示函数名后面10行对象的内容,-B10表示显示函数名前面20行的内容。

 

00001810 <PwrOn_PWM_Multi@plt>:
    1810:       e28fc600        add     ip, pc, #0, 12
    1814:       e28cca17        add     ip, ip, #94208  ; 0x17000
    1818:       e5bcf848        ldr     pc, [ip, #2120]!        ; 0x848

0000181c <PwrOn_ADC_Multi@plt>:
    181c:       e28fc600        add     ip, pc, #0, 12
    1820:       e28cca17        add     ip, ip, #94208  ; 0x17000
    1824:       e5bcf840        ldr     pc, [ip, #2112]!        ; 0x840

00001828 <PWM_StartMulti@plt>:
    1828:       e28fc600        add     ip, pc, #0, 12
    182c:       e28cca17        add     ip, ip, #94208  ; 0x17000
    1830:       e5bcf838        ldr     pc, [ip, #2104]!        ; 0x838

00001834 <lw_Convert_MSBBytesToU16@plt>:
    1834:       e28fc600        add     ip, pc, #0, 12
    1838:       e28cca17        add     ip, ip, #94208  ; 0x17000
    183c:       e5bcf830        ldr     pc, [ip, #2096]!        ; 0x830

00001840 <malloc@plt>:
--
    4080:       e24b1014        sub     r1, fp, #20
    4084:       e3a03001        mov     r3, #1
    4088:       e51b0020        ldr     r0, [fp, #-32]  ; 0xffffffe0
    408c:       ebfff612        bl      18dc <PWM_InitMulti@plt>
    4090:       e50b0008        str     r0, [fp, #-8]
    4094:       e51b3008        ldr     r3, [fp, #-8]
    4098:       e1a00003        mov     r0, r3
    409c:       e24bd004        sub     sp, fp, #4
    40a0:       e8bd8800        pop     {fp, pc}

000040a4 <PWM_Start>:
    40a4:       e92d4800        push    {fp, lr}
    40a8:       e28db004        add     fp, sp, #4
    40ac:       e24dd020        sub     sp, sp, #32
    40b0:       e50b0018        str     r0, [fp, #-24]  ; 0xffffffe8
    40b4:       e50b101c        str     r1, [fp, #-28]  ; 0xffffffe4
    40b8:       e50b2020        str     r2, [fp, #-32]  ; 0xffffffe0
    40bc:       e3a03000        mov     r3, #0
    40c0:       e50b3008        str     r3, [fp, #-8]
    40c4:       e51b301c        ldr     r3, [fp, #-28]  ; 0xffffffe4
    40c8:       e6ef3073        uxtb    r3, r3
    40cc:       e54b3010        strb    r3, [fp, #-16]
    40d0:       e51b3020        ldr     r3, [fp, #-32]  ; 0xffffffe0
    40d4:       e50b300c        str     r3, [fp, #-12]
    40d8:       e24b2014        sub     r2, fp, #20
    40dc:       e24b1010        sub     r1, fp, #16
    40e0:       e3a03001        mov     r3, #1
    40e4:       e51b0018        ldr     r0, [fp, #-24]  ; 0xffffffe8
    40e8:       ebfff5ce        bl      1828 <PWM_StartMulti@plt>
    40ec:       e50b0008        str     r0, [fp, #-8]
    40f0:       e51b3008        ldr     r3, [fp, #-8]
    40f4:       e1a00003        mov     r0, r3
    40f8:       e24bd004        sub     sp, fp, #4
    40fc:       e8bd8800        pop     {fp, pc}

00004100 <PWM_Stop>:
    4100:       e92d4800        push    {fp, lr}
    4104:       e28db004        add     fp, sp, #4
    4108:       e24dd018        sub     sp, sp, #24
--
    46d0:       e24bd004        sub     sp, fp, #4
    46d4:       e8bd8800        pop     {fp, pc}
    46d8:       00003cec        andeq   r3, r0, ip, ror #25
    46dc:       00003ca8        andeq   r3, r0, r8, lsr #25
    46e0:       00003cc0        andeq   r3, r0, r0, asr #25
    46e4:       00003cc0        andeq   r3, r0, r0, asr #25
    46e8:       00003c7c        andeq   r3, r0, ip, ror ip
    46ec:       00003ca0        andeq   r3, r0, r0, lsr #25
    46f0:       ffffe4a8                        ; <UNDEFINED> instruction: 0xffffe4a8

000046f4 <PWM_StartMulti>:
    46f4:       e92d4800        push    {fp, lr}
    46f8:       e28db004        add     fp, sp, #4
    46fc:       e24dd048        sub     sp, sp, #72     ; 0x48
    4700:       e50b0028        str     r0, [fp, #-40]  ; 0xffffffd8
    4704:       e50b102c        str     r1, [fp, #-44]  ; 0xffffffd4
    4708:       e50b2030        str     r2, [fp, #-48]  ; 0xffffffd0
    470c:       e50b3034        str     r3, [fp, #-52]  ; 0xffffffcc
    4710:       e3a03000        mov     r3, #0
    4714:       e50b3008        str     r3, [fp, #-8]
    4718:       e3a03000        mov     r3, #0
    471c:       e50b3020        str     r3, [fp, #-32]  ; 0xffffffe0
    4720:       e3a03005        mov     r3, #5
    4724:       e50b3010        str     r3, [fp, #-16]
    4728:       e3a03001        mov     r3, #1
    472c:       e50b3014        str     r3, [fp, #-20]  ; 0xffffffec
    4730:       e51b302c        ldr     r3, [fp, #-44]  ; 0xffffffd4
    4734:       e3530000        cmp     r3, #0
    4738:       1a000007        bne     475c <PWM_StartMulti+0x68>
    473c:       e59f327c        ldr     r3, [pc, #636]  ; 49c0 <PWM_StartMulti+0x2cc>
    4740:       e08f3003        add     r3, pc, r3
    4744:       e3a020a8        mov     r2, #168        ; 0xa8
    4748:       e59f1274        ldr     r1, [pc, #628]  ; 49c4 <PWM_StartMulti+0x2d0>
    474c:       e08f1001        add     r1, pc, r1
    4750:       e59f0270        ldr     r0, [pc, #624]  ; 49c8 <PWM_StartMulti+0x2d4>
    4754:       e08f0000        add     r0, pc, r0
    4758:       ebfff483        bl      196c <__assert_fail@plt>
    475c:       e51b3030        ldr     r3, [fp, #-48]  ; 0xffffffd0
    4760:       e3530000        cmp     r3, #0
    4764:       1a000007        bne     4788 <PWM_StartMulti+0x94>
    4768:       e59f325c        ldr     r3, [pc, #604]  ; 49cc <PWM_StartMulti+0x2d8>
    476c:       e08f3003        add     r3, pc, r3
    4770:       e3a020a9        mov     r2, #169        ; 0xa9
    4774:       e59f1254        ldr     r1, [pc, #596]  ; 49d0 <PWM_StartMulti+0x2dc>
    4778:       e08f1001        add     r1, pc, r1
    477c:       e59f0250        ldr     r0, [pc, #592]  ; 49d4 <PWM_StartMulti+0x2e0>
    4780:       e08f0000        add     r0, pc, r0
    4784:       ebfff478        bl      196c <__assert_fail@plt>
    4788:       e51b3034        ldr     r3, [fp, #-52]  ; 0xffffffcc
    478c:       e3530000        cmp     r3, #0
    4790:       1a000001        bne     479c <PWM_StartMulti+0xa8>
    4794:       e3e03001        mvn     r3, #1
    4798:       ea000085        b       49b4 <PWM_StartMulti+0x2c0>
    479c:       e51b3010        ldr     r3, [fp, #-16]
    47a0:       e51b2034        ldr     r2, [fp, #-52]  ; 0xffffffcc
    47a4:       e0030392        mul     r3, r2, r3
    47a8:       e1a00003        mov     r0, r3
    47ac:       ebfff423        bl      1840 <malloc@plt>
    47b0:       e1a03000        mov     r3, r0
    47b4:       e50b3018        str     r3, [fp, #-24]  ; 0xffffffe8
    47b8:       e51b3014        ldr     r3, [fp, #-20]  ; 0xffffffec
    47bc:       e51b2034        ldr     r2, [fp, #-52]  ; 0xffffffcc
    47c0:       e0030392        mul     r3, r2, r3
    47c4:       e1a00003        mov     r0, r3
    47c8:       ebfff41c        bl      1840 <malloc@plt>
    47cc:       e1a03000        mov     r3, r0
    47d0:       e50b301c        str     r3, [fp, #-28]  ; 0xffffffe4
    47d4:       e3a03000        mov     r3, #0
    47d8:       e50b300c        str     r3, [fp, #-12]
    47dc:       ea00002b        b       4890 <PWM_StartMulti+0x19c>
    47e0:       e51b300c        ldr     r3, [fp, #-12]
    47e4:       e1a03183        lsl     r3, r3, #3
    47e8:       e51b202c        ldr     r2, [fp, #-44]  ; 0xffffffd4
    47ec:       e0821003        add     r1, r2, r3
    47f0:       e51b200c        ldr     r2, [fp, #-12]
    47f4:       e1a03002        mov     r3, r2
    47f8:       e1a03103        lsl     r3, r3, #2
    47fc:       e0833002        add     r3, r3, r2
    4800:       e51b2018        ldr     r2, [fp, #-24]  ; 0xffffffe8
    4804:       e0823003        add     r3, r2, r3
--
    4874:       e1a02c22        lsr     r2, r2, #24
    4878:       e3a01000        mov     r1, #0
    487c:       e1812002        orr     r2, r1, r2
    4880:       e5c32004        strb    r2, [r3, #4]
    4884:       e51b300c        ldr     r3, [fp, #-12]
    4888:       e2833001        add     r3, r3, #1
    488c:       e50b300c        str     r3, [fp, #-12]
    4890:       e51b200c        ldr     r2, [fp, #-12]
    4894:       e51b3034        ldr     r3, [fp, #-52]  ; 0xffffffcc
    4898:       e1520003        cmp     r2, r3
    489c:       baffffcf        blt     47e0 <PWM_StartMulti+0xec>
    48a0:       e51b3010        ldr     r3, [fp, #-16]
    48a4:       e51b2034        ldr     r2, [fp, #-52]  ; 0xffffffcc
    48a8:       e0030392        mul     r3, r2, r3
    48ac:       e1a01003        mov     r1, r3
    48b0:       e51b3014        ldr     r3, [fp, #-20]  ; 0xffffffec
    48b4:       e51b2034        ldr     r2, [fp, #-52]  ; 0xffffffcc
    48b8:       e0030392        mul     r3, r2, r3
    48bc:       e1a02003        mov     r2, r3
    48c0:       e3a03ffa        mov     r3, #1000       ; 0x3e8
    48c4:       e58d3010        str     r3, [sp, #16]
--
    48d8:       e58d3004        str     r3, [sp, #4]
    48dc:       e58d1000        str     r1, [sp]
    48e0:       e51b3018        ldr     r3, [fp, #-24]  ; 0xffffffe8
    48e4:       e3a02001        mov     r2, #1
    48e8:       e3a01004        mov     r1, #4
    48ec:       e51b0028        ldr     r0, [fp, #-40]  ; 0xffffffd8
    48f0:       ebfff3ba        bl      17e0 <frame_transfer@plt>
    48f4:       e50b0008        str     r0, [fp, #-8]
    48f8:       e3a03000        mov     r3, #0
    48fc:       e50b300c        str     r3, [fp, #-12]
    4900:       ea00000a        b       4930 <PWM_StartMulti+0x23c>
    4904:       e51b300c        ldr     r3, [fp, #-12]
    4908:       e51b201c        ldr     r2, [fp, #-28]  ; 0xffffffe4
    490c:       e0822003        add     r2, r2, r3
    4910:       e51b300c        ldr     r3, [fp, #-12]
    4914:       e51b1030        ldr     r1, [fp, #-48]  ; 0xffffffd0
    4918:       e0813003        add     r3, r1, r3
    491c:       e5d22000        ldrb    r2, [r2]
    4920:       e5c32000        strb    r2, [r3]
    4924:       e51b300c        ldr     r3, [fp, #-12]
    4928:       e2833001        add     r3, r3, #1
    492c:       e50b300c        str     r3, [fp, #-12]
    4930:       e51b200c        ldr     r2, [fp, #-12]
    4934:       e51b3034        ldr     r3, [fp, #-52]  ; 0xffffffcc
    4938:       e1520003        cmp     r2, r3
    493c:       bafffff0        blt     4904 <PWM_StartMulti+0x210>
    4940:       e51b3008        ldr     r3, [fp, #-8]
    4944:       e3530000        cmp     r3, #0
    4948:       ba000013        blt     499c <PWM_StartMulti+0x2a8>
    494c:       e51b3014        ldr     r3, [fp, #-20]  ; 0xffffffec
    4950:       e51b2034        ldr     r2, [fp, #-52]  ; 0xffffffcc
    4954:       e0030392        mul     r3, r2, r3
    4958:       e51b2020        ldr     r2, [fp, #-32]  ; 0xffffffe0
    495c:       e1530002        cmp     r3, r2
    4960:       0a000002        beq     4970 <PWM_StartMulti+0x27c>
    4964:       e59f306c        ldr     r3, [pc, #108]  ; 49d8 <PWM_StartMulti+0x2e4>
    4968:       e50b3008        str     r3, [fp, #-8]
    496c:       ea00000b        b       49a0 <PWM_StartMulti+0x2ac>
    4970:       e3a03000        mov     r3, #0
    4974:       e50b300c        str     r3, [fp, #-12]
    4978:       ea000002        b       4988 <PWM_StartMulti+0x294>
    497c:       e51b300c        ldr     r3, [fp, #-12]
    4980:       e2833001        add     r3, r3, #1
    4984:       e50b300c        str     r3, [fp, #-12]
    4988:       e51b200c        ldr     r2, [fp, #-12]
    498c:       e51b3034        ldr     r3, [fp, #-52]  ; 0xffffffcc
    4990:       e1520003        cmp     r2, r3
    4994:       bafffff8        blt     497c <PWM_StartMulti+0x288>
    4998:       ea000000        b       49a0 <PWM_StartMulti+0x2ac>
    499c:       e1a00000        nop                     ; (mov r0, r0)
    49a0:       e51b0018        ldr     r0, [fp, #-24]  ; 0xffffffe8
    49a4:       ebfff372        bl      1774 <free@plt>
    49a8:       e51b001c        ldr     r0, [fp, #-28]  ; 0xffffffe4
    49ac:       ebfff370        bl      1774 <free@plt>
    49b0:       e51b3008        ldr     r3, [fp, #-8]
    49b4:       e1a00003        mov     r0, r3
    49b8:       e24bd004        sub     sp, fp, #4
    49bc:       e8bd8800        pop     {fp, pc}
    49c0:       00003888        andeq   r3, r0, r8, lsl #17
--
    5500:       00002dec        andeq   r2, r0, ip, ror #27
    5504:       00000179        andeq   r0, r0, r9, ror r1
    5508:       00002d50        andeq   r2, r0, r0, asr sp
    550c:       00002d68        andeq   r2, r0, r8, ror #26
    5510:       00002dc0        andeq   r2, r0, r0, asr #27
    5514:       0000017a        andeq   r0, r0, sl, ror r1
    5518:       00002d24        andeq   r2, r0, r4, lsr #26
    551c:       00002d48        andeq   r2, r0, r8, asr #26
    5520:       ffffe4a8                        ; <UNDEFINED> instruction: 0xffffe4a8

00005524 <PWM_Start_withList>:
    5524:       e92d4800        push    {fp, lr}
    5528:       e28db004        add     fp, sp, #4
    552c:       e24dd048        sub     sp, sp, #72     ; 0x48
    5530:       e50b0028        str     r0, [fp, #-40]  ; 0xffffffd8
    5534:       e50b102c        str     r1, [fp, #-44]  ; 0xffffffd4
    5538:       e50b2030        str     r2, [fp, #-48]  ; 0xffffffd0
    553c:       e50b3034        str     r3, [fp, #-52]  ; 0xffffffcc
    5540:       e3a03000        mov     r3, #0
    5544:       e50b3008        str     r3, [fp, #-8]
    5548:       e3a03000        mov     r3, #0
    554c:       e50b3020        str     r3, [fp, #-32]  ; 0xffffffe0
    5550:       e3a03009        mov     r3, #9
    5554:       e50b3010        str     r3, [fp, #-16]
    5558:       e3a03001        mov     r3, #1
    555c:       e50b3014        str     r3, [fp, #-20]  ; 0xffffffec
    5560:       e51b302c        ldr     r3, [fp, #-44]  ; 0xffffffd4
    5564:       e3530000        cmp     r3, #0
    5568:       1a000007        bne     558c <PWM_Start_withList+0x68>
    556c:       e59f33a0        ldr     r3, [pc, #928]  ; 5914 <PWM_Start_withList+0x3f0>
    5570:       e08f3003        add     r3, pc, r3
    5574:       e59f239c        ldr     r2, [pc, #924]  ; 5918 <PWM_Start_withList+0x3f4>
    5578:       e59f139c        ldr     r1, [pc, #924]  ; 591c <PWM_Start_withList+0x3f8>
    557c:       e08f1001        add     r1, pc, r1
    5580:       e59f0398        ldr     r0, [pc, #920]  ; 5920 <PWM_Start_withList+0x3fc>
    5584:       e08f0000        add     r0, pc, r0
    5588:       ebfff0f7        bl      196c <__assert_fail@plt>
    558c:       e51b3030        ldr     r3, [fp, #-48]  ; 0xffffffd0
    5590:       e3530000        cmp     r3, #0
    5594:       1a000007        bne     55b8 <PWM_Start_withList+0x94>
    5598:       e59f3384        ldr     r3, [pc, #900]  ; 5924 <PWM_Start_withList+0x400>
    559c:       e08f3003        add     r3, pc, r3
    55a0:       e59f2380        ldr     r2, [pc, #896]  ; 5928 <PWM_Start_withList+0x404>
    55a4:       e59f1380        ldr     r1, [pc, #896]  ; 592c <PWM_Start_withList+0x408>
    55a8:       e08f1001        add     r1, pc, r1
    55ac:       e59f037c        ldr     r0, [pc, #892]  ; 5930 <PWM_Start_withList+0x40c>
    55b0:       e08f0000        add     r0, pc, r0
    55b4:       ebfff0ec        bl      196c <__assert_fail@plt>
    55b8:       e51b3034        ldr     r3, [fp, #-52]  ; 0xffffffcc
    55bc:       e3530000        cmp     r3, #0
    55c0:       1a000001        bne     55cc <PWM_Start_withList+0xa8>
    55c4:       e3e03001        mvn     r3, #1
    55c8:       ea0000ce        b       5908 <PWM_Start_withList+0x3e4>
    55cc:       e51b3010        ldr     r3, [fp, #-16]
    55d0:       e51b2034        ldr     r2, [fp, #-52]  ; 0xffffffcc
    55d4:       e0030392        mul     r3, r2, r3
    55d8:       e1a00003        mov     r0, r3
    55dc:       ebfff097        bl      1840 <malloc@plt>
    55e0:       e1a03000        mov     r3, r0
    55e4:       e50b3018        str     r3, [fp, #-24]  ; 0xffffffe8
    55e8:       e51b3014        ldr     r3, [fp, #-20]  ; 0xffffffec
    55ec:       e51b2034        ldr     r2, [fp, #-52]  ; 0xffffffcc
    55f0:       e0030392        mul     r3, r2, r3
    55f4:       e1a00003        mov     r0, r3
    55f8:       ebfff090        bl      1840 <malloc@plt>
    55fc:       e1a03000        mov     r3, r0
    5600:       e50b301c        str     r3, [fp, #-28]  ; 0xffffffe4
    5604:       e3a03000        mov     r3, #0
    5608:       e50b300c        str     r3, [fp, #-12]
    560c:       ea000072        b       57dc <PWM_Start_withList+0x2b8>
    5610:       e51b200c        ldr     r2, [fp, #-12]
    5614:       e1a03002        mov     r3, r2
    5618:       e1a03103        lsl     r3, r3, #2
    561c:       e0833002        add     r3, r3, r2
    5620:       e1a03083        lsl     r3, r3, #1
    5624:       e1a02003        mov     r2, r3
    5628:       e51b302c        ldr     r3, [fp, #-44]  ; 0xffffffd4
    562c:       e0831002        add     r1, r3, r2
    5630:       e51b200c        ldr     r2, [fp, #-12]
    5634:       e1a03002        mov     r3, r2
--
    57c0:       e6ff2072        uxth    r2, r2
    57c4:       e3a01000        mov     r1, #0
    57c8:       e1812002        orr     r2, r1, r2
    57cc:       e5c32008        strb    r2, [r3, #8]
    57d0:       e51b300c        ldr     r3, [fp, #-12]
    57d4:       e2833001        add     r3, r3, #1
    57d8:       e50b300c        str     r3, [fp, #-12]
    57dc:       e51b200c        ldr     r2, [fp, #-12]
    57e0:       e51b3034        ldr     r3, [fp, #-52]  ; 0xffffffcc
    57e4:       e1520003        cmp     r2, r3
    57e8:       baffff88        blt     5610 <PWM_Start_withList+0xec>
    57ec:       e51b3010        ldr     r3, [fp, #-16]
    57f0:       e51b2034        ldr     r2, [fp, #-52]  ; 0xffffffcc
    57f4:       e0030392        mul     r3, r2, r3
    57f8:       e1a01003        mov     r1, r3
    57fc:       e51b3014        ldr     r3, [fp, #-20]  ; 0xffffffec
    5800:       e51b2034        ldr     r2, [fp, #-52]  ; 0xffffffcc
    5804:       e0030392        mul     r3, r2, r3
    5808:       e1a02003        mov     r2, r3
    580c:       e3a03ffa        mov     r3, #1000       ; 0x3e8
    5810:       e58d3010        str     r3, [sp, #16]
--
    5824:       e58d3004        str     r3, [sp, #4]
    5828:       e58d1000        str     r1, [sp]
    582c:       e51b3018        ldr     r3, [fp, #-24]  ; 0xffffffe8
    5830:       e3a02006        mov     r2, #6
    5834:       e3a01004        mov     r1, #4
    5838:       e51b0028        ldr     r0, [fp, #-40]  ; 0xffffffd8
    583c:       ebffefe7        bl      17e0 <frame_transfer@plt>
    5840:       e50b0008        str     r0, [fp, #-8]
    5844:       e3a03000        mov     r3, #0
    5848:       e50b300c        str     r3, [fp, #-12]
    584c:       ea000008        b       5874 <PWM_Start_withList+0x350>
    5850:       e51b300c        ldr     r3, [fp, #-12]
    5854:       e51b2030        ldr     r2, [fp, #-48]  ; 0xffffffd0
    5858:       e0823003        add     r3, r2, r3
    585c:       e51b2008        ldr     r2, [fp, #-8]
    5860:       e6ef2072        uxtb    r2, r2
    5864:       e5c32000        strb    r2, [r3]
    5868:       e51b300c        ldr     r3, [fp, #-12]
    586c:       e2833001        add     r3, r3, #1
    5870:       e50b300c        str     r3, [fp, #-12]
    5874:       e51b200c        ldr     r2, [fp, #-12]
    5878:       e51b3034        ldr     r3, [fp, #-52]  ; 0xffffffcc
    587c:       e1520003        cmp     r2, r3
    5880:       bafffff2        blt     5850 <PWM_Start_withList+0x32c>
    5884:       e51b3014        ldr     r3, [fp, #-20]  ; 0xffffffec
    5888:       e51b2034        ldr     r2, [fp, #-52]  ; 0xffffffcc
    588c:       e0030392        mul     r3, r2, r3
    5890:       e50b3020        str     r3, [fp, #-32]  ; 0xffffffe0
    5894:       e51b3008        ldr     r3, [fp, #-8]
    5898:       e3530000        cmp     r3, #0
    589c:       ba000013        blt     58f0 <PWM_Start_withList+0x3cc>
    58a0:       e51b3014        ldr     r3, [fp, #-20]  ; 0xffffffec
    58a4:       e51b2034        ldr     r2, [fp, #-52]  ; 0xffffffcc
    58a8:       e0030392        mul     r3, r2, r3
    58ac:       e51b2020        ldr     r2, [fp, #-32]  ; 0xffffffe0
    58b0:       e1530002        cmp     r3, r2
    58b4:       0a000002        beq     58c4 <PWM_Start_withList+0x3a0>
    58b8:       e59f3074        ldr     r3, [pc, #116]  ; 5934 <PWM_Start_withList+0x410>
    58bc:       e50b3008        str     r3, [fp, #-8]
    58c0:       ea00000b        b       58f4 <PWM_Start_withList+0x3d0>
    58c4:       e3a03000        mov     r3, #0
    58c8:       e50b300c        str     r3, [fp, #-12]
    58cc:       ea000002        b       58dc <PWM_Start_withList+0x3b8>
    58d0:       e51b300c        ldr     r3, [fp, #-12]
    58d4:       e2833001        add     r3, r3, #1
    58d8:       e50b300c        str     r3, [fp, #-12]
    58dc:       e51b200c        ldr     r2, [fp, #-12]
    58e0:       e51b3034        ldr     r3, [fp, #-52]  ; 0xffffffcc
    58e4:       e1520003        cmp     r2, r3
    58e8:       bafffff8        blt     58d0 <PWM_Start_withList+0x3ac>
    58ec:       ea000000        b       58f4 <PWM_Start_withList+0x3d0>
    58f0:       e1a00000        nop                     ; (mov r0, r0)
    58f4:       e51b0018        ldr     r0, [fp, #-24]  ; 0xffffffe8
    58f8:       ebffef9d        bl      1774 <free@plt>
    58fc:       e51b001c        ldr     r0, [fp, #-28]  ; 0xffffffe4
    5900:       ebffef9b        bl      1774 <free@plt>
    5904:       e51b3008        ldr     r3, [fp, #-8]
    5908:       e1a00003        mov     r0, r3
    590c:       e24bd004        sub     sp, fp, #4
    5910:       e8bd8800        pop     {fp, pc}
    5914:       00002ab8                        ; <UNDEFINED> instruction: 0x00002ab8

从其中可以看到PWM_Start函数的定义如下:

000040a4 <PWM_Start>:
    40a4:       e92d4800        push    {fp, lr}         ; 保存帧指针和链接寄存器
    40a8:       e28db004        add     fp, sp, #4       ; 设置新的帧指针
    40ac:       e24dd020        sub     sp, sp, #32      ; 为局部变量分配空间
    40b0:       e50b0018        str     r0, [fp, #-24]   ; 保存参数 r0
    40b4:       e50b101c        str     r1, [fp, #-28]   ; 保存参数 r1
    40b8:       e50b2020        str     r2, [fp, #-32]   ; 保存参数 r2
    40bc:       e3a03000        mov     r3, #0           ; 初始化 r3 为 0
    40c0:       e50b3008        str     r3, [fp, #-8]    ; 存储 r3 的值
    40c4:       e51b301c        ldr     r3, [fp, #-28]   ; 加载 r1 的值到 r3
    40c8:       e6ef3073        uxtb    r3, r3            ; 从 r3 提取无符号字节
    40cc:       e54b3010        strb    r3, [fp, #-16]   ; 存储处理后的 r3
    40d0:       e51b3020        ldr     r3, [fp, #-32]   ; 加载 r2 的值到 r3
    40d4:       e50b300c        str     r3, [fp, #-12]   ; 存储 r3 的值
    40d8:       e24b2014        sub     r2, fp, #20      ; 计算局部变量的地址
    40dc:       e24b1010        sub     r1, fp, #16      ; 计算局部变量的地址
    40e0:       e3a03001        mov     r3, #1           ; 设置 r3 为 1
    40e4:       e51b0018        ldr     r0, [fp, #-24]   ; 重新加载 r0 的值
    40e8:       ebfff5ce        bl      1828 <PWM_StartMulti@plt>  ; 调用 PWM_StartMulti 函数
    40ec:       e50b0008        str     r0, [fp, #-8]    ; 存储返回值
    40f0:       e51b3008        ldr     r3, [fp, #-8]    ; 加载返回值
    40f4:       e1a00003        mov     r0, r3           ; 将返回值移至 r0
    40f8:       e24bd004        sub     sp, fp, #4       ; 恢复堆栈指针
    40fc:       e8bd8800        pop     {fp, pc}         ; 恢复帧指针和返回

 函数作用:PWM_Start 函数使用了三个参数(存储在 r0, r1, r2 寄存器中)。这些参数被保存在栈上,并且部分参数通过处理后传递给了 PWM_StartMulti 函数。PWM_Start 函数主要负责设置和启动 PWM。此函数还处理返回值,并且在函数结束时恢复寄存器和栈状态,然后返回。

三、lisbusb-1.0.so解析

查看其中的函数如下:

                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
                 U __asprintf_chk@GLIBC_2.8
                 U __assert_fail@GLIBC_2.2.5
                 U __ctype_b_loc@GLIBC_2.3
                 U __ctype_tolower_loc@GLIBC_2.3
                 w __cxa_finalize@GLIBC_2.2.5
                 U __errno_location@GLIBC_2.2.5
                 w __gmon_start__
                 U __isoc99_sscanf@GLIBC_2.7
                 U __open_2@GLIBC_2.7
                 U __snprintf_chk@GLIBC_2.3.4
                 U __sprintf_chk@GLIBC_2.3.4
                 U __stack_chk_fail@GLIBC_2.4
                 U __tls_get_addr@GLIBC_2.3
                 U __vsnprintf_chk@GLIBC_2.3.4
                 U calloc@GLIBC_2.2.5
                 U clock_gettime@GLIBC_2.17
                 U close@GLIBC_2.2.5
                 U closedir@GLIBC_2.2.5
                 U eventfd@GLIBC_2.7
                 U fcntl@GLIBC_2.2.5
                 U fputs@GLIBC_2.2.5
                 U free@GLIBC_2.2.5
                 U getenv@GLIBC_2.2.5
                 U ioctl@GLIBC_2.2.5
0000000000007dd0 T libusb_alloc_streams
000000000000b7a0 T libusb_alloc_transfer
0000000000008080 T libusb_attach_kernel_driver
000000000000e6f0 T libusb_bulk_transfer
000000000000bcc0 T libusb_cancel_transfer
0000000000007a30 T libusb_claim_interface
0000000000007ce0 T libusb_clear_halt
0000000000007490 T libusb_close
000000000000e490 T libusb_control_transfer
0000000000007fe0 T libusb_detach_kernel_driver
0000000000006840 T libusb_dev_mem_alloc
0000000000006880 T libusb_dev_mem_free
0000000000008d30 T libusb_error_name
000000000000cc60 T libusb_event_handler_active
000000000000cb80 T libusb_event_handling_ok
0000000000008120 T libusb_exit
0000000000009eb0 T libusb_free_bos_descriptor
0000000000009d80 T libusb_free_config_descriptor
000000000000a610 T libusb_free_container_id_descriptor
0000000000006e70 T libusb_free_device_list
000000000000dfa0 T libusb_free_pollfds
0000000000009ea0 T libusb_free_ss_endpoint_companion_descriptor
000000000000a550 T libusb_free_ss_usb_device_capability_descriptor
0000000000007ea0 T libusb_free_streams
000000000000b830 T libusb_free_transfer
000000000000a490 T libusb_free_usb_2_0_extension_descriptor
0000000000009a90 T libusb_get_active_config_descriptor
0000000000009f00 T libusb_get_bos_descriptor
0000000000006710 T libusb_get_bus_number
0000000000009b50 T libusb_get_config_descriptor
0000000000009c60 T libusb_get_config_descriptor_by_value
0000000000007840 T libusb_get_configuration
000000000000a560 T libusb_get_container_id_descriptor
0000000000006830 T libusb_get_device
0000000000006740 T libusb_get_device_address
0000000000009a40 T libusb_get_device_descriptor
0000000000006fa0 T libusb_get_device_list
0000000000006750 T libusb_get_device_speed
0000000000006c70 T libusb_get_max_iso_packet_size
0000000000006bc0 T libusb_get_max_packet_size
000000000000d0e0 T libusb_get_next_timeout
0000000000006730 T libusb_get_parent
000000000000de50 T libusb_get_pollfds
0000000000006720 T libusb_get_port_number
0000000000006af0 T libusb_get_port_numbers
0000000000006ba0 T libusb_get_port_path
0000000000009db0 T libusb_get_ss_endpoint_companion_descriptor
000000000000a4a0 T libusb_get_ss_usb_device_capability_descriptor
000000000000a620 T libusb_get_string_descriptor_ascii
000000000000a3e0 T libusb_get_usb_2_0_extension_descriptor
0000000000008e00 T libusb_get_version
000000000000d670 T libusb_handle_events
000000000000d6c0 T libusb_handle_events_completed
000000000000d710 T libusb_handle_events_locked
000000000000d660 T libusb_handle_events_timeout
000000000000d420 T libusb_handle_events_timeout_completed
00000000000068d0 T libusb_has_capability
000000000000ae50 T libusb_hotplug_deregister_callback
000000000000b2d0 T libusb_hotplug_get_user_data
000000000000afb0 T libusb_hotplug_register_callback
00000000000086e0 T libusb_init
000000000000cd40 T libusb_interrupt_event_handler
000000000000e710 T libusb_interrupt_transfer
0000000000007f40 T libusb_kernel_driver_active
000000000000ce20 T libusb_lock_event_waiters
000000000000c9f0 T libusb_lock_events
0000000000007210 T libusb_open
0000000000007390 T libusb_open_device_with_vid_pid
000000000000d050 T libusb_pollfds_handle_timeouts
0000000000006760 T libusb_ref_device
0000000000007b10 T libusb_release_interface
0000000000007d60 T libusb_reset_device
00000000000068a0 T libusb_set_auto_detach_kernel_driver
00000000000079c0 T libusb_set_configuration
00000000000083a0 T libusb_set_debug
0000000000007be0 T libusb_set_interface_alt_setting
0000000000008430 T libusb_set_log_cb
00000000000084c0 T libusb_set_option
000000000000d810 T libusb_set_pollfd_notifiers
000000000000e160 T libusb_setlocale
000000000000e230 T libusb_strerror
000000000000b900 T libusb_submit_transfer
000000000000c630 T libusb_transfer_get_stream_id
000000000000c620 T libusb_transfer_set_stream_id
000000000000c8e0 T libusb_try_lock_events
000000000000ceb0 T libusb_unlock_event_waiters
000000000000ca80 T libusb_unlock_events
0000000000006da0 T libusb_unref_device
000000000000cf40 T libusb_wait_for_event
0000000000008b60 T libusb_wrap_sys_device
                 U lseek@GLIBC_2.2.5
                 U malloc@GLIBC_2.2.5
                 U memcpy@GLIBC_2.14
                 U memmove@GLIBC_2.2.5
                 U mmap@GLIBC_2.2.5
                 U munmap@GLIBC_2.2.5
                 U nanosleep@GLIBC_2.2.5
                 U open@GLIBC_2.2.5
                 U opendir@GLIBC_2.2.5
                 U poll@GLIBC_2.2.5
                 U pthread_cond_broadcast@GLIBC_2.3.2
                 U pthread_cond_destroy@GLIBC_2.3.2
                 U pthread_cond_init@GLIBC_2.3.2
                 U pthread_cond_timedwait@GLIBC_2.3.2
                 U pthread_cond_wait@GLIBC_2.3.2
                 U pthread_condattr_destroy@GLIBC_2.2.5
                 U pthread_condattr_init@GLIBC_2.2.5
                 U pthread_condattr_setclock@GLIBC_2.3.3
                 U pthread_create@GLIBC_2.2.5
                 U pthread_getspecific@GLIBC_2.2.5
                 U pthread_join@GLIBC_2.2.5
                 U pthread_key_create@GLIBC_2.2.5
                 U pthread_key_delete@GLIBC_2.2.5
                 U pthread_mutex_destroy@GLIBC_2.2.5
                 U pthread_mutex_init@GLIBC_2.2.5
                 U pthread_mutex_lock@GLIBC_2.2.5
                 U pthread_mutex_trylock@GLIBC_2.2.5
                 U pthread_mutex_unlock@GLIBC_2.2.5
                 U pthread_self@GLIBC_2.2.5
                 U pthread_setname_np@GLIBC_2.12
                 U pthread_setspecific@GLIBC_2.2.5
                 U read@GLIBC_2.2.5
                 U readdir@GLIBC_2.2.5
                 U readlink@GLIBC_2.2.5
                 U realloc@GLIBC_2.2.5
                 U statfs@GLIBC_2.2.5
                 U stderr@GLIBC_2.2.5
                 U strchr@GLIBC_2.2.5
                 U strcmp@GLIBC_2.2.5
                 U strdup@GLIBC_2.2.5
                 U strlen@GLIBC_2.2.5
                 U strrchr@GLIBC_2.2.5
                 U strtol@GLIBC_2.2.5
                 U syscall@GLIBC_2.2.5
                 U timerfd_create@GLIBC_2.8
                 U timerfd_settime@GLIBC_2.8
                 U udev_device_get_action@LIBUDEV_183
                 U udev_device_get_devnode@LIBUDEV_183
                 U udev_device_get_sysname@LIBUDEV_183
                 U udev_device_new_from_syspath@LIBUDEV_183
                 U udev_device_unref@LIBUDEV_183
                 U udev_enumerate_add_match_property@LIBUDEV_183
                 U udev_enumerate_add_match_subsystem@LIBUDEV_183
                 U udev_enumerate_get_list_entry@LIBUDEV_183
                 U udev_enumerate_new@LIBUDEV_183
                 U udev_enumerate_scan_devices@LIBUDEV_183
                 U udev_enumerate_unref@LIBUDEV_183
                 U udev_list_entry_get_name@LIBUDEV_183
                 U udev_list_entry_get_next@LIBUDEV_183
                 U udev_monitor_enable_receiving@LIBUDEV_183
                 U udev_monitor_filter_add_match_subsystem_devtype@LIBUDEV_183
                 U udev_monitor_get_fd@LIBUDEV_183
                 U udev_monitor_new_from_netlink@LIBUDEV_183
                 U udev_monitor_receive_device@LIBUDEV_183
                 U udev_monitor_unref@LIBUDEV_183
                 U udev_new@LIBUDEV_183
                 U udev_unref@LIBUDEV_183
                 U uname@GLIBC_2.2.5
                 U write@GLIBC_2.2.5

解析方式和librockmong.so中函数的解析方式一致。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值