mirror of
https://github.com/GLEGram/GLEGram-iOS.git
synced 2026-08-24 10:02:35 +02:00
Based on Swiftgram 12.5 (Telegram iOS 12.5). All GLEGram features ported and organized in GLEGram/ folder. Features: Ghost Mode, Saved Deleted Messages, Content Protection Bypass, Font Replacement, Fake Profile, Chat Export, Plugin System, and more. See CHANGELOG_12.5.md for full details.
74 lines
1.6 KiB
NASM
74 lines
1.6 KiB
NASM
PROC_FRAME sample
|
|
db 048h; emit a REX prefix, to enable hot-patching
|
|
push rbp
|
|
[pushreg rbp]
|
|
sub rsp, 040h
|
|
[allocstack 040h]
|
|
lea rbp, [rsp+020h]
|
|
[setframe rbp, 020h]
|
|
movdqa [rbp], xmm7
|
|
[savexmm128 xmm7, 020h];the offset is from the base of the frame
|
|
;not the scaled offset of the frame
|
|
mov [rbp+018h], rsi
|
|
[savereg rsi, 018h]
|
|
mov [rsp+010h], rdi
|
|
[savereg rdi, 010h]; you can still use RSP as the base of the frame
|
|
; or any other register you choose
|
|
END_PROLOGUE
|
|
|
|
; you can modify the stack pointer outside of the prologue (similar to alloca)
|
|
; because we have a frame pointer.
|
|
; if we didn't have a frame pointer, this would be illegal
|
|
; if we didn't make this modification,
|
|
; there would be no need for a frame pointer
|
|
|
|
sub rsp, 060h
|
|
|
|
; we can unwind from the following AV because of the frame pointer
|
|
|
|
mov rax, 0
|
|
mov rax, [rax] ; AV!
|
|
|
|
; restore the registers that weren't saved with a push
|
|
; this isn't part of the official epilog, as described in section 2.5
|
|
|
|
movdqa xmm7, [rbp]
|
|
mov rsi, [rbp+018h]
|
|
mov rdi, [rbp-010h]
|
|
|
|
; Here's the official epilog
|
|
|
|
lea rsp, [rbp-020h]
|
|
pop rbp
|
|
ret
|
|
ENDPROC_FRAME
|
|
struc kFrame
|
|
.Fill resq 1 ; fill to 8 mod 16
|
|
.SavedRdi resq 1 ; saved register RDI
|
|
.SavedRsi resq 1 ; saved register RSI
|
|
endstruc
|
|
|
|
struc sampleFrame
|
|
.Fill resq 1 ; fill to 8 mod 16
|
|
.SavedRdi resq 1 ; Saved Register RDI
|
|
.SavedRsi resq 1 ; Saved Register RSI
|
|
endstruc
|
|
|
|
PROC_FRAME sample2
|
|
alloc_stack sampleFrame_size
|
|
save_reg rdi, sampleFrame.SavedRdi
|
|
save_reg rsi, sampleFrame.SavedRsi
|
|
END_PROLOGUE
|
|
|
|
; function body
|
|
|
|
mov rsi, [rsp+sampleFrame.SavedRsi]
|
|
mov rdi, [rsp+sampleFrame.SavedRdi]
|
|
|
|
; Here's the official epilog
|
|
|
|
add rsp, sampleFrame_size
|
|
ret
|
|
ENDPROC_FRAME
|
|
|