-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLoadIconFromResource.asm
More file actions
46 lines (38 loc) · 1.17 KB
/
LoadIconFromResource.asm
File metadata and controls
46 lines (38 loc) · 1.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
; Define constants
IDI_ICON1 EQU 101
IMAGE_ICON EQU 1
LR_DEFAULTSIZE EQU 64
; Declare external functions
externdef GetModuleHandleW:proc
externdef LoadImageW:proc
; Define the code segment
.code
; Function: LoadIconFromResource
; Returns: HICON (RAX)
LoadIconFromResource proc
; Save non-volatile registers
push rbx
push rsi
push rdi
push rbp
sub rsp, 38h ; 32 bytes shadow space + 16 bytes for alignment + 8 bytes for calling LoadImageW
; Call GetModuleHandleW(NULL)
xor ecx, ecx ; NULL = 0
call GetModuleHandleW ; GetModuleHandleW(NULL)
mov rcx, rax ; Save handle in RCX
; Call LoadImageW
mov rdx, IDI_ICON1 ; lpszName (resource ID)
mov r8, IMAGE_ICON ; uType (IMAGE_ICON)
xor r9, r9 ; cxDesired = 0
mov qword ptr [rsp+20h], 0 ; cyDesired = 0
mov qword ptr [rsp+28h], LR_DEFAULTSIZE ; fuLoad = LR_DEFAULTSIZE
call LoadImageW ; LoadImageW(hInst, IDI_ICON1, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE)
; Clean up stack and restore registers
add rsp, 38h ; Deallocate shadow space
pop rbp
pop rdi
pop rsi
pop rbx
ret
LoadIconFromResource endp
end