1
2
3
4
5
6
7
8
9
10 .text
11
12 .global call32_from_64
13 .type call32_from_64, @function
14call32_from_64:
15
16
17
18
19 pushq %rbx
20 pushq %rbp
21 pushq %r12
22 pushq %r13
23 pushq %r14
24 pushq %r15
25 pushfq
26
27
28 mov %rsp,(%rdi)
29 mov %rdi,%rsp
30
31
32 pushq $0x23
33 pushq $1f
34 lretq
35
361:
37 .code32
38
39 call *%esi
40
41 jmp $0x33,$1f
42 .code64
43
441:
45
46 mov (%rsp),%rsp
47
48
49 popfq
50 popq %r15
51 popq %r14
52 popq %r13
53 popq %r12
54 popq %rbp
55 popq %rbx
56
57 ret
58
59.size call32_from_64, .-call32_from_64
60
61.section .note.GNU-stack,"",%progbits
62