如何解决什么是 linux/unix 中的 checkcon
是否可以像 sql server 一样检查约束?这将在什么 .h 中定义。这是使用 ghidra 进行逆向工程的,我仍然想知道为什么 ghidra 将所有移动指令表示为 _or 但它不会让我编辑它。
*************************************************************
* FUNCTION *
*************************************************************
bool __stdcall usb_pckm_checkcons (longlong param_1 )
bool v0_lo:1 <RETURN>
longlong a0:8 param_1
undefined8 Stack[-0x10] local_10 XREF[2]: 00103ae0 (W),00103af8 (R)
undefined8 Stack[-0x18] local_18 XREF[2]: 00103ad4 (W),00103afc (R)
undefined8 Stack[-0x20] local_20 XREF[4]: 00103b18 (W),00103b5c (R),00103bcc (R),00103c50 (R)
undefined8 Stack[-0x28] local_28 XREF[4]: 00103be4 (W),00103be8 (R),00103c18 (R),00103c6c (W)
undefined8 Stack[-0x30] local_30 XREF[2]: 00103b54 (W),00103cc0 (R)
undefined8 Stack[-0x38] local_38 XREF[2]: 00103bf8 (W),00103c14 (R)
undefined8 Stack[-0x40] local_40 XREF[2]: 00103c84 (W),00103c90 (R)
usb_pckm_checkcons XREF[2]: Entry Point (*),usb_hid_attach:00102078 (c)
00103ad0 67 bd fe daddiu sp,sp,-0x150
b0
00103ad4 ff b0 01 sd s0,local_18 (sp )
38
00103ad8 00 80 80 or s0,param_1,zero
25
00103adc 10 80 00 beq param_1,zero,LAB_00103af4
05
00103ae0 ff bf 01 _sd ra,local_10 (sp )
40
00103ae4 8c 81 00 lw at,0x4 (param_1 )
04
00103ae8 30 21 00 andi at,at,0x40
40
00103aec 24 02 00 li v0,0x40
40
00103af0 10 22 00 beq at,v0,LAB_00103b08
05
LAB_00103af4 XREF[1]: 00103adc (j)
00103af4 00 00 10 _or v0,zero
25
LAB_00103af8 XREF[9]: 00103b38 (j),00103b88 (j),00103b90 (j),00103b98 (j),00103c44 (j),00103ca0 (j),00103ccc (j),00103cd4 (j),00103cdc (j)
00103af8 df bf 01 ld ra,local_10 (sp )
40
00103afc df b0 01 ld s0,local_18 (sp )
38
00103b00 03 e0 00 jr ra
08
00103b04 67 bd 01 _daddiu sp,0x150
50
LAB_00103b08 XREF[1]: 00103af0 (j)
00103b08 df 84 67 ld param_1,0x6778 (gp )
78
00103b0c 0c 04 18 jal kopt_find undefined kopt_find()
3e
00103b10 64 84 04 _daddiu param_1,0x488
88
00103b14 14 40 00 bne v0,LAB_00103b40
0a
00103b18 ff a2 01 _sd v0,local_20 (sp )
30
LAB_00103b1c XREF[1]: 00103b50 (j)
00103b1c df 84 57 ld param_1,0x57e8 (gp )
e8
00103b20 10 80 00 beq param_1,LAB_00103b90
1b
00103b24 24 02 00 _li v0,0x1
01
00103b28 0c 04 10 jal usb_pckm_is_better_defkbd bool usb_pckm_is_better_defkbd(l
9e
00103b2c 02 00 28 _or a1,s0,zero
25
00103b30 10 40 00 beq v0,LAB_00103b98
19
00103b34 24 02 00 _li v0,0x1
01
00103b38 10 00 ff b LAB_00103af8
ef
00103b3c ff 90 57 _sd s0,0x57e8 (gp )
e8
LAB_00103b40 XREF[1]: 00103b14 (j)
00103b40 df 85 67 ld a1,0x6778 (gp )
78
00103b44 00 40 20 or param_1,zero
25
00103b48 0c 04 18 jal strstr char * strstr(char * __haystack,40
00103b4c 64 a5 09 _daddiu a1,a1,0x968
68
00103b50 10 40 ff beq v0,LAB_00103b1c
f2
00103b54 ff a2 01 _sd v0,local_30 (sp )
20
00103b58 df 85 67 ld a1,0x6778 (gp )
78
00103b5c df a4 01 ld param_1,local_20 (sp )
30
00103b60 0c 04 18 jal strcmp int strcmp(char * __s1,char * _
1c
00103b64 64 a5 09 _daddiu a1,0x930
30
00103b68 14 40 00 bne v0,LAB_00103ba0
0d
00103b6c df 84 57 _ld param_1,0x57e8 (gp )
e8
00103b70 10 80 00 beq param_1,LAB_00103b88
05
00103b74 24 02 00 _li v0,0x1
01
00103b78 0c 04 10 jal usb_pckm_is_better_defkbd bool usb_pckm_is_better_defkbd(l
9e
00103b7c 02 00 28 _or a1,zero
25
00103b80 10 40 00 beq v0,LAB_00103cd4
54
00103b84 24 02 00 _li v0,0x1
01
LAB_00103b88 XREF[1]: 00103b70 (j)
00103b88 10 00 ff b LAB_00103af8
db
00103b8c ff 90 57 _sd s0,0x57e8 (gp )
e8
LAB_00103b90 XREF[1]: 00103b20 (j)
00103b90 10 00 ff b LAB_00103af8
d9
00103b94 ff 90 57 _sd s0,0x57e8 (gp )
e8
LAB_00103b98 XREF[1]: 00103b30 (j)
00103b98 10 00 ff b LAB_00103af8
d7
00103b9c 00 00 10 _or v0,zero
25
LAB_00103ba0 XREF[1]: 00103b68 (j)
00103ba0 0c 04 18 jal usb_iface_device undefined usb_iface_device()
0e
00103ba4 de 04 00 _ld param_1,0x88 (s0 )
88
00103ba8 0c 04 18 jal usb_device_path undefined usb_device_path()
44
00103bac 00 40 20 _or param_1,zero
25
00103bb0 00 40 30 or a2,zero
25
00103bb4 df 85 67 ld a1,0x6778 (gp )
78
00103bb8 66 07 00 daddiu a3,0x58
58
00103bbc 67 a4 00 daddiu param_1,0x0
00
00103bc0 0c 04 18 jal sprintf int sprintf(char * __s,char * _
7e
00103bc4 64 a5 09 _daddiu a1,0x970
70
00103bc8 df 85 67 ld a1,0x6778 (gp )
78
00103bcc df a4 01 ld param_1,local_20 (sp )
30
00103bd0 0c 04 18 jal strstr char * strstr(char * __haystack,40
00103bd4 64 a5 09 _daddiu a1,0x948
48
00103bd8 10 40 00 beq v0,LAB_00103c4c
1c
00103bdc 64 46 00 _daddiu a2,0xb
0b
00103be0 10 c0 00 beq a2,LAB_00103c70
23
00103be4 ff a6 01 _sd a2,local_28 (sp )
28
LAB_00103be8 XREF[1]: 00103c68 (j)
00103be8 df a4 01 ld param_1,local_28 (sp )
28
00103bec 0c 04 18 jal strchr char * strchr(char * __s,int __
86
00103bf0 24 05 00 _li a1,0x2f
2f
00103bf4 24 05 00 li a1,0x10
10
00103bf8 ff a2 01 sd v0,local_38 (sp )
18
00103bfc 0c 04 18 jal bzero void bzero(void * __s,size_t __
4a
00103c00 67 a4 01 _daddiu param_1,0x100
00
00103c04 df 85 67 ld a1,0x6778 (gp )
78
00103c08 67 a4 01 daddiu param_1,0x100
00
00103c0c 0c 04 18 jal strcat char * strcat(char * __dest,cha
24
00103c10 64 a5 09 _daddiu a1,0x978
78
00103c14 df a6 01 ld a2,local_38 (sp )
18
00103c18 df a7 01 ld a3,local_28 (sp )
28
00103c1c 67 a5 01 daddiu a1,0x100
00
00103c20 00 e0 20 or param_1,a3,zero
25
00103c24 00 c7 30 dsubu a2,a2,a3
2f
00103c28 0c 04 18 jal bcopy void bcopy(void * __src,void *
88
00103c2c 64 c6 00 _daddiu a2,0x1
01
00103c30 67 a5 01 daddiu a1,0x100
00
00103c34 0c 04 18 jal strstr char * strstr(char * __haystack,40
00103c38 67 a4 00 _daddiu param_1,0x0
00
00103c3c 14 40 00 bne v0,LAB_00103cac
1b
00103c40 df 85 67 _ld a1,0x6778 (gp )
78
00103c44 10 00 ff b LAB_00103af8
ac
00103c48 00 00 10 _or v0,zero
25
LAB_00103c4c XREF[1]: 00103bd8 (j)
00103c4c df 85 67 ld a1,0x6778 (gp )
78
00103c50 df a4 01 ld param_1,local_20 (sp )
30
00103c54 0c 04 18 jal strstr char * strstr(char * __haystack,40
00103c58 64 a5 09 _daddiu a1,0x958
58
00103c5c 10 40 00 beq v0,LAB_00103c74
05
00103c60 df 84 57 _ld param_1,0x57e8 (gp )
e8
00103c64 64 46 00 daddiu a2,0xb
0b
00103c68 14 c0 ff bne a2,LAB_00103be8
df
00103c6c ff a6 01 _sd a2,local_28 (sp )
28
LAB_00103c70 XREF[1]: 00103be0 (j)
00103c70 df 84 57 ld param_1,0x57e8 (gp )
e8
LAB_00103c74 XREF[1]: 00103c5c (j)
00103c74 10 80 00 beq param_1,LAB_00103cac
0d
00103c78 df 85 67 _ld a1,0x6778 (gp )
78
00103c7c 0c 04 10 jal usb_pckm_module_id undefined8 usb_pckm_module_id(vo
e4
00103c80 00 00 00 _nop
00
00103c84 ff a2 01 sd v0,local_40 (sp )
10
00103c88 0c 04 10 jal usb_pckm_module_id undefined8 usb_pckm_module_id(vo
e4
00103c8c 02 00 20 _or param_1,zero
25
00103c90 df a7 01 ld a3,local_40 (sp )
10
00103c94 00 e2 38 slt a3,v0
2a
00103c98 10 e0 00 beq a3,LAB_00103cac
04
00103c9c df 85 67 _ld a1,0x6778 (gp )
78
00103ca0 10 00 ff b LAB_00103af8
95
00103ca4 00 00 10 _or v0,zero
25
00103ca8 df ?? DFh
00103ca9 85 ?? 85h
00103caa 67 ?? 67h g
00103cab 78 ?? 78h x
LAB_00103cac XREF[3]: 00103c3c (j),00103c74 (j),00103c98 (j)
00103cac 67 a4 00 daddiu param_1,0x0
00
00103cb0 0c 04 18 jal strstr char * strstr(char * __haystack,40
00103cb4 64 a5 09 _daddiu a1,0x968
68
00103cb8 00 40 28 or a1,zero
25
00103cbc 0c 04 18 jal strcmp int strcmp(char * __s1,char * _
1c
00103cc0 df a4 01 _ld param_1,local_30 (sp )
20
00103cc4 10 40 00 beq v0,LAB_00103cdc
05
00103cc8 24 02 00 _li v0,0x1
01
00103ccc 10 00 ff b LAB_00103af8
8a
00103cd0 00 00 10 _or v0,zero
25
LAB_00103cd4 XREF[1]: 00103b80 (j)
00103cd4 10 00 ff b LAB_00103af8
88
00103cd8 00 00 10 _or v0,zero
25
LAB_00103cdc XREF[1]: 00103cc4 (j)
00103cdc 10 00 ff b LAB_00103af8
86
00103ce0 ff 90 57 _sd s0,0x57e8 (gp )
e8
似乎调用了许多用于查找东西的东西?这是 unix 下 USB 堆栈中的一个函数,它是用 mips 程序集编写的。对于那些可能不知道 jal=call 的人。
解决方法
使用 strings 命令后,我发现它与键盘控制台有关,因为 0andriy 使我相信。该项目不是开源的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。