这道题是来自蒸米的一步一步学ROP之linux_x64篇中的level5,主要考察的是中级ROP中的__libc_csu_init。
原理
__libc_csu_init这个函数是用来对libc进行初始化操作的,一般的程序都会调用libc函数,所以一般都会有这个函数。
.text:00000000004005C0 ; void _libc_csu_init(void)
.text:00000000004005C0 public __libc_csu_init
.text:00000000004005C0 __libc_csu_init proc near ; DATA XREF: _start+16↑o
.text:00000000004005C0 ; __unwind {
.text:00000000004005C0 push r15
.text:00000000004005C2 push r14
.text:00000000004005C4 mov r15d, edi
.text:00000000004005C7 push r13
.text:00000000004005C9 push r12
.text:00000000004005CB lea r12, __frame_dummy_init_array_entry
.text:00000000004005D2 push rbp
.text:00000000004005D3 lea rbp, __do_global_dtors_aux_fini_array_entry
.text:00000000004005DA push rbx
.text:00000000004005DB ; 6: v3 = a3;
.text:00000000004005DB mov r14, rsi
.text:00000000004005DE mov r13, rdx
.text:00000000004005E1 sub rbp, r12
.text:00000000004005E4 sub rsp, 8
.text:00000000004005E8 ; 7: v4 = &_do_global_dtors_aux_fini_array_entry - _frame_dummy_init_array_entry;
.text:000