Skip to content

Instantly share code, notes, and snippets.

@trylek
Created April 13, 2020 20:49
Show Gist options
  • Save trylek/66fb3056bf53302f6f7e9cb4057a98f0 to your computer and use it in GitHub Desktop.
Save trylek/66fb3056bf53302f6f7e9cb4057a98f0 to your computer and use it in GitHub Desktop.
CG1-compiled ReadFileNative
Int32 System.IO.FileStream.ReadFileNative(Microsoft.Win32.SafeHandles.SafeFileHandle, System.Span`1<Byte>, System.Threading.NativeOverlapped*, ref Int32)
Handle: 0x06004CEA
Rid: 19690
Number of RuntimeFunctions: 1
Number of fixups: 3
handle != null (STRING_HANDLE)
Async IO and overlapped parameters inconsistent in call to ReadFileNative. (STRING_HANDLE)
System.Span`1<byte> (TYPE_HANDLE)
Int32 System.IO.FileStream.ReadFileNative(Microsoft.Win32.SafeHandles.SafeFileHandle, System.Span`1<Byte>, System.Threading.NativeOverlapped*, ref Int32)
Size: 317 bytes
Version: 1
Flags: 0x03 EHANDLER UHANDLER
SizeOfProlog: 0x0010
CountOfUnwindCodes: 9
FrameRegister: RAX
FrameOffset: 0x0
UnwindCode[0]: CodeOffset 0x0010 FrameOffset 0x6210 NextOffset 0x-1 Op 56
UnwindCode[1]: CodeOffset 0x000C FrameOffset 0x300C NextOffset 0x-1 Op RBX(3)
UnwindCode[2]: CodeOffset 0x000B FrameOffset 0x600B NextOffset 0x-1 Op RSI(6)
UnwindCode[3]: CodeOffset 0x000A FrameOffset 0x700A NextOffset 0x-1 Op RDI(7)
UnwindCode[4]: CodeOffset 0x0009 FrameOffset 0xC009 NextOffset 0x-1 Op R12(12)
UnwindCode[5]: CodeOffset 0x0007 FrameOffset 0xD007 NextOffset 0x-1 Op R13(13)
UnwindCode[6]: CodeOffset 0x0005 FrameOffset 0xE005 NextOffset 0x-1 Op R14(14)
UnwindCode[7]: CodeOffset 0x0003 FrameOffset 0xF003 NextOffset 0x-1 Op R15(15)
UnwindCode[8]: CodeOffset 0x0001 FrameOffset 0x5001 NextOffset 0x-1 Op RBP(5)
Debug Info
Bounds:
IL Offset: 0xFFFFFFFE, Source Types: StackEmpty
IL Offset: 0x0, Source Types: StackEmpty
IL Offset: 0xE, Source Types: StackEmpty
IL Offset: 0x16, Source Types: StackEmpty
IL Offset: 0x1B, Source Types: StackEmpty
IL Offset: 0x23, Source Types: StackEmpty
IL Offset: 0x2A, Source Types: StackEmpty
IL Offset: 0x2D, Source Types: StackEmpty
IL Offset: 0xFFFFFFFF, Source Types: StackEmpty
IL Offset: 0x38, Source Types: StackEmpty
IL Offset: 0x3A, Source Types: StackEmpty
IL Offset: 0x41, Source Types: StackEmpty
IL Offset: 0x44, Source Types: StackEmpty
IL Offset: 0x78, Source Types: StackEmpty
IL Offset: 0x7B, Source Types: StackEmpty
IL Offset: 0x87, Source Types: StackEmpty
IL Offset: 0xFFFFFFFD, Source Types: StackEmpty
IL Offset: 0x89, Source Types: StackEmpty
IL Offset: 0x8D, Source Types: StackEmpty
IL Offset: 0xFFFFFFFD, Source Types: StackEmpty
Variable Locations:
Variable Number: 0
Start Offset: 0x0
End Offset: 0x24
Loc Type: VLT_REG
Register: RCX
Variable Number: 1
Start Offset: 0x0
End Offset: 0x24
Loc Type: VLT_REG
Register: RDX
Variable Number: 2
Start Offset: 0x0
End Offset: 0x24
Loc Type: VLT_REG
Register: R8
Variable Number: 3
Start Offset: 0x0
End Offset: 0x24
Loc Type: VLT_REG
Register: R9
Variable Number: 4
Start Offset: 0x0
End Offset: 0x24
Loc Type: VLT_STK
Base Register: RSP
Stack Offset: 40
Variable Number: 3
Start Offset: 0x2B
End Offset: 0xC4
Loc Type: VLT_REG
Register: RBX
Variable Number: 1
Start Offset: 0x2B
End Offset: 0xD0
Loc Type: VLT_REG
Register: RDI
Variable Number: 7
Start Offset: 0xC4
End Offset: 0xD3
Loc Type: VLT_REG
Register: RDX
Variable Number: 1
Start Offset: 0xDE
End Offset: 0xE3
Loc Type: VLT_REG
Register: RDI
Variable Number: 7
Start Offset: 0xDE
End Offset: 0xE6
Loc Type: VLT_REG
Register: RDX
Variable Number: 0
Start Offset: 0x2B
End Offset: 0xFC
Loc Type: VLT_REG
Register: RSI
Variable Number: 4
Start Offset: 0x2B
End Offset: 0x109
Loc Type: VLT_STK
Base Register: RBP
Stack Offset: 48
Variable Number: 4
Start Offset: 0x121
End Offset: 0x127
Loc Type: VLT_STK
Base Register: RBP
Stack Offset: 48
push rbp
UWOP_PUSH_NONVOL RBP(5)
push r15
UWOP_PUSH_NONVOL R15(15)
push r14
UWOP_PUSH_NONVOL R14(14)
push r13
UWOP_PUSH_NONVOL R13(13)
push r12
UWOP_PUSH_NONVOL R12(12)
push rdi
UWOP_PUSH_NONVOL RDI(7)
push rsi
UWOP_PUSH_NONVOL RSI(6)
push rbx
UWOP_PUSH_NONVOL RBX(3)
sub rsp, 56
UWOP_ALLOC_SMALL 56
lea rbp, [rsp + 112]
xor eax, eax
mov qword ptr [rbp - 72], rax
mov rsi, rcx
mov rdi, rdx
mov rbx, r9
mov r14, qword ptr [r8]
mov r15d, dword ptr [r8 + 8]
mov r12, qword ptr [ (STRING_HANDLE)]
mov r13, qword ptr [r12]
test rdi, rdi
jne 0x005F
call qword ptr [System.Diagnostics.Debug (STATIC_BASE_GC)]
mov rcx, qword ptr [rax + 5712]
mov rdx, qword ptr [handle != null (STRING_HANDLE)]
mov rdx, qword ptr [rdx]
mov r8, r13
mov rax, qword ptr [rcx]
mov rax, qword ptr [rax + 72]
call qword ptr [rax + 32]
movzx eax, byte ptr [rsi + 108]
test eax, eax
je 0x006C
test rbx, rbx
jne 0x007F
test eax, eax
jne 0x007B
test rbx, rbx
sete al
movzx eax, al
jmp 0x0084
xor eax, eax
jmp 0x0084
mov eax, 1
mov r12, qword ptr [r12]
test al, al
jne 0x00B0
call qword ptr [System.Diagnostics.Debug (STATIC_BASE_GC)]
mov rcx, qword ptr [rax + 5712]
mov rdx, qword ptr [Async IO and overlapped parameters inconsistent in call to ReadFileNative. (STRING_HANDLE)]
mov rdx, qword ptr [rdx]
mov r8, r12
mov rax, qword ptr [rcx]
mov rax, qword ptr [rax + 72]
call qword ptr [rax + 32]
xor r9d, r9d
mov dword ptr [rbp - 64], r9d
mov qword ptr [rbp - 72], r14
mov rdx, r14
cmp byte ptr [rsi + 108], 0
jne 0x00DE
xor r9d, r9d
mov qword ptr [rsp + 32], r9
lea r9, [rbp - 64]
mov rcx, rdi
mov r8d, r15d
call qword ptr [Int32 Interop+Kernel32.ReadFile(System.Runtime.InteropServices.SafeHandle, Byte*, Int32, ref Int32, IntPtr) (METHOD_ENTRY)]
jmp 0x00F2
mov qword ptr [rsp + 32], rbx
mov rcx, rdi
mov r8d, r15d
xor r9d, r9d
call qword ptr [Int32 Interop+Kernel32.ReadFile(System.Runtime.InteropServices.SafeHandle, Byte*, Int32, IntPtr, System.Threading.NativeOverlapped*) (METHOD_ENTRY)]
xor ecx, ecx
mov qword ptr [rbp - 72], rcx
test eax, eax
jne 0x0121
mov rcx, rsi
call qword ptr [Int32 System.IO.FileStream.GetLastWin32ErrorAndDisposeHandleIfInvalid() (METHOD_ENTRY)]
mov rsi, qword ptr [rbp + 48]
mov dword ptr [rsi], eax
mov eax, 4294967295
lea rsp, [rbp - 56]
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
xor eax, eax
mov rsi, qword ptr [rbp + 48]
mov dword ptr [rsi], eax
mov eax, dword ptr [rbp - 64]
lea rsp, [rbp - 56]
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment