📄 blcommon.cod
字号:
0007c 3affffea bcc |$L36948|
00080 |$L36950|
; 167 : }
; 168 : return TRUE;
00080 e3a00001 mov r0, #1
; 169 : }
00084 e8bd40f0 ldmia sp!, {r4 - r7, lr}
00088 e12fff1e bx lr
0008c |$M37080|
ENDP ; |KernelRelocate|
EXPORT |??_C@_07FKMI@B000FF?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_0DB@FGGA@?$AN?6This?5is?5not?5a?5?4BIN?5file?5?$CFx?5?$CFx?5@| [ DATA ] ; `string'
EXPORT |??_C@_0CE@CEJO@Unable?5to?5read?5image?5start?1lengt@| [ DATA ] ; `string'
EXPORT |??_C@_0CC@MOBO@?$CBOEMVERIFYMEMORY?3?5Invalid?5image?$AN@| [ DATA ] ; `string'
EXPORT |??_C@_0BP@FBFL@Invalid?5Flash?5Address?1Length?$AN?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_0DD@JCBB@?$CK?$CK?$CK?$CK?$CK?$CK?5Data?5record?5?$CFd?5corrupted?0@| [ DATA ] ; `string'
EXPORT |??_C@_0DI@IIDL@?$CK?$CK?$CK?$CK?$CK?$CK?5Checksum?5failure?5on?5recor@| [ DATA ] ; `string'
IMPORT |OEMReadData|
IMPORT |OEMShowProgress|
IMPORT |OEMIsFlashAddr|
IMPORT |OEMStartEraseFlash|
IMPORT |OEMContinueEraseFlash|
IMPORT |OEMFinishEraseFlash|
IMPORT |OEMWriteFlash|
IMPORT |memcmp|
00000 AREA |.text| { |DownloadImage| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$DownloadImage|, PDATA, SELECTION=5, ASSOC=|.text| { |DownloadImage| } ; comdat associative
|$T37105| DCD |DownloadImage|
DCD 0x40009902
00000 AREA |.rdata| { |??_C@_07FKMI@B000FF?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_07FKMI@B000FF?6?$AA@| DCB "B000FF", 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CC@MOBO@?$CBOEMVERIFYMEMORY?3?5Invalid?5image?$AN@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CC@MOBO@?$CBOEMVERIFYMEMORY?3?5Invalid?5image?$AN@| DCB "!OEMVERI"
DCB "FYMEMORY: Invalid image", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0BP@FBFL@Invalid?5Flash?5Address?1Length?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BP@FBFL@Invalid?5Flash?5Address?1Length?$AN?6?$AA@| DCB "Invalid "
DCB "Flash Address/Length", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0DD@JCBB@?$CK?$CK?$CK?$CK?$CK?$CK?5Data?5record?5?$CFd?5corrupted?0@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DD@JCBB@?$CK?$CK?$CK?$CK?$CK?$CK?5Data?5record?5?$CFd?5corrupted?0@| DCB "*"
DCB "***** Data record %d corrupted, ABORT!!! ******", 0xd, 0xa
DCB 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0DI@IIDL@?$CK?$CK?$CK?$CK?$CK?$CK?5Checksum?5failure?5on?5recor@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DI@IIDL@?$CK?$CK?$CK?$CK?$CK?$CK?5Checksum?5failure?5on?5recor@| DCB "*"
DCB "***** Checksum failure on record %d, ABORT!!! ******", 0xd
DCB 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CE@CEJO@Unable?5to?5read?5image?5start?1lengt@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CE@CEJO@Unable?5to?5read?5image?5start?1lengt@| DCB "Unable to re"
DCB "ad image start/length", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0DB@FGGA@?$AN?6This?5is?5not?5a?5?4BIN?5file?5?$CFx?5?$CFx?5@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DB@FGGA@?$AN?6This?5is?5not?5a?5?4BIN?5file?5?$CFx?5?$CFx?5@| DCB 0xd
DCB 0xa, "This is not a .BIN file %x %x %x %x %x %x %x", 0xd, 0xa
DCB 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |DownloadImage| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |DownloadImage| PROC
; 183 : {
00000 e92d47f0 stmdb sp!, {r4 - r10, lr}
00004 e24dd024 sub sp, sp, #0x24
00008 |$M37103|
00008 e1a08000 mov r8, r0
0000c e1a07001 mov r7, r1
00010 e1a06002 mov r6, r2
; 184 : BYTE hdr[BINHDRSIZE];
; 185 : DWORD dwRecLen, dwRecChk, dwRecAddr;
; 186 : BOOL fIsFlash;
; 187 : LPBYTE lpDest;
; 188 : int nPkgNum = 0;
00014 e3a0a000 mov r10, #0
; 189 :
; 190 : // read the 7 byte "magic number"
; 191 : if (!OEMReadData (BINHDRSIZE, hdr)
; 192 : || memcmp (hdr, "B000FF\x0A", BINHDRSIZE)) {
00018 e28d101c add r1, sp, #0x1C
0001c e3a00007 mov r0, #7
00020 e1a0900a mov r9, r10
00024 eb000000 bl OEMReadData
00028 e3500000 cmp r0, #0
0002c 0a000068 beq |$L36986|
00030 e59f1228 ldr r1, [pc, #0x228]
00034 e3a02007 mov r2, #7
00038 e28d001c add r0, sp, #0x1C
0003c eb000000 bl memcmp
00040 e3500000 cmp r0, #0
00044 1a000062 bne |$L36986|
; 196 : }
; 197 :
; 198 : // read image start/length
; 199 : if (!OEMReadData (sizeof (DWORD), (LPBYTE) pdwImageStart)
; 200 : || !OEMReadData (sizeof (DWORD), (LPBYTE) pdwImageLength)) {
00048 e1a01008 mov r1, r8
0004c e3a00004 mov r0, #4
00050 eb000000 bl OEMReadData
00054 e3500000 cmp r0, #0
00058 0a00005a beq |$L36994|
0005c e1a01007 mov r1, r7
00060 e3a00004 mov r0, #4
00064 eb000000 bl OEMReadData
00068 e3500000 cmp r0, #0
0006c 0a000055 beq |$L36994|
; 203 : }
; 204 :
; 205 : // give the OEM a chance to verify memory
; 206 : if (g_pOEMVerifyMemory && !g_pOEMVerifyMemory (*pdwImageStart, *pdwImageLength)) {
00070 e59f01e4 ldr r0, [pc, #0x1E4]
00074 e5902000 ldr r2, [r0]
00078 e3520000 cmp r2, #0
0007c 0a000008 beq |$L36996|
00080 e5971000 ldr r1, [r7]
00084 e5980000 ldr r0, [r8]
00088 e1a0e00f mov lr, pc
0008c e12fff12 bx r2
00090 e3500000 cmp r0, #0
00094 1a000002 bne |$L36996|
; 207 : EdbgOutputDebugString ("!OEMVERIFYMEMORY: Invalid image\r\n");
00098 e59f01b8 ldr r0, [pc, #0x1B8]
0009c eb000000 bl EdbgOutputDebugString
000a0 ea000063 b |$L37098|
000a4 |$L36996|
; 208 : return FALSE;
; 209 : }
; 210 :
; 211 : // check for flash image. Start erasing if it is.
; 212 : if ((fIsFlash = OEMIsFlashAddr (*pdwImageStart))
; 213 : && !OEMStartEraseFlash (*pdwImageStart, *pdwImageLength)) {
000a4 e5980000 ldr r0, [r8]
000a8 eb000000 bl OEMIsFlashAddr
000ac e1b05000 movs r5, r0
000b0 0a00002a beq |$L37017|
000b4 e5971000 ldr r1, [r7]
000b8 e5980000 ldr r0, [r8]
000bc eb000000 bl OEMStartEraseFlash
000c0 e3500000 cmp r0, #0
000c4 1a000025 bne |$L37017|
; 214 : EdbgOutputDebugString ("Invalid Flash Address/Length\r\n");
000c8 e59f0184 ldr r0, [pc, #0x184]
000cc eb000000 bl EdbgOutputDebugString
000d0 ea000057 b |$L37098|
000d4 |$L37007|
; 215 : return FALSE;
; 216 : }
; 217 :
; 218 : // read records (start with address, length, and checksum)
; 219 : while (OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecAddr)
; 220 : && OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecLen)
; 221 : && OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecChk)) {
000d4 e28d1010 add r1, sp, #0x10
000d8 e3a00004 mov r0, #4
000dc eb000000 bl OEMReadData
000e0 e3500000 cmp r0, #0
000e4 0a000052 beq |$L37098|
000e8 e28d1014 add r1, sp, #0x14
000ec e3a00004 mov r0, #4
000f0 eb000000 bl OEMReadData
000f4 e3500000 cmp r0, #0
000f8 0a00004d beq |$L37098|
; 222 :
; 223 : // check for last record
; 224 : if (!dwRecAddr && !dwRecChk) {
000fc e59d1018 ldr r1, [sp, #0x18]
00100 e3510000 cmp r1, #0
00104 1a000002 bne |$L37009|
00108 e59d0014 ldr r0, [sp, #0x14]
0010c e3500000 cmp r0, #0
00110 0a000018 beq |$L37086|
00114 |$L37009|
; 240 : }
; 241 :
; 242 : // map the record address (FLASH data is cached, for example)
; 243 : lpDest = OEMMapMemAddr (*pdwImageStart, dwRecAddr);
00114 e5980000 ldr r0, [r8]
00118 eb000000 bl OEMMapMemAddr
0011c e1a04000 mov r4, r0
; 244 :
; 245 : // read data block
; 246 : if (!OEMReadData (dwRecLen, lpDest)) {
00120 e59d0010 ldr r0, [sp, #0x10]
00124 e1a01004 mov r1, r4
00128 eb000000 bl OEMReadData
0012c e3500000 cmp r0, #0
00130 0a00001e beq |$L37087|
; 249 : }
; 250 :
; 251 : if (!VerifyChecksum (dwRecLen, lpDest, dwRecChk)) {
00134 e59d2014 ldr r2, [sp, #0x14]
00138 e1a01004 mov r1, r4
0013c e59d0010 ldr r0, [sp, #0x10]
00140 eb000000 bl VerifyChecksum
00144 e3500000 cmp r0, #0
00148 0a00001a beq |$L37088|
; 254 : }
; 255 : // verify partial checksum
; 256 : OEMShowProgress (nPkgNum ++);
0014c e1a00009 mov r0, r9
00150 e2899001 add r9, r9, #1
00154 eb000000 bl OEMShowProgress
; 257 : if (fIsFlash) {
00158 e3550000 cmp r5, #0
; 258 : OEMContinueEraseFlash ();
0015c 1b000000 blne OEMContinueEraseFlash
00160 |$L37017|
00160 e3a00004 mov r0, #4
00164 e28d1018 add r1, sp, #0x18
00168 eb000000 bl OEMReadData
0016c e3500000 cmp r0, #0
00170 1affffd7 bne |$L37007|
; 249 : }
; 250 :
; 251 : if (!VerifyChecksum (dwRecLen, lpDest, dwRecChk)) {
00174 ea00002e b |$L37098|
00178 |$L37086|
; 225 :
; 226 : // update launch address
; 227 : *pdwLaunchAddr = dwRecLen;
00178 e59d0010 ldr r0, [sp, #0x10]
; 228 :
; 229 : // write to flash if it's flash image
; 230 : if (fIsFlash) {
0017c e3550000 cmp r5, #0
00180 e5860000 str r0, [r6]
00184 0a000007 beq |$L37012|
; 231 : // finish the flash erase
; 232 : if (!OEMFinishEraseFlash ()) {
00188 eb000000 bl OEMFinishEraseFlash
0018c e3500000 cmp r0, #0
; 233 : return FALSE;
00190 0a000027 beq |$L37098|
; 234 : }
; 235 : if (!OEMWriteFlash (*pdwImageStart, *pdwImageLength)) {
00194 e5971000 ldr r1, [r7]
00198 e5980000 ldr r0, [r8]
0019c eb000000 bl OEMWriteFlash
001a0 e3500000 cmp r0, #0
; 236 : return FALSE;
001a4 0a000022 beq |$L37098|
001a8 |$L37012|
; 237 : }
; 238 : }
; 239 : return TRUE;
001a8 e3a00001 mov r0, #1
001ac ea000021 b |$L36977|
001b0 |$L37087|
; 247 : EdbgOutputDebugString ("****** Data record %d corrupted, ABORT!!! ******\r\n", nPkgNum);
001b0 e59f0098 ldr r0, [pc, #0x98]
; 248 : return FALSE;
001b4 ea000000 b |$L37102|
001b8 |$L37088|
; 252 : EdbgOutputDebugString ("****** Checksum failure on record %d, ABORT!!! ******\r\n", nPkgNum);
001b8 e59f008c ldr r0, [pc, #0x8C]
001bc |$L37102|
001bc e1a01009 mov r1, r9
001c0 eb000000 bl EdbgOutputDebugString
; 253 : return FALSE;
001c4 ea00001a b |$L37098|
001c8 |$L36994|
; 201 : EdbgOutputDebugString ("Unable to read image start/length\r\n");
001c8 e59f0078 ldr r0, [pc, #0x78]
001cc eb000000 bl EdbgOutputDebugString
; 202 : return FALSE;
001d0 ea000017 b |$L37098|
001d4 |$L36986|
; 193 : EdbgOutputDebugString ("\r\nThis is not a .BIN file %x %x %x %x %x %x %x\r\n",
; 194 : hdr[0], hdr[1], hdr[2], hdr[3], hdr[4], hdr[5], hdr[6]);
001d4 e59d101c ldr r1, [sp, #0x1C]
001d8 e1dd42b0 ldrh r4, [sp, #0x20]
001dc e1a00801 mov r0, r1, lsl #16
001e0 e5dd5022 ldrb r5, [sp, #0x22]
001e4 e1a01821 mov r1, r1, lsr #16
001e8 e1a07820 mov r7, r0, lsr #16
001ec e58d500c str r5, [sp, #0xC]
001f0 e1a00c01 mov r0, r1, lsl #24
001f4 e1a06c20 mov r6, r0, lsr #24
001f8 e1a00c04 mov r0, r4, lsl #24
001fc e1a02c20 mov r2, r0, lsr #24
00200 e20200ff and r0, r2, #0xFF
00204 e1a03421 mov r3, r1, lsr #8
00208 e58d0004 str r0, [sp, #4]
0020c e1a01424 mov r1, r4, lsr #8
00210 e58d3000 str r3, [sp]
00214 e1a00c07 mov r0, r7, lsl #24
00218 e58d1008 str r1, [sp, #8]
0021c e1a01c20 mov r1, r0, lsr #24
00220 e59f001c ldr r0, [pc, #0x1C]
00224 e20630ff and r3, r6, #0xFF
00228 e1a02427 mov r2, r7, lsr #8
0022c e20110ff and r1, r1, #0xFF
00230 eb000000 bl EdbgOutputDebugString
00234 |$L37098|
; 195 : return FALSE;
00234 e1a0000a mov r0, r10
00238 |$L36977|
; 259 : }
; 260 : }
; 261 :
; 262 : return FALSE;
; 263 : }
00238 e28dd024 add sp, sp, #0x24
0023c e8bd47f0 ldmia sp!, {r4 - r10, lr}
00240 e12fff1e bx lr
00244 |$L37107|
00244 00000000 DCD |??_C@_0DB@FGGA@?$AN?6This?5is?5not?5a?5?4BIN?5file?5?$CFx?5?$CFx?5@|
00248 00000000 DCD |??_C@_0CE@CEJO@Unable?5to?5read?5image?5start?1lengt@|
0024c 00000000 DCD |??_C@_0DI@IIDL@?$CK?$CK?$CK?$CK?$CK?$CK?5Checksum?5failure?5on?5recor@|
00250 00000000 DCD |??_C@_0DD@JCBB@?$CK?$CK?$CK?$CK?$CK?$CK?5Data?5record?5?$CFd?5corrupted?0@|
00254 00000000 DCD |??_C@_0BP@FBFL@Invalid?5Flash?5Address?1Length?$AN?6?$AA@|
00258 00000000 DCD |??_C@_0CC@MOBO@?$CBOEMVERIFYMEMORY?3?5Invalid?5image?$AN@|
0025c 00000000 DCD |g_pOEMVerifyMemory|
00260 00000000 DCD |??_C@_07FKMI@B000FF?6?$AA@|
00264 |$M37104|
ENDP ; |DownloadImage|
00000 AREA |.text| { |VerifyChecksum| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$VerifyChecksum|, PDATA, SELECTION=5, ASSOC=|.text| { |VerifyChecksum| } ; comdat associative
|$T37122| DCD |VerifyChecksum|
DCD 0x40001001
; Function compile flags: /Ogsy
00000 AREA |.text| { |VerifyChecksum| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |VerifyChecksum| PROC
; 172 : {
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M37120|
00004 e1a03000 mov r3, r0
00008 e1a04002 mov r4, r2
; 173 : // Check the CRC
; 174 : DWORD dwCRC = 0;
0000c e3a05000 mov r5, #0
00010 e1a02005 mov r2, r5
00014 ea000002 b |$L37119|
00018 |$L36968|
; 177 : dwCRC += *pbRecord ++;
00018 e4d10001 ldrb r0, [r1], #1
0001c e2433001 sub r3, r3, #1
00020 e0822000 add r2, r2, r0
00024 |$L37119|
; 175 : DWORD i;
; 176 : for (i = 0; i < cbRecord; i++)
00024 e3530000 cmp r3, #0
00028 8afffffa bhi |$L36968|
; 178 : return dwCRC == dwChksum;
0002c e1520004 cmp r2, r4
00030 03a05001 moveq r5, #1
00034 e1a00005 mov r0, r5
; 179 : }
00038 e8bd4030 ldmia sp!, {r4, r5, lr}
0003c e12fff1e bx lr
00040 |$M37121|
ENDP ; |VerifyChecksum|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -