在写个小壳,遇到了点麻烦。
壳段代码里,用堆栈存储的IO_STATUS_BLOCK、OBJECT_ATTRIBUTES、UNICODE_STRING三个结构体,为什么数据还会对不齐:
lea eax,[ebp+FilePath] ;ebp是重定位,[ebp+FilePath]指向欲打开的文件路径
push eax
call _GetStrLenW ;自编过程,获取字串长度,字串长度返回于eax
push 0
mov edi,esp ;待用于存储NtCreateFile返回的句柄
lea ebx,[ebp+FilePath]
push ebx ;构造UNICODE_STRING结构体
push ax
ror eax,10h
pop ax
add ax,2
push eax
mov ebx,esp
push 0 ;构造OBJECT_ATTRIBUTES结构体
push 0
push OBJ_CASE_INSENSITIVE+OBJ_KERNEL_HANDLE
push ebx
push 0
push 18h
mov ebx,esp
push 0 ;构造IO_STATUS_BLOCK结构体
push 0
mov ecx,esp
push 0 ;EaLength
push 0 ;EaBuffer
push FILE_NON_DIRECTORY_FILE+FILE_SYNCHRONOUS_IO_NONALERT ;CreateOptions
push FILE_OPEN ;CreateDisposition
push FILE_SHARE_READ ;ShareAccess
push 0 ;FileAttributes
push 0 ;AllocationSize
push ecx ;指向IO_STATUS_BLOCK结构体