// c 命令执行到入口点位置 (dlv) c
_rt0_amd64_linux() /usr/local/go/src/runtime/rt0_linux_amd64.s:8 (hits total:1) (PC: 0x455e40) Warning: debugging optimized function 3: // license that can be found in the LICENSE file. 4: 5: #include "textflag.h" 6: 7: TEXT _rt0_amd64_linux(SB),NOSPLIT,$-8 => 8: JMP _rt0_amd64(SB) // 跳转到 _rt0_amd64
// si 单步执行指令 (dlv) si
_rt0_amd64() /usr/local/go/src/runtime/asm_amd64.s:16 (PC: 0x454200) Warning: debugging optimized function TEXT _rt0_amd64(SB) /usr/local/go/src/runtime/asm_amd64.s => asm_amd64.s:16 0x454200 488b3c24 mov rdi, qword ptr [rsp] asm_amd64.s:17 0x454204 488d742408 lea rsi, ptr [rsp+0x8] asm_amd64.s:18 0x454209 e912000000 jmp $runtime.rt0_go // 这里跳转到 runtime 的 rt0_go
// 进入 rt0_go (dlv) si
runtime.rt0_go() /usr/l www.laipuhuo.com ocal/go/src/runtime/asm_amd64.s:161 (PC: 0x454220) Warning: debugging optimized function TEXT runtime.rt0_go(SB) /usr/local/go/src/runtime/asm_amd64.s => asm_amd64.s:161 0x454220 4889f8 mov rax, rdi asm_amd64.s:162 0x454223 4889f3 mov rbx, rsi asm_amd64.s:163 0x454226 4883ec28 sub rsp, 0x28 asm_amd64.s:164 0x45422a 4883e4f0 and rsp, -0x10 asm_amd64.s:165 0x45422e 4889442418 mov qword ptr [rsp+0x18], rax asm_amd64.s:166 0x454233 48895c2420 mov qword ptr [rsp+0x20], rbx => asm_amd64.s:161 0x454220 4889f8 mov rax, rdi // 将 rdi 寄存器中的 argc 移到 rax 寄存器:rax = argc asm_amd64.s:162 0x454223 4889f3 mov rbx, rsi // 将 rsi 寄存器中的 argv 移到 rbx 寄存器:rbx = argv asm_amd64.s:163 0x454226 4883ec28 sub rsp, 0x28 // 开辟栈空间 asm_amd64.s:164 0x45422a 4883e4f0 and rsp, -0x10 // 对齐栈空间为 16 字节的整数倍(因为 CPU 的一组 SSE www.laipuhuo.com 指令需要内存地址必须是 16 字节的倍数) asm_amd64.s:165 0x45422e 4889442418 mov qword ptr [rsp+0x18], rax // 将 argc 移到栈空间 [rsp+0x18] asm_amd64.s:166 0x454233 48895c2420 mov qword ptr [rsp+0x20], rbx // 将 argv 移到栈空间 [rsp+0x20]