?? helper.cod
字號:
004ec e59f0078 ldr r0, [pc, #0x78]
004f0 eb000000 bl NKDbgPrintfW
004f4 e3a03001 mov r3, #1
004f8 e58d3020 str r3, [sp, #0x20]
004fc ea000001 b |$L32087|
00500 |$L32086|
00500 e3a03000 mov r3, #0
00504 e58d3020 str r3, [sp, #0x20]
00508 |$L32087|
; 96 : return FALSE;
00508 e3a03000 mov r3, #0
0050c e58d3010 str r3, [sp, #0x10]
00510 ea00000f b |$L31996|
00514 |$L32001|
; 97 : }
; 98 :
; 99 : DEBUGMSG( ZONE_HELPER, (TEXT("ATAPI: AtaSetRegistryString(%s) Value(%s) hKey: %x\r\n"), szValueName, szValue, hKey));
00514 e59f304c ldr r3, [pc, #0x4C]
00518 e5933440 ldr r3, [r3, #0x440]
0051c e3130901 tst r3, #1, 18
00520 0a000007 beq |$L32088|
00524 e59d3030 ldr r3, [sp, #0x30]
00528 e59d2038 ldr r2, [sp, #0x38]
0052c e59d1034 ldr r1, [sp, #0x34]
00530 e59f002c ldr r0, [pc, #0x2C]
00534 eb000000 bl NKDbgPrintfW
00538 e3a03001 mov r3, #1
0053c e58d3024 str r3, [sp, #0x24]
00540 ea000001 b |$L32089|
00544 |$L32088|
00544 e3a03000 mov r3, #0
00548 e58d3024 str r3, [sp, #0x24]
0054c |$L32089|
; 100 : return TRUE;
0054c e3a03001 mov r3, #1
00550 e58d3010 str r3, [sp, #0x10]
00554 |$L31996|
; 96 : return FALSE;
00554 e59d0010 ldr r0, [sp, #0x10]
; 101 : }
00558 e28dd028 add sp, sp, #0x28
0055c e89d6000 ldmia sp, {sp, lr}
00560 e12fff1e bx lr
00564 |$L32095|
00564 00000000 DCD |??_C@_1GK@DOGBCJA@?$AAA?$AAT?$AAA?$AAP?$AAI?$AA?3?$AA?5?$AAA?$AAt?$AAa?$AAS?$AAe?$AAt?$AAR?$AAe?$AAg?$AAi?$AAs?$AAt?$AAr@|
00568 00000000 DCD |dpCurSettings|
0056c 00000000 DCD |??_C@_1HO@LINNMDEH@?$AAA?$AAT?$AAA?$AAC?$AAo?$AAn?$AAf?$AAi?$AAg?$AA?3?$AA?5?$AAR?$AAe?$AAg?$AAS?$AAe?$AAt?$AAV?$AAa?$AAl@|
00570 |$M32092|
ENDP ; |?AtaSetRegistryString@@YAHPAUHKEY__@@PAG1@Z|, AtaSetRegistryString
EXPORT |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| ; ATAParseIdString
IMPORT |__C_specific_handler|
IMPORT |memcpy|
IMPORT |SetLastError|
00000 AREA |.xdata|, DATA
|$T32110| DCD 0x1
DCD |$L32102|
DCD |$L32103|
DCD |$L32098|
DCD |$L32099|
00020 AREA |.pdata|, PDATA
|$T32112| DCD |$L32111|
DCD 0xc0007905
|$T32114| DCD |$L32098|
DCD 0x40000200
; Function compile flags: /Odt
00570 AREA |.text|, CODE, ARM
00570 00000000 DCD |__C_specific_handler|
00574 00000000 DCD |$T32110|
00578 |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| PROC ; ATAParseIdString
; 105 : {
00578 |$L32111|
00578 e1a0c00d mov r12, sp
0057c e92d000f stmdb sp!, {r0 - r3}
00580 e92d5800 stmdb sp!, {r11, r12, lr}
00584 e28db00c add r11, sp, #0xC
00588 e24dd014 sub sp, sp, #0x14
0058c |$L32108|
; 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)
0058c e59b3000 ldr r3, [r11]
00590 e50b3020 str r3, [r11, #-0x20]
00594 ea000002 b |$L32016|
00598 |$L32017|
00598 e51b3020 ldr r3, [r11, #-0x20]
0059c e2833001 add r3, r3, #1
005a0 e50b3020 str r3, [r11, #-0x20]
005a4 |$L32016|
005a4 e59b2000 ldr r2, [r11]
005a8 e59b3004 ldr r3, [r11, #4]
005ac e0822003 add r2, r2, r3
005b0 e51b3020 ldr r3, [r11, #-0x20]
005b4 e1530002 cmp r3, r2
005b8 2a00000e bcs |$L32018|
; 112 : if (*p < 0x20 || *p > 0x7F) {
005bc e51b3020 ldr r3, [r11, #-0x20]
005c0 e5d33000 ldrb r3, [r3]
005c4 e3530020 cmp r3, #0x20
005c8 ba000003 blt |$L32020|
005cc e51b3020 ldr r3, [r11, #-0x20]
005d0 e5d33000 ldrb r3, [r3]
005d4 e353007f cmp r3, #0x7F
005d8 da000005 ble |$L32019|
005dc |$L32020|
; 113 : *pdwOffset = 0;
005dc e59b2008 ldr r2, [r11, #8]
005e0 e3a03000 mov r3, #0
005e4 e5823000 str r3, [r2]
; 114 : return FALSE;
005e8 e3a03000 mov r3, #0
005ec e50b3014 str r3, [r11, #-0x14]
005f0 ea000056 b |$L32012|
005f4 |$L32019|
; 115 : }
; 116 :
; 117 : // find the last non-pad character
; 118 : for (p = &str[len]; p > str && p[-1] == ' '; --p)
005f4 eaffffe7 b |$L32017|
005f8 |$L32018|
005f8 e59b2000 ldr r2, [r11]
005fc e59b3004 ldr r3, [r11, #4]
00600 e0823003 add r3, r2, r3
00604 e50b3020 str r3, [r11, #-0x20]
00608 ea000002 b |$L32021|
0060c |$L32022|
0060c e51b3020 ldr r3, [r11, #-0x20]
00610 e2433001 sub r3, r3, #1
00614 e50b3020 str r3, [r11, #-0x20]
00618 |$L32021|
00618 e51b2020 ldr r2, [r11, #-0x20]
0061c e59b3000 ldr r3, [r11]
00620 e1520003 cmp r2, r3
00624 9a000005 bls |$L32023|
00628 e51b3020 ldr r3, [r11, #-0x20]
0062c e2433001 sub r3, r3, #1
00630 e5d33000 ldrb r3, [r3]
00634 e3530020 cmp r3, #0x20
00638 1a000000 bne |$L32023|
; 119 : ;
0063c eafffff2 b |$L32022|
00640 |$L32023|
; 120 : cCopied = p - str;
00640 e51b2020 ldr r2, [r11, #-0x20]
00644 e59b3000 ldr r3, [r11]
00648 e0423003 sub r3, r2, r3
0064c e50b3018 str r3, [r11, #-0x18]
; 121 :
; 122 : // special case - empty string implies not present
; 123 : if (cCopied == 0) {
00650 e51b3018 ldr r3, [r11, #-0x18]
00654 e3530000 cmp r3, #0
00658 1a000005 bne |$L32024|
; 124 : *pdwOffset = 0;
0065c e59b2008 ldr r2, [r11, #8]
00660 e3a03000 mov r3, #0
00664 e5823000 str r3, [r2]
; 125 : return TRUE;
00668 e3a03001 mov r3, #1
0066c e50b3014 str r3, [r11, #-0x14]
00670 ea000036 b |$L32012|
00674 |$L32024|
; 126 : }
; 127 : ++cCopied; // this is a byte count so add a terminating null
00674 e51b3018 ldr r3, [r11, #-0x18]
00678 e2833001 add r3, r3, #1
0067c e50b3018 str r3, [r11, #-0x18]
; 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;
00680 e59b300c ldr r3, [r11, #0xC]
00684 e5933000 ldr r3, [r3]
00688 e50b301c str r3, [r11, #-0x1C]
; 132 : *ppDest += cCopied;
0068c e59b300c ldr r3, [r11, #0xC]
00690 e5932000 ldr r2, [r3]
00694 e51b3018 ldr r3, [r11, #-0x18]
00698 e0822003 add r2, r2, r3
0069c e59b300c ldr r3, [r11, #0xC]
006a0 e5832000 str r2, [r3]
; 133 :
; 134 : // if there has already been an error, then we needn't continue further
; 135 : if (GetLastError() != ERROR_SUCCESS)
006a4 eb000000 bl GetLastError
006a8 e50b0010 str r0, [r11, #-0x10]
006ac e51b3010 ldr r3, [r11, #-0x10]
006b0 e3530000 cmp r3, #0
006b4 0a000002 beq |$L32025|
; 136 : return TRUE;
006b8 e3a03001 mov r3, #1
006bc e50b3014 str r3, [r11, #-0x14]
006c0 ea000022 b |$L32012|
006c4 |$L32025|
; 137 :
; 138 : // make sure there's enough space to copy into
; 139 : if (cCopied > *pcBytesLeft) {
006c4 e51b2018 ldr r2, [r11, #-0x18]
006c8 e59b3010 ldr r3, [r11, #0x10]
006cc e5933000 ldr r3, [r3]
006d0 e1520003 cmp r2, r3
006d4 9a000004 bls |$L32026|
; 140 : SetLastError(ERROR_INSUFFICIENT_BUFFER);
006d8 e3a0007a mov r0, #0x7A
006dc eb000000 bl SetLastError
; 141 : cCopied = *pcBytesLeft;
006e0 e59b3010 ldr r3, [r11, #0x10]
006e4 e5933000 ldr r3, [r3]
006e8 e50b3018 str r3, [r11, #-0x18]
006ec |$L32026|
006ec |$L32102|
; 142 : }
; 143 : __try {
; 144 : if (cCopied) {
006ec e51b3018 ldr r3, [r11, #-0x18]
006f0 e3530000 cmp r3, #0
006f4 0a00000a beq |$L32028|
; 145 : memcpy(pDest, str, cCopied-1);
006f8 e51b3018 ldr r3, [r11, #-0x18]
006fc e2432001 sub r2, r3, #1
00700 e59b1000 ldr r1, [r11]
00704 e51b001c ldr r0, [r11, #-0x1C]
00708 eb000000 bl memcpy
; 146 : pDest[cCopied-1] = '\0';
0070c e51b3018 ldr r3, [r11, #-0x18]
00710 e2432001 sub r2, r3, #1
00714 e51b301c ldr r3, [r11, #-0x1C]
00718 e0832002 add r2, r3, r2
0071c e3a03000 mov r3, #0
00720 e5c23000 strb r3, [r2]
00724 |$L32028|
00724 |$L32103|
; 147 : }
; 148 : } __except (EXCEPTION_EXECUTE_HANDLER) {
00724 ea000001 b |$L32104|
00728 |$L32099|
; 149 : SetLastError(ERROR_INVALID_PARAMETER);
00728 e3a00057 mov r0, #0x57
0072c eb000000 bl SetLastError
00730 |$L32104|
; 150 : };
; 151 :
; 152 : *pcBytesLeft -= cCopied;
00730 e59b3010 ldr r3, [r11, #0x10]
00734 e5932000 ldr r2, [r3]
00738 e51b3018 ldr r3, [r11, #-0x18]
0073c e0422003 sub r2, r2, r3
00740 e59b3010 ldr r3, [r11, #0x10]
00744 e5832000 str r2, [r3]
; 153 : return TRUE;
00748 e3a03001 mov r3, #1
0074c e50b3014 str r3, [r11, #-0x14]
00750 |$L32012|
; 114 : return FALSE;
00750 e51b0014 ldr r0, [r11, #-0x14]
; 154 : }
00754 e91b6800 ldmdb r11, {r11, sp, lr}
00758 e12fff1e bx lr
ENDP ; |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z|, ATAParseIdString
0075c |$L32101|
0075c |$L32109|
0075c |$L32098|
; 147 : }
; 148 : } __except (EXCEPTION_EXECUTE_HANDLER) {
0075c e3a00001 mov r0, #1
00760 |$L32100|
00760 e1a0f00e mov pc, lr
00764 |$L32113|
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -