2011-01-12 27 views
8

Tôi đang viết một tập lệnh cho trình tách rời IDA Pro bằng Python bằng cách sử dụng plugin idapython. Sử dụng điều này, tôi có thể điền vào những khoảng trống trong đó phân tích tự động của IDA giảm ngắn.C++ tên mangling bằng tay

Một khu vực đã khiến tôi bối rối là đặt tên các vị trí/chức năng với (để muốn có cụm từ tốt hơn) "tên đẹp". Một ví dụ về những gì tôi có ý nghĩa được minh họa dưới đây:

IDA pretty names sample screenshot

idapython và IDA Pro bản thân chỉ cho phép tôi để nhập tên hàm C-ish cơ bản. Nếu tôi nhập các ký hiệu không được phép (ví dụ: toán tử phân giải phạm vi), chúng sẽ được thay thế bằng dấu gạch dưới. Tuy nhiên, nếu tôi nhập tên bị cắt xén bằng tay (ví dụ: __ZN9IOService15powerChangeDoneEm), IDA Pro sẽ làm mới điều này cho tôi.

Do đó câu hỏi của tôi: làm thế nào tôi có thể tạo tên bị cắt xén để đi qua idapython? Có thư viện mang tên có sẵn không? Là một trong Python? Là hy vọng duy nhất của tôi để xé các chức năng mangling ra khỏi g++ và làm việc xung quanh đó?

+2

Tôi hy vọng có một số tài liệu xung quanh mà bạn có thể xem xét ... chúc bạn may mắn! –

Trả lời

6

Cuối cùng tôi cũng đã tìm hiểu một chút.

Thật không may là tôi không thể tìm thấy công cụ, mặc dù tôi đã tìm được tài nguyên.

Nếu tất cả những gì bạn muốn là tên mangle theo kiểu gcc3, thì hãy biết rằng gcc3 sử dụng Itanium C++ ABI, có lược đồ mang tên chuẩn hóa. Tôi thấy hai tài liệu:

Để tham khảo, cả hai đến từ trang Wikipedia trên Name Mangling.

+0

@ShafikYaghmour: Cảm ơn, tôi đã thay thế bằng liên kết tới một trang web khác (linux-foundation.org). –

+0

Tôi đã đưa ra câu hỏi của bạn b/c của câu hỏi này: http://stackoverflow.com/questions/11335624/what-is-linux-utility-to-mangle-a-c-symbol-name?lq=1 tương tự –

3

Một phương pháp đơn giản (alebit hacky) là biên dịch một tệp C++ với ký hiệu bạn muốn, sau đó trích xuất các ký hiệu cần thiết từ bảng biểu tượng của tệp .o. Với một chút công việc, điều này có thể là độc đáo.

+0

Tôi đã làm điều này trên chương trình C++ đầu tiên của tôi, trong khi ở trường trung học. Không biết rằng đó không phải là santard hay gì khác. Điều đó đã giúp tôi thực hiện một hệ thống mô-đun, cho phép phần mềm (trò chơi) được mở rộng dễ dàng. Tôi thậm chí còn không biết rằng thứ này không tầm thường. – Klaim

1

Đây là số article giải thích cách trình biên dịch được thực hiện bằng trình biên dịch Trực quan. Đối với xoài được thực hiện bởi gcc, tôi nghĩ rằng bạn có thể tìm thấy thông tin trong nguồn của gói binutils.