Trong phần này
tôi sẽ trình bày các khối xây dựng chính thực hiện một chương trình gỡ rối trên Linux - hệ thống gọi ptrace. Tất cả các mã trong bài viết này được phát triển trên một máy tính Ubuntu 32-bit. Lưu ý rằng các mã được rất nhiều nền tảng cụ thể, mặc dù porting nó đến các nền tảng khác không phải là quá khó khăn. Động lực Để hiểu rõ chúng ta đang đi, hãy thử tưởng tượng những gì cần cho một trình gỡ lỗi để làm công việc của mình. Một trình gỡ rối có thể bắt đầu một số quá trình và gỡ lỗi nó, hoặc đính kèm chính nó vào một quá trình hiện có. Nó có thể đơn bước qua mã, đặt breakpoint và chạy với họ, kiểm tra các giá trị và ngăn xếp dấu vết. Nhiều gỡ rối có các tính năng tiên tiến như thực hiện các biểu thức và gọi chức năng trong không gian địa chỉ quá trình debbugged, và thậm chí thay đổi mã của quá trình on-the-fly và xem các hiệu ứng. Mặc dù gỡ rối hiện đại là những con thú phức tạp [1], đó là đáng ngạc nhiên như thế nào đơn giản là nền tảng mà trên đó chúng được xây dựng. Gỡ rối bắt đầu chỉ với một vài dịch vụ cơ bản được cung cấp bởi hệ điều hành và trình biên dịch / mối liên kết, tất cả các phần còn lại chỉ là một vấn đề đơn giản của chương trình. Linux gỡ lỗi - ptrace Các con dao quân đội Thụy Sĩ gỡ rối Linux là hệ thống gọi ptrace [2]. Đó là một công cụ linh hoạt và khá phức tạp cho phép một quá trình để kiểm soát việc thực hiện của người khác và nhìn trộm và chọc vào bộ phận bên của nó [3]. ptrace có thể mất một cuốn sách vừa để giải thích đầy đủ, đó là lý do tại sao tôi chỉ cần đi để tập trung vào một số sử dụng thực tế của nó trong ví dụ. Hãy nhảy ngay in Bước qua mã của một quá trình tôi bây giờ sẽ phát triển một ví dụ về chạy một quá trình trong "bắt nguồn từ" chế độ mà trong đó chúng ta sẽ bước đơn thông qua mã của nó - mã máy (hướng dẫn lắp ráp) đó là thực hiện bởi CPU. Tôi sẽ chỉ cho các mã ví dụ trong các bộ phận, giải thích từng, và cuối cùng của bài viết bạn sẽ tìm thấy một liên kết để tải về một tập tin C hoàn chỉnh mà bạn có thể biên dịch, thực hiện và chơi với. Các phương án cao là để viết mã mà chia tách thành một quá trình con sẽ thực thi một lệnh người dùng cung cấp, và một quá trình cha mẹ mà dấu vết đứa trẻ. Đầu tiên, các chức năng chính:
đang được dịch, vui lòng đợi..
