📄 helper.cod
字号:
00010 e1a05000 mov r5, r0
; 88 : DWORD dwValLen;
; 89 : LONG lStatus;
; 90 :
; 91 : dwValLen = (wcslen( szValue)+1)*sizeof(WCHAR);
00014 e1a00006 mov r0, r6
00018 eb000000 bl wcslen
; 92 : lStatus = RegSetValueEx( hKey, szValueName, 0, REG_SZ, (PBYTE)szValue, dwValLen);
; 93 :
; 94 : if (lStatus != ERROR_SUCCESS) {
0001c e2803001 add r3, r0, #1
00020 e1a03083 mov r3, r3, lsl #1
00024 e58d3004 str r3, [sp, #4]
00028 e3a03001 mov r3, #1
0002c e3a02000 mov r2, #0
00030 e1a01004 mov r1, r4
00034 e1a00005 mov r0, r5
00038 e58d6000 str r6, [sp]
0003c eb000000 bl RegSetValueExW
00040 e3500000 cmp r0, #0
; 95 : DEBUGMSG( ZONE_HELPER , (TEXT("ATAConfig: RegSetValueEx(%s) failed -returned %d Error=%08X\r\n"), szValueName, lStatus, GetLastError()));
; 96 : return FALSE;
00044 13a00000 movne r0, #0
; 97 : }
; 98 :
; 99 : DEBUGMSG( ZONE_HELPER, (TEXT("ATAPI: AtaSetRegistryString(%s) Value(%s) hKey: %x\r\n"), szValueName, szValue, hKey));
; 100 : return TRUE;
00048 03a00001 moveq r0, #1
; 101 : }
0004c e28dd008 add sp, sp, #8
00050 e8bd4070 ldmia sp!, {r4 - r6, lr}
00054 e12fff1e bx lr
00058 |$M32088|
ENDP ; |?AtaSetRegistryString@@YAHPAUHKEY__@@PAG1@Z|, AtaSetRegistryString
EXPORT |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| ; ATAParseIdString
IMPORT |memcpy|
IMPORT |__C_specific_handler|
IMPORT |GetLastError|
IMPORT |SetLastError|
00000 AREA |.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.xdata$$?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z|, DATA, SELECTION=5, ASSOC=|.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| } ; comdat associative
|$T32128| DCD 0x1
DCD |$L32099|
DCD |$L32100|
DCD |$L32095|
DCD |$L32096|
00000 AREA |.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| } ; comdat associative
|$T32130| DCD |$L32129|
DCD 0xc0004d04
00000 AREA |.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| } ; comdat associative
|$T32132| DCD |$L32095|
DCD 0x40000200
; Function compile flags: /Ogsy
00000 AREA |.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 00000000 DCD |__C_specific_handler|
00004 00000000 DCD |$T32128|
00008 |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| PROC ; ATAParseIdString
; 105 : {
00008 |$L32129|
00008 e1a0c00d mov r12, sp
0000c e92d58f0 stmdb sp!, {r4 - r7, r11, r12, lr}
00010 e28db01c add r11, sp, #0x1C
00014 e24dd008 sub sp, sp, #8
00018 |$L32126|
00018 e1a05003 mov r5, r3
0001c e1a06000 mov r6, r0
; 106 : BYTE *p;
; 107 : DWORD cCopied;
; 108 : BYTE *pDest;
; 109 :
; 110 : // check validity (spec says ASCII, I assumed printable)
; 111 : for (p = str; p < &str[len]; ++p)
00020 e0861001 add r1, r6, r1
00024 e1560001 cmp r6, r1
00028 e1a0e006 mov lr, r6
0002c 2a000011 bcs |$L32124|
00030 |$L32000|
; 112 : if (*p < 0x20 || *p > 0x7F) {
00030 e5de0000 ldrb r0, [lr]
00034 e3500020 cmp r0, #0x20
00038 3a000005 bcc |$L32105|
0003c e350007f cmp r0, #0x7F
00040 8a000003 bhi |$L32105|
00044 e28ee001 add lr, lr, #1
00048 e15e0001 cmp lr, r1
0004c 3afffff7 bcc |$L32000|
00050 ea000008 b |$L32124|
00054 |$L32105|
00054 e3a03000 mov r3, #0
00058 e1a00003 mov r0, r3
; 124 : *pdwOffset = 0;
0005c e5823000 str r3, [r2]
; 154 : }
00060 e91b68f0 ldmdb r11, {r4 - r7, r11, sp, lr}
00064 e12fff1e bx lr
00068 |$L32005|
; 113 : *pdwOffset = 0;
; 114 : return FALSE;
; 115 : }
; 116 :
; 117 : // find the last non-pad character
; 118 : for (p = &str[len]; p > str && p[-1] == ' '; --p)
00068 e5513001 ldrb r3, [r1, #-1]
0006c e3530020 cmp r3, #0x20
00070 1a000002 bne |$L32112|
00074 e2411001 sub r1, r1, #1
00078 |$L32124|
00078 e1510006 cmp r1, r6
0007c 8afffff9 bhi |$L32005|
00080 |$L32112|
; 119 : ;
; 120 : cCopied = p - str;
00080 e0513006 subs r3, r1, r6
; 121 :
; 122 : // special case - empty string implies not present
; 123 : if (cCopied == 0) {
00084 03a00001 moveq r0, #1
00088 03a03000 moveq r3, #0
; 124 : *pdwOffset = 0;
0008c 05823000 streq r3, [r2]
; 154 : }
00090 091b68f0 ldmeqdb r11, {r4 - r7, r11, sp, lr}
00094 012fff1e bxeq lr
; 125 : return TRUE;
; 126 : }
; 127 : ++cCopied; // this is a byte count so add a terminating null
00098 e2834001 add r4, r3, #1
; 128 :
; 129 : // always increment *ppDest because it counts the bytes that we want,
; 130 : // not just the bytes that we've actually written.
; 131 : pDest = *ppDest;
0009c e5957000 ldr r7, [r5]
000a0 e50b4024 str r4, [r11, #-0x24]
; 132 : *ppDest += cCopied;
000a4 e0873004 add r3, r7, r4
000a8 e5853000 str r3, [r5]
; 133 :
; 134 : // if there has already been an error, then we needn't continue further
; 135 : if (GetLastError() != ERROR_SUCCESS)
000ac eb000000 bl GetLastError
000b0 e3500000 cmp r0, #0
; 136 : return TRUE;
000b4 13a00001 movne r0, #1
; 154 : }
000b8 191b68f0 ldmnedb r11, {r4 - r7, r11, sp, lr}
000bc 112fff1e bxne lr
; 137 :
; 138 : // make sure there's enough space to copy into
; 139 : if (cCopied > *pcBytesLeft) {
000c0 e59b5000 ldr r5, [r11]
000c4 e5953000 ldr r3, [r5]
000c8 e1540003 cmp r4, r3
000cc 9a000003 bls |$L32010|
; 140 : SetLastError(ERROR_INSUFFICIENT_BUFFER);
000d0 e3a0007a mov r0, #0x7A
000d4 eb000000 bl SetLastError
; 141 : cCopied = *pcBytesLeft;
000d8 e5954000 ldr r4, [r5]
000dc e50b4024 str r4, [r11, #-0x24]
000e0 |$L32010|
000e0 |$L32099|
; 142 : }
; 143 : __try {
; 144 : if (cCopied) {
000e0 e3540000 cmp r4, #0
000e4 0a000006 beq |$L32100|
; 145 : memcpy(pDest, str, cCopied-1);
000e8 e2442001 sub r2, r4, #1
000ec e1a01006 mov r1, r6
000f0 e1a00007 mov r0, r7
000f4 eb000000 bl memcpy
; 146 : pDest[cCopied-1] = '\0';
000f8 e0873004 add r3, r7, r4
000fc e3a02000 mov r2, #0
00100 e5432001 strb r2, [r3, #-1]
00104 |$L32100|
; 147 : }
; 148 : } __except (EXCEPTION_EXECUTE_HANDLER) {
00104 ea000003 b |$L32101|
00108 |$L32096|
; 149 : SetLastError(ERROR_INVALID_PARAMETER);
00108 e3a00057 mov r0, #0x57
0010c eb000000 bl SetLastError
; 154 : }
00110 e59b5000 ldr r5, [r11]
00114 e51b4024 ldr r4, [r11, #-0x24]
00118 |$L32101|
; 150 : };
; 151 :
; 152 : *pcBytesLeft -= cCopied;
00118 e5953000 ldr r3, [r5]
; 153 : return TRUE;
0011c e3a00001 mov r0, #1
00120 e0433004 sub r3, r3, r4
00124 e5853000 str r3, [r5]
; 154 : }
00128 e91b68f0 ldmdb r11, {r4 - r7, r11, sp, lr}
0012c e12fff1e bx lr
; 153 : return TRUE;
00130 e51b0020 ldr r0, [r11, #-0x20]
; 154 : }
00134 e91b68f0 ldmdb r11, {r4 - r7, r11, sp, lr}
00138 e12fff1e bx lr
ENDP ; |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z|, ATAParseIdString
0013c |$L32098|
0013c |$L32127|
0013c |$L32095|
; 147 : }
; 148 : } __except (EXCEPTION_EXECUTE_HANDLER) {
0013c e3a00001 mov r0, #1
00140 |$L32097|
00140 e1a0f00e mov pc, lr
00144 |$L32131|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -