1 .text 2 .p2align 4,,15 3 .type implementation1, @function 4implementation1: 5 movl $1, %eax 6 ret 7 .size implementation1, .-implementation1 8 .p2align 4,,15 9 .type implementation2, @function 10implementation2: 11 movl $2, %eax 12 ret 13 .size implementation2, .-implementation2 14 .p2align 4,,15 15 .type resolver2, @function 16resolver2: 17 movl implementation2@GOT, %eax 18 ret 19 .size resolver2, .-resolver2 20 .type func2, @gnu_indirect_function 21 .set func2,resolver2 22 .p2align 4,,15 23 .type resolver1, @function 24resolver1: 25 movl implementation1@GOT, %eax 26 ret 27 .size resolver1, .-resolver1 28 .globl func1 29 .type func1, @gnu_indirect_function 30 .set func1,resolver1 31 .p2align 4,,15 32 .globl get_func2 33 .type get_func2, @function 34get_func2: 35 movl func2@GOT, %eax 36 ret 37 .size get_func2, .-get_func2 38 .p2align 4,,15 39 .globl call_func2 40 .type call_func2, @function 41call_func2: 42 jmp *func2@GOT 43 .size call_func2, .-call_func2 44 .section .note.GNU-stack,"",@progbits 45