2012-02-07 30 views
9

At a post of Raymond Chen, có vẻ như anh ta có thể biết tên chưa được đặt tên của chức năng từ tên trang trí. Tôi không có ý tưởng làm thế nào ông có thể làm điều này.Làm thế nào để undecorate tên từ tên trang trí?

Trong tên trang trí này,

? GetName @ PushButton @ UILibrary @@ UAEPB_WPAPAVStringHolder @ 2 @@ Z

nào mỗi thành phần có ý nghĩa gì?

+1

Tham khảo tài liệu triển khai của bạn hoặc chơi một chút xung quanh với trình gỡ rối và tìm hiểu các mẫu phổ biến nhất. – Xeo

+0

Câu trả lời nằm trong blog. "Chúng tôi yêu cầu chương trình undname". Với một chút đào tạo bạn có thể tự mình đọc tên, chỉ cần tạo một vài tên trang trí từ các nguồn bạn biết, nhưng các quy tắc hoàn chỉnh rất phức tạp (vì hệ thống kiểu C++ phức tạp) và không đáng khám phá và học chúng. – Suma

+0

Bản sao có thể có của http://stackoverflow.com/q/1617204/471164 – vitaut

Trả lời

12

Để tránh đoán và vẫn không thực sự sử dụng các công cụ, UndecorateSymbolName function có thể được sử dụng. Tôi hy vọng rằng sẽ đưa ra một câu trả lời chính xác.

Để thực hiện thủ công, this page có một số thông tin về lược đồ, cũng như these.

Đường viền cơ bản là [email protected]@[email protected]@[email protected]@@something. Tôi nghi ngờ hai phần cuối là kích thước ngăn xếp và quy ước gọi hoặc tương tự, nhưng tài liệu có thể có nhiều chi tiết hơn.

+0

+1 Cảm ơn bạn đã liên kết. Nhiều phức tạp hơn tôi mong đợi, mặc dù -_-; – Benjamin

+0

Đoạn lớn nhất (tên và phạm vi chứa) khá đơn giản, chỉ được liệt kê theo thứ tự ngược lại. Rõ ràng tiền tố là tài liệu khá tốt, và tôi đã thấy (nhưng không thể tìm thấy) lược đồ cho các tham số. – ssube

6

Tên mangling là trình biên dịch phụ thuộc.

Trong bài viết bạn đã liên kết, Raymond đang sử dụng MS util (undname) để loại bỏ xoài.

Here is a table cho biết mức độ phổ biến của trình biên dịch mangle.

+0

+1, Raymond thậm chí còn nói rõ ràng. – sharptooth

+1

Với thẻ 'visual-studio', câu hỏi cũng phụ thuộc vào trình biên dịch và điều này không giúp trả lời. – ssube

+0

Vâng, tôi đã thấy điều đó, nhưng tôi cảm thấy anh ta có thể tự mình phá bỏ cái tên đó trong ví dụ đơn giản cuối cùng. Được rồi, vậy thì không có cách nào để đoán nó dễ dàng sao? – Benjamin

4

Microsoft Visual Studio đi kèm với công cụ undname.exe.

http://msdn.microsoft.com/en-us/library/ms937379.aspx

Nếu bạn có MS VS tại một địa điểm mặc định, bạn có thể sử dụng:

"C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ undname.exe "? GetName @ PushButton @ UILibrary @@ UAEPB_WPAPAVStringHolder @ 2 @@ Z

Microsoft (R) C++ Tên Undecorator Bản quyền (C) Tập đoàn Microsoft. Đã đăng ký Bản quyền.

Hoàn tác: - "? GetName @ PushButton @ UILibrary @@ UAEPB_WPAPAVStringHolder @ 2 @@ Z" là: - "công khai: virtual wchar_t const * __thiscall UILibrary :: PushButton :: GetName (lớp UILibrary :: StringHolder * *) "

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