📄 fat.cod
字号:
00064 |$L38215|
; 176 : break;
00064 ea00001a b |$L38211|
00068 |$L38216|
; 177 : case FAT_32:
; 178 : Cluster &= 0x0fffffff;
00068 e59d2010 ldr r2, [sp, #0x10]
0006c e3e0320f mvn r3, #0xF, 4
00070 e0023003 and r3, r2, r3
00074 e58d3010 str r3, [sp, #0x10]
; 179 : if (Cluster >= 0x00000002 && Cluster <= 0x0fffffef)
00078 e59d3010 ldr r3, [sp, #0x10]
0007c e3530002 cmp r3, #2
00080 3a000007 bcc |$L38217|
00084 e59d2010 ldr r2, [sp, #0x10]
00088 e3a03201 mov r3, #1, 4
0008c e2433011 sub r3, r3, #0x11
00090 e1520003 cmp r2, r3
00094 8a000002 bhi |$L38217|
; 180 : return(TRUE);
00098 e3a03001 mov r3, #1
0009c e58d3000 str r3, [sp]
000a0 ea00000d b |$L38209|
000a4 |$L38217|
; 181 : break;
000a4 ea00000a b |$L38211|
000a8 |$L38218|
; 182 : case FAT_16:
; 183 : default:
; 184 : if (Cluster >= 0x0002 && Cluster <= 0xffef)
000a8 e59d3010 ldr r3, [sp, #0x10]
000ac e3530002 cmp r3, #2
000b0 3a000007 bcc |$L38219|
000b4 e59d2010 ldr r2, [sp, #0x10]
000b8 e3a03cff mov r3, #0xFF, 24
000bc e38330ef orr r3, r3, #0xEF
000c0 e1520003 cmp r2, r3
000c4 8a000002 bhi |$L38219|
; 185 : return(TRUE);
000c8 e3a03001 mov r3, #1
000cc e58d3000 str r3, [sp]
000d0 ea000001 b |$L38209|
000d4 |$L38219|
000d4 |$L38211|
; 186 : }
; 187 :
; 188 : return(FALSE);
000d4 e3a03000 mov r3, #0
000d8 e58d3000 str r3, [sp]
000dc |$L38209|
; 175 : return(TRUE);
000dc e59d0000 ldr r0, [sp]
; 189 : }
000e0 e28dd008 add sp, sp, #8
000e4 e89d6000 ldmia sp, {sp, lr}
000e8 e12fff1e bx lr
000ec |$L38597|
000ec 00000000 DCD |g_FATParms|
000f0 |$M38593|
ENDP ; |IsDataCluster|
00000 AREA |.text| { |IsEOFCluster| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$IsEOFCluster|, PDATA, SELECTION=5, ASSOC=|.text| { |IsEOFCluster| } ; comdat associative
|$T38604| DCD |$L38603|
DCD 0x40003e04
; Function compile flags: /Ods
00000 AREA |.text| { |IsEOFCluster| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |IsEOFCluster| PROC
; 216 : {
00000 |$L38603|
00000 e1a0c00d mov r12, sp
00004 e92d0001 stmdb sp!, {r0}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24dd008 sub sp, sp, #8
00010 |$M38601|
; 217 : switch(g_FATParms.FATType)
00010 e59f30dc ldr r3, [pc, #0xDC]
00014 e5933000 ldr r3, [r3]
00018 e58d3004 str r3, [sp, #4]
0001c e59d3004 ldr r3, [sp, #4]
00020 e3530000 cmp r3, #0
00024 0a000003 beq |$L38242|
00028 e59d3004 ldr r3, [sp, #4]
0002c e3530002 cmp r3, #2
00030 0a00000e beq |$L38244|
00034 ea00001b b |$L38246|
00038 |$L38242|
; 218 : {
; 219 : case FAT_12:
; 220 : if (Cluster >= 0xff8 && Cluster <= 0xfff)
00038 e59d2010 ldr r2, [sp, #0x10]
0003c e3a03eff mov r3, #0xFF, 28
00040 e3833008 orr r3, r3, #8
00044 e1520003 cmp r2, r3
00048 3a000007 bcc |$L38243|
0004c e59d2010 ldr r2, [sp, #0x10]
00050 e3a03eff mov r3, #0xFF, 28
00054 e383300f orr r3, r3, #0xF
00058 e1520003 cmp r2, r3
0005c 8a000002 bhi |$L38243|
; 221 : return(TRUE);
00060 e3a03001 mov r3, #1
00064 e58d3000 str r3, [sp]
00068 ea00001d b |$L38237|
0006c |$L38243|
; 222 : break;
0006c ea00001a b |$L38239|
00070 |$L38244|
; 223 : case FAT_32:
; 224 : Cluster &= 0x0fffffff;
00070 e59d2010 ldr r2, [sp, #0x10]
00074 e3e0320f mvn r3, #0xF, 4
00078 e0023003 and r3, r2, r3
0007c e58d3010 str r3, [sp, #0x10]
; 225 : if (Cluster >= 0x0ffffff8 && Cluster <= 0x0fffffff)
00080 e59d3010 ldr r3, [sp, #0x10]
00084 e373028f cmn r3, #0x8F, 4
00088 3a000005 bcc |$L38245|
0008c e59d3010 ldr r3, [sp, #0x10]
00090 e373021f cmn r3, #0x1F, 4
00094 8a000002 bhi |$L38245|
; 226 : return(TRUE);
00098 e3a03001 mov r3, #1
0009c e58d3000 str r3, [sp]
000a0 ea00000f b |$L38237|
000a4 |$L38245|
; 227 : break;
000a4 ea00000c b |$L38239|
000a8 |$L38246|
; 228 : case FAT_16:
; 229 : default:
; 230 : if (Cluster >= 0xfff8 && Cluster <= 0xffff)
000a8 e59d2010 ldr r2, [sp, #0x10]
000ac e3a03cff mov r3, #0xFF, 24
000b0 e38330f8 orr r3, r3, #0xF8
000b4 e1520003 cmp r2, r3
000b8 3a000007 bcc |$L38247|
000bc e59d2010 ldr r2, [sp, #0x10]
000c0 e3a03cff mov r3, #0xFF, 24
000c4 e38330ff orr r3, r3, #0xFF
000c8 e1520003 cmp r2, r3
000cc 8a000002 bhi |$L38247|
; 231 : return(TRUE);
000d0 e3a03001 mov r3, #1
000d4 e58d3000 str r3, [sp]
000d8 ea000001 b |$L38237|
000dc |$L38247|
000dc |$L38239|
; 232 : }
; 233 :
; 234 : return(FALSE);
000dc e3a03000 mov r3, #0
000e0 e58d3000 str r3, [sp]
000e4 |$L38237|
; 221 : return(TRUE);
000e4 e59d0000 ldr r0, [sp]
; 235 : }
000e8 e28dd008 add sp, sp, #8
000ec e89d6000 ldmia sp, {sp, lr}
000f0 e12fff1e bx lr
000f4 |$L38606|
000f4 00000000 DCD |g_FATParms|
000f8 |$M38602|
ENDP ; |IsEOFCluster|
EXPORT |InitFAT|
EXPORT |??_C@_0CE@DAKJNAOI@ERROR?3?5Couldn?8t?5read?5BOOT?5in?5FAT@| [ DATA ] ; `string'
EXPORT |??_C@_0CL@JILLCKBB@ERROR?3?5Failed?5to?5initialize?5read@| [ DATA ] ; `string'
IMPORT |memcpy|
IMPORT |memset|
IMPORT |__rt_sdiv|
00000 AREA |.text| { |InitFAT| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$InitFAT|, PDATA, SELECTION=5, ASSOC=|.text| { |InitFAT| } ; comdat associative
|$T38614| DCD |$L38613|
DCD 0x40023804
00000 AREA |.rdata| { |??_C@_0CL@JILLCKBB@ERROR?3?5Failed?5to?5initialize?5read@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CL@JILLCKBB@ERROR?3?5Failed?5to?5initialize?5read@| DCB "ERROR: F"
DCB "ailed to initialize read buffer.", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CE@DAKJNAOI@ERROR?3?5Couldn?8t?5read?5BOOT?5in?5FAT@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CE@DAKJNAOI@ERROR?3?5Couldn?8t?5read?5BOOT?5in?5FAT@| DCB "ERROR:"
DCB " Couldn't read BOOT in FAT.", 0xd, 0xa, 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |InitFAT| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |InitFAT| PROC
; 596 : {
00000 |$L38613|
00000 e1a0c00d mov r12, sp
00004 e92d0001 stmdb sp!, {r0}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24ddf8d sub sp, sp, #0x8D, 30
00010 |$M38611|
; 597 : UCHAR bsect[SECTOR_SIZE];
; 598 : PBIOSPB pBPB = NULL;
00010 e3a03000 mov r3, #0
00014 e58d3000 str r3, [sp]
; 599 : tOffset36_FAT16 *pFAT16Extension = NULL;
00018 e3a03000 mov r3, #0
0001c e58d3220 str r3, [sp, #0x220]
; 600 : tOffset36_FAT32 *pFAT32Extension = NULL;
00020 e3a03000 mov r3, #0
00024 e58d321c str r3, [sp, #0x21C]
; 601 :
; 602 : ULONG ReadBufferLen = 0;
00028 e3a03000 mov r3, #0
0002c e58d3208 str r3, [sp, #0x208]
; 603 : UCHAR FATType[9];
; 604 : #if defined( NDEF_DWF_PARTIIONS )
; 605 : pPARTITION_ENTRY pPartition = NULL;
; 606 : int i;
; 607 : #endif // ( NDEF_DWF_PARTIIONS )
; 608 :
; 609 : // Locate and verify single active partition in MBR.
; 610 :
; 611 : memset (&bsect[0], 0, SECTOR_SIZE);
00030 e3a02c02 mov r2, #2, 24
00034 e3a01000 mov r1, #0
00038 e28d0008 add r0, sp, #8
0003c eb000000 bl memset
; 612 : if (FALSE == ReadSectors( g_FATParms.DriveId, uFirstPartitionLBA, 1, (PUCHAR) &bsect[0] ) )
00040 e28d3008 add r3, sp, #8
00044 e3a02001 mov r2, #1
00048 e59d123c ldr r1, [sp, #0x23C]
0004c e59f0884 ldr r0, [pc, #0x884]
00050 e5d0001e ldrb r0, [r0, #0x1E]
00054 eb000000 bl ReadSectors
00058 e5cd0228 strb r0, [sp, #0x228]
0005c e5dd3228 ldrb r3, [sp, #0x228]
00060 e3530000 cmp r3, #0
00064 1a000004 bne |$L38323|
; 613 : {
; 614 : SERPRINT( "ERROR: Couldn't read BOOT in FAT.\r\n" );
00068 e59f086c ldr r0, [pc, #0x86C]
0006c eb000000 bl EdbgOutputDebugString
; 615 : return FALSE;
00070 e3a03000 mov r3, #0
00074 e58d3224 str r3, [sp, #0x224]
00078 ea000211 b |$L38312|
0007c |$L38323|
; 616 : }
; 617 : // EdbgDumpHexBuf((PUCHAR)&bsect[0],SECTOR_SIZE);
; 618 :
; 619 : //
; 620 : // The BIOS parameter block is in the MBR just read, so point to that block...
; 621 : //
; 622 : pBPB = (PBIOSPB)&bsect[0];
0007c e28d3008 add r3, sp, #8
00080 e58d3000 str r3, [sp]
; 623 :
; 624 : // setup the extension ptrs for later use...
; 625 : pFAT16Extension = (tOffset36_FAT16 *)&pBPB->Offset36Extension[ 0 ];
00084 e59d3000 ldr r3, [sp]
00088 e2833024 add r3, r3, #0x24
0008c e58d3220 str r3, [sp, #0x220]
; 626 : pFAT32Extension = (tOffset36_FAT32 *)&pBPB->Offset36Extension[ 0 ];
00090 e59d3000 ldr r3, [sp]
00094 e2833024 add r3, r3, #0x24
00098 e58d321c str r3, [sp, #0x21C]
; 627 :
; 628 : //
; 629 : // Determine FAT type by determining the "count of cluster" on the volume.
; 630 : //
; 631 :
; 632 : // First find the number of sectors in the root directory. This will always
; 633 : // be zero for FAT32 volumes because pBPB->NumRootEntries will be zero!
; 634 : //
; 635 : if( ! pBPB->BytesPerSect )
0009c e59d3000 ldr r3, [sp]
000a0 e283100b add r1, r3, #0xB
000a4 e5d13001 ldrb r3, [r1, #1]
000a8 e1a03403 mov r3, r3, lsl #8
000ac e1a02803 mov r2, r3, lsl #16
000b0 e1a02822 mov r2, r2, lsr #16
000b4 e5d13000 ldrb r3, [r1]
000b8 e1833002 orr r3, r3, r2
000bc e3530000 cmp r3, #0
000c0 1a000002 bne |$L38328|
; 636 : return(FALSE);
000c4 e3a03000 mov r3, #0
000c8 e58d3224 str r3, [sp, #0x224]
000cc ea0001fc b |$L38312|
000d0 |$L38328|
; 637 : g_FATParms.RootDirSectors =
; 638 : ((pBPB->NumRootEntries * 32) + (pBPB->BytesPerSect - 1)) / pBPB->BytesPerSect + uFirstPartitionLBA;
000d0 e59d3000 ldr r3, [sp]
000d4 e2831011 add r1, r3, #0x11
000d8 e5d13001 ldrb r3, [r1, #1]
000dc e1a03403 mov r3, r3, lsl #8
000e0 e1a02803 mov r2, r3, lsl #16
000e4 e1a02822 mov r2, r2, lsr #16
000e8 e5d13000 ldrb r3, [r1]
000ec e1833002 orr r3, r3, r2
000f0 e1a02003 mov r2, r3
000f4 e3a03020 mov r3, #0x20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -