[英]Tracing call stack in disassembled code
我正在嘗試調試棘手的核心轉儲(從-O2優化的二進制文件)。
// Caller Function
void caller(Container* c)
{
std::list < Message*> msgs;
if(!decoder.called(c->buf_, msgs))
{
....
.....
}
// Called Function
bool
Decoder::called(Buffer* buf, list < Message*>& msgs)
{
add_data(buf); // Inlined code to append buf to decoders buf chain
while(m_data_in && m_data_in->length() > 0)
{
.....
}
}
在調用方和被調用方中,第一個參數都已優化,這意味着它必須位於寄存器中的某個位置。
來電顯示:
push %r15 mov %rdi,%r15 push %r14 push %r13 push %r12 push %rbp push %rbx sub $0x68,%rsp test %rsi,%rsi je 0x8ccd62 cmpq $0x0,(%rsi) je 0x8ccd62 lea 0x40(%rsp),%rax lea 0x1b8(%rdi),%rdi mov %rax,(%rsp) mov %rax,0x40(%rsp) mov %rax,%rdx mov %rax,0x48(%rsp) mov (%rsi),%rsi callq 0x8cc820
來電者注冊信息:
rax 0x7fbfffc7e0 548682057696 rbx 0x2a97905ba0 182931446688 rcx 0x0 0 rdx 0x2 2 rsi 0x1 1 rdi 0x7fbfffc7e2 548682057698 rbp 0x4f 0x4f rsp 0x7fbfffc870 0x7fbfffc870 r8 0x40 64 r9 0x20 32 r10 0x7fbfffc7e0 548682057696 r11 0x2abe466600 183580911104 r12 0x7fbfffd910 548682062096 // THIS IS HOLDING buf_ r13 0x7fbfffdec0 548682063552 r14 0x5dc 1500 r15 0x2a97905ba0 182931446688 rip 0x8cca89 0x8cca89 eflags 0x206 [ PF IF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0
調用函數反匯編:
push %r14 push %r13 mov %rdx,%r13 push %r12 mov %rdi,%r12 push %rbp push %rbx sub $0x10,%rsp mov 0x8(%rdi),%rdx test %rdx,%rdx jne 0x8cc843 jmpq 0x8cc9cb mov %rax,%rdx mov 0x8(%rdx),%rax test %rax,%rax mov %rsi,0x8(%rdx) mov 0x8(%r12),%rax test %rax,%rax xor %edx,%edx add 0x4(%rax),%edx mov 0x8(%rax),%rax lea 0x8(%rsp),%rsi mov %r12,%rdi movq $0x0,0x8(%rsp)
調用函數注冊信息
:
rax 0x7fbfffc7e0 548682057696 rbx 0x2abc49f9c0 183547591104 rcx 0x0 0 rdx 0x2 2 rsi 0x1 1 rdi 0x7fbfffc7e2 548682057698 rbp 0xffffffff 0xffffffff rsp 0x7fbfffc830 0x7fbfffc830 r8 0x40 64 r9 0x20 32 r10 0x7fbfffc7e0 548682057696 r11 0x2abe466600 183580911104 r12 0x2a97905d58 182931447128 r13 0x7fbfffc8b0 548682057904 r14 0x5dc 1500 r15 0x2a97905ba0 182931446688 rip 0x8cc88a 0x8cc88a eflags 0x206 [ PF IF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0
問題是,在被調用的函數中,似乎"add_data"
函數什么也沒做。 因此,想知道是否在反匯編被調用函數時,是否看到"buf_"
指針在任何地方使用(被調用函數中的寄存器r12)。
我確實在某種程度上了解匯編,但是所有這些代碼內聯使我感到困惑。
希望能有一些幫助,以消除所謂的函數反匯編。
更新:
add_data執行以下操作:
if (m_data_in) {
m_data_in->next = data;
} else {
m_data_in = data;
}
看起來好像if (m_data_in)
mov 0x8(%rdi),%rdx
test %rdx,%rdx
test %rdx,%rdx
jne 0x8cc843
jmpq 0x8cc9cb
現在,我不太清楚代碼中0x8cc843
和0x8cc9cb
的位置,因此無法真正進一步遵循該代碼。 仍然沒有足夠的代碼和信息來確切說明原始問題的內容。 如果提供更多信息,我很樂意填寫更多此答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.