KeenSecurityLab / BinAbsInspector

BinAbsInspector: Vulnerability Scanner for Binaries
GNU General Public License v3.0
1.58k stars 231 forks source link

工具似乎在识别64位arm寄存器上有点问题? #43

Closed diablo0822 closed 2 years ago

diablo0822 commented 2 years ago
                 LAB_001695f8                                    XREF[2]:     001695b0(j), 00169684(j)  
        001695f8 73 52 4b b9     ldr        w19,[x19, #0xb50]=>PTR_002cfb50                  = 00000000
        001695fc e0 03 14 2a     mov        w0,w20
        00169600 a2 8f 40 b9     ldr        w2,[x29, #local_4]
        00169604 61 02 40 b9     ldr        w1,[x19]                                         CWE476: Null pointer dereference

这里报空指针异常,应该是指[X19]寄存器里面的内容吧,实际上它是在w19中被赋值了的。

MatthewShao commented 2 years ago

ldr w1, [x19]是从x19寄存器保存的地址里面读取内容到w1寄存器,报CWE479的原因可能是x19寄存器目前值为0,只从4行汇编上下文看不出更多信息,但分析过程应该是没错的。

diablo0822 commented 2 years ago

ldr w1, [x19]是从x19寄存器保存的地址里面读取内容到w1寄存器,报CWE479的原因可能是x19寄存器目前值为0,只从4行汇编上下文看不出更多信息,但分析过程应该是没错的。

哦,这是分析库文件的接口函数里面的一部分上下文件比较复杂。不过0x1695f8地址的ldr w19,...这一句是有读取内容到w19或者说是x19上的吧。难道说分析程序认为这里读到的内容是0?

MatthewShao commented 2 years ago

建议先参考arm文档理解ldr指令的含义:https://developer.arm.com/documentation/dui0802/a/CIHGJHED, 需要注意0x1695f8并没有往x19写内容,所以在0x169600时x19保存的值可能为0,具体还需要结合上下文分析