Phân tích Dump cốt lõi trong xây dựng bán lẻ thường yêu cầu phải tương quan objdump
của bất kỳ mô-đun cụ thể nào và nguồn. Thông thường, tương quan với bãi chứa lắp ráp với nguồn sẽ trở thành một cơn đau nếu chức năng này khá liên quan. Hôm nay tôi đã cố gắng tạo ra một assembly listing
của một mô-đun cụ thể (với tùy chọn biên dịch -S
) mong đợi tôi sẽ thấy một nguồn xen kẽ với lắp ráp hoặc một số tương quan. Đáng tiếc là việc niêm yết vẫn chưa đủ thân thiện để tương quan vì vậy tôi đã tự hỏiNguồn tương ứng với Danh sách hội của Chương trình C++
- Cho một lõi-dump mà từ đó tôi có thể xác định vị trí tai nạn
objdump
của các mô-đun không hội Liệt kê theo biên dịch lại các module- với
-S
tùy chọn.
Có thể thực hiện tương tác một-với-một với nguồn không?
Như một ví dụ tôi thấy danh sách lắp ráp như
.LBE7923:
.loc 2 4863 0
movq %rdi, %r14
movl %esi, %r12d
movl 696(%rsp), %r15d
movq 704(%rsp), %rbp
.LBB7924:
.loc 2 4880 0
testq %rdx, %rdx
je .L2680
.LVL2123:
testl %ecx, %ecx
jle .L2680
movslq %ecx,%rax
.loc 2 4882 0
testl %r15d, %r15d
.loc 2 4880 0
leaq (%rax,%rax,4), %rax
leaq -40(%rdx,%rax,8), %rdx
movq %rdx, 64(%rsp)
nhưng không thể hiểu làm thế nào để giải thích các nhãn như .LVL2123
, chỉ thị như .loc 2 4863 0
Note Như câu trả lời mô tả, đọc qua nguồn lắp ráp và xác định trực giác mô hình dựa trên các biểu tượng (như các cuộc gọi hàm, các nhánh, trả về) là những gì tôi thường làm. Tôi không phủ nhận rằng nó không hoạt động nhưng khi một hàm khá tham gia, việc đọc các trang của Assembly Listing là một nỗi đau và thường bạn kết thúc với danh sách hiếm khi khớp hoặc vì các hàm nhận được trong hàng hoặc trình tối ưu hóa chỉ đơn giản là ném mã như nó hài lòng. Tôi có một cảm giác nhìn thấy hiệu quả như thế nào Valgrind
xử lý các tệp nhị phân được tối ưu hóa và cách Windows WinDBG có thể xử lý các tệp nhị phân được tối ưu hóa, có một số thứ tôi thiếu. Vì vậy, tôi mặc dù tôi sẽ bắt đầu với đầu ra trình biên dịch và sử dụng nó để tương quan. Nếu trình biên dịch của tôi chịu trách nhiệm về xâu chuỗi nhị phân, nó sẽ là người tốt nhất để nói cách tương quan với nguồn, nhưng tiếc là điều đó ít hữu ích nhất và .loc
thực sự gây hiểu nhầm. Thật không may tôi thường xuyên phải đọc qua các bãi không thể sản xuất trên nhiều nền tảng khác nhau và thời gian ít nhất tôi bỏ ra là gỡ lỗi Windows Mini-dumps mặc dù WinDBG và thời gian đáng kể trong việc gỡ lỗi Linux Coredumps. Tôi mặc dù có thể là tôi không làm những việc chính xác vì vậy tôi đã đưa ra câu hỏi này.
Đây không phải là câu trả lời cho câu hỏi của bạn nhưng có thể hữu ích: http://msdn.microsoft.com/en-us/library/aa238730%28v=vs.60%29.aspx –
Kết xuất lõi nên có địa chỉ trong đó. Vì vậy, hãy thử chương trình 'addr2line' để dịch sang vị trí nguồn. Điều này tất nhiên đòi hỏi một thực thi với các biểu tượng gỡ lỗi (nó sẽ hoạt động ngay cả khi phiên bản phân phối của bạn đã bị tước, chỉ cần so sánh với một phiên bản không bị tước) –
@ edA-qamort-ora-y: Tôi sẽ thử điều này và cho bạn biết Tôi kết thúc với. BTW, shouldn; t này là một câu trả lời chứ không phải là một bình luận? – Abhijit