我想分析一個核心轉儲。核心上的堆棧框架很少,所以我使用反彙編程序。現在反彙編程序給出了一個彙編指令列表。現在我想檢查一下特定寄存器的值。由於相同的寄存器被使用多次,我認爲我試圖訪問的值是最後一個現值。那麼,有沒有辦法讓我去特定的指令,然後檢查寄存器值?如何去反彙編程序顯示在gdb的核心中的指令
例子:
gdb binary core
disas /s fucntion_name
0x00007fbb3cc51a9c <+0>: push %rbp
0x00007fbb3cc51a9d <+1>: mov %rsp,%rbp
0x00007fbb3cc51aa0: sub $0x10,%rsp
0x00007fbb3cc51aa4: mov %rdi,-0x8(%rbp)
0x00007fbb3cc51aa8: cmpq $0x0,-0x8(%rbp)
0x00007fbb3cc51aad: je 0x7fbb3cc51b0b
0x00007fbb3cc51aaf: mov 0x2030c3(%rip),%eax
0x00007fbb3cc51ab5: test %eax,%eax
0x00007fbb3cc51ab7: je 0x7fbb3cc51b0b
0x00007fbb3cc51ab9: mov -0x8(%rbp),%rdi
0x00007fbb3cc51abd: callq 0x7fbb3caf8df0
0x00007fbb3cc51ac2: mov -0x8(%rbp),%rax
0x00007fbb3cc51ac6: mov 0x28(%rax),%eax
0x00007fbb3cc51ac9: lea -0x1(%rax),%edx
0x00007fbb3cc51acc: mov -0x8(%rbp),%rax
0x00007fbb3cc51ad0: mov %edx,0x28(%rax)
0x00007fbb3cc51ad3: mov -0x8(%rbp),%rax
0x00007fbb3cc51ad7: mov 0x28(%rax),%eax
0x00007fbb3cc51ada: test %eax,%eax
0x00007fbb3cc51adc: jne 0x7fbb3cc51b02
0x00007fbb3cc51ade: mov -0x8(%rbp),%rax
0x00007fbb3cc51ae2: mov 0x2c(%rax),%eax
現在,假設我要檢查登記冊「RBP」的值在指令地址爲0x00007fbb3cc51ac2
;我該如何檢查?我無法運行程序,因爲它只是客戶的核心文件。
你不能在同一幀(至少在覈心轉儲中)看到以前的寄存器值,但用我對x86-64彙編的基本知識,我看不到任何在函數開始後改變rbp的指令。你可以在前一幀看到rbp的值,做「up」並檢查那裏的值。 – dbrank0