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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
/* Force .data aligned to 4K, so .got very likely gets at 0x102190
(0x60 bytes .tdata and 0x130 bytes .dynamic) */
.data
.balign 4096
.section ".tdata", "awT", @progbits
.globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
.globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
.hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
sg1: .long 17
sg2: .long 18
sg3: .long 19
sg4: .long 20
sg5: .long 21
sg6: .long 22
sg7: .long 23
sg8: .long 24
sl1: .long 65
sl2: .long 66
sl3: .long 67
sl4: .long 68
sl5: .long 69
sl6: .long 70
sl7: .long 71
sl8: .long 72
sh1: .long 257
sh2: .long 258
sh3: .long 259
sh4: .long 260
sh5: .long 261
sh6: .long 262
sh7: .long 263
sh8: .long 264
/* Force .text aligned to 4K, so it very likely gets at 0x1000. */
.text
.balign 4096
.globl fn1
.type fn1,@function
fn1:
pushq %rbp
movq %rsp, %rbp
nop;nop;nop;nop
/* GD */
leaq sg1@tlsdesc(%rip), %rax
call *sg1@tlscall(%rax)
nop;nop;nop;nop
/* GD -> IE because variable is referenced through IE too */
leaq sg2@tlsdesc(%rip), %rax
call *sg2@tlscall(%rax)
nop;nop;nop;nop
/* GD against local variable */
leaq sl1@tlsdesc(%rip), %rax
call *sl1@tlscall(%rax)
nop;nop;nop;nop
/* GD -> IE against local variable referenced through IE too */
leaq sl2@tlsdesc(%rip), %rax
call *sl2@tlscall(%rax)
nop;nop;nop;nop
/* GD against hidden and local variable */
leaq sh1@tlsdesc(%rip), %rax
call *sh1@tlscall(%rax)
nop;nop;nop;nop
/* GD -> IE against hidden and local variable referenced through
IE too */
leaq sh2@tlsdesc(%rip), %rax
call *sh2@tlscall(%rax)
nop;nop;nop;nop
/* GD against hidden but not local variable */
leaq sH1@tlsdesc(%rip), %rax
call *sH1@tlscall(%rax)
nop;nop;nop;nop
/* GD -> IE against hidden but not local variable referenced through
IE too */
leaq sH2@tlsdesc(%rip), %rax
call *sH2@tlscall(%rax)
nop;nop;nop;nop
/* LD */
leaq _TLS_MODULE_BASE_@tlsdesc(%rip), %rax
call *_TLS_MODULE_BASE_@tlscall(%rax)
nop;nop
leaq sl1@dtpoff(%rax), %rdx
nop;nop
leaq 2+sl2@dtpoff(%rax), %r9
nop;nop;nop;nop
/* LD against hidden and local variables */
leaq sh1@dtpoff(%rax), %rdx
nop;nop
leaq sh2@dtpoff+3(%rax), %rcx
nop;nop;nop;nop
/* LD against hidden but not local variables */
leaq sH1@dtpoff(%rax), %r12
nop;nop
leaq sH2@dtpoff+1(%rax), %rcx
nop;nop
/* IE against global var */
movq %fs:0, %rcx
nop;nop
addq sg2@gottpoff(%rip), %rcx
nop;nop;nop;nop
/* IE against local var */
movq %fs:0, %r14
nop;nop
addq sl2@gottpoff(%rip), %r14
nop;nop;nop;nop
/* IE against hidden and local var */
movq %fs:0, %rcx
nop;nop
addq sh2@gottpoff(%rip), %rcx
nop;nop;nop;nop
/* IE against hidden but not local var */
movq %fs:0, %rcx
nop;nop
addq sH2@gottpoff(%rip), %rcx
nop;nop;nop;nop
/* Direct access through %fs */
/* IE against global var */
movq sg5@gottpoff(%rip), %rcx
nop;nop
movq %fs:(%rcx), %rdx
nop;nop;nop;nop
/* IE against local var */
movq sl5@gottpoff(%rip), %r10
nop;nop
movq %fs:(%r10), %r12
nop;nop;nop;nop
/* IE against hidden and local var */
movq sh5@gottpoff(%rip), %rdx
nop;nop
movq %fs:(%rdx), %rdx
nop;nop;nop;nop
/* IE against hidden but not local var */
movq sH5@gottpoff(%rip), %rcx
nop;nop
movq %fs:(%rcx), %rdx
nop;nop;nop;nop
leave
ret
|