2012-02-27 39 views
15

Tôi đang tìm một công cụ để tạo tĩnh biểu đồ cuộc gọi của hạt nhân Linux (cho cấu hình hạt nhân đã cho). Biểu đồ cuộc gọi được tạo nên được "hoàn thành", theo nghĩa là tất cả các cuộc gọi được bao gồm, bao gồm cả những cái gián tiếp tiềm năng mà chúng ta có thể giả định chỉ được thực hiện thông qua việc sử dụng các con trỏ hàm trong trường hợp của hạt nhân Linux. Ví dụ, điều này có thể được thực hiện bằng cách phân tích các loại con trỏ chức năng: cách tiếp cận này sẽ dẫn đến các cạnh thừa trong biểu đồ, nhưng điều đó là tốt cho tôi.Tạo biểu đồ cuộc gọi tĩnh cho hạt nhân Linux

ncc dường như thực hiện ý tưởng này, tuy nhiên tôi đã không thành công trong việc làm cho nó hoạt động trên hạt nhân 3.0. Bất cứ một đề nghị nào khác? Tôi đoán cách tiếp cận này cũng có thể dẫn đến thiếu các cạnh trong trường hợp các phôi con trỏ hàm được sử dụng, vì vậy tôi cũng muốn biết liệu điều này có khả năng trong nhân Linux hay không. Là một lưu ý phụ, có vẻ như các công cụ khác có thể phân tích ngữ nghĩa của nguồn để suy ra các giá trị con trỏ tiềm năng, nhưng AFAICT, không có công cụ nào được thiết kế để sử dụng trong một dự án như hạt nhân Linux .

Mọi trợ giúp sẽ được đánh giá cao.

+0

Bạn đã không thành công trong việc làm cho nó hoạt động? Bạn đã đầu tư bao nhiêu công sức? Trong câu trả lời của tôi dưới đây, chúng tôi đã phân tích một hệ thống lớn. Chúng tôi mất vài tháng để thu thập các nguồn đúng, dữ liệu biên dịch và xử lý nó.Bạn có nghĩ rằng làm điều này cho Linux nên nhanh hơn rất nhiều trong lần đầu tiên bạn thử không? –

+0

Vâng, tôi chỉ đơn giản là theo dõi ví dụ về chữ hoa sử dụng cho hạt nhân Linux được cung cấp trong tài liệu ncc. Điều này dẫn đến một lỗi mà tôi vẫn đang cố gắng tìm ra. – addalbx

+0

OK, vì vậy NCC được cho là đã được thiết lập để xử lý Linux. Sau đó, thời gian của bạn sẽ ngắn hơn rất nhiều vì ai đó đã thực hiện tất cả công việc này. Tất nhiên, công việc như vậy không có khả năng ổn định; Linux kernal di chuyển. Bạn đã liên hệ với các nhà xây dựng NCC và hỏi họ về điều này chưa? –

Trả lời

5

Chúng tôi đã thực hiện phân tích điểm toàn cầu (với con trỏ hàm gián tiếp) và xây dựng đồ thị cuộc gọi đầy đủ của hệ thống C nguyên khối là 26 triệu dòng (18.000 đơn vị biên dịch).

Chúng tôi đã làm điều đó bằng cách sử dụng DMS Software Reengineering Toolkit, C Front Endassociated flow analysis machinery của chúng tôi. Máy phân tích điểm-tới (và các phân tích khác) là bảo thủ; có, bạn nhận được một số điểm không có thật và do đó gọi các cạnh là kết quả. Đây là khá khó tránh. Bạn có thể giúp phân tích bằng cách cung cấp một số thông tin quan trọng về các chức năng chính và bằng cách khai thác kiến ​​thức như "hệ thống nhúng [và OSes] có xu hướng không có chu kỳ trong biểu đồ cuộc gọi". Tất nhiên, bạn phải cho phép ngoại lệ; đạo đức của tôi: "trong các hệ thống lớn, mọi thứ xảy ra."

Sự cố cụ thể bao gồm mô-đun C được nạp động (!) Bằng cách sử dụng lược đồ tải đặc biệt dành riêng cho phần mềm cụ thể này, nhưng chỉ được thêm vào vấn đề.

Hành vi trên con trỏ hàm không được mất cạnh; một phân tích bảo thủ chỉ đơn giản là giả định rằng con trỏ đúc phù hợp với bất kỳ hàm nào trong hệ thống có chữ ký tương ứng với kết quả được đúc. Vấn đề hơn là các phôi tạo ra chữ ký tương thích; nếu bạn gán một con trỏ hàm để void * foo (uint) khi hàm thực tế được gọi là chấp nhận một int, các điểm cần phân tích sẽ nhất thiết phải chọn các hàm sai. Bạn không thể đổ lỗi cho máy phân tích cho điều đó; dàn diễn viên nằm trong trường hợp đó. Vâng, chúng tôi đã thấy loại rác này trong hệ thống đường dây 26 triệu.

Đây chắc chắn là quy mô phù hợp để phân tích Linux (mà tôi nghĩ chỉ là 8 triệu dòng hoặc :-). Nhưng chúng tôi đã không thử nó đặc biệt trên Linux.

Thiết lập công cụ này phức tạp vì bạn phải nắm bắt tất cả chi tiết về bản thân bộ sưu tập và đặc biệt là cấu hình của kernal Linux bạn muốn tạo. Vì vậy, bạn khá nhiều có để đánh chặn các cuộc gọi trình biên dịch để có được các thiết bị chuyển mạch dòng lệnh, vv

+2

Thật không may, tôi muốn không sử dụng các công cụ thương mại. Cảm ơn sự giúp đỡ của bạn. – addalbx

+0

@addalbx: Bạn đã bao giờ tìm thấy câu trả lời chưa? (Tôi thấy bạn cũng đã thử LLVM). –

+0

Tôi đã từ bỏ, mặc dù tôi đã thành công nhẹ. Mọi thứ có xu hướng gần như hoạt động ngay cả với ncc, trở ngại chính là gcc-isms của hạt nhân - nó đòi hỏi rất nhiều khó khăn xung quanh ... sửa tôi nếu tôi sai, nhưng nó sẽ không quá khác biệt với phần mềm của chúng tôi - hoặc là? – addalbx

Các vấn đề liên quan