Mục tiêu của tôi là:Làm thế nào để bạn trích xuất thông tin biến cục bộ (địa chỉ và loại) từ một chương trình Delphi hoặc thông tin gỡ lỗi do trình biên dịch tạo ra?
- Với một sợi lơ lửng trong một chương trình Windows 32 hoặc 64-bit Delphi biên dịch, đi lại ngăn xếp (doable)
- Với mục ngăn xếp, liệt kê các biến địa phương ở mỗi phương pháp và giá trị của chúng. Đó là, ít nhất, tìm địa chỉ và loại của chúng (số nguyên32/64/ký/unsigned, string, float, record, class ...) kết hợp có thể được sử dụng để tìm giá trị của chúng.
Đầu tiên là tiền phạt và đây là câu hỏi thứ hai mà câu hỏi này đề cập đến. Ở mức độ cao, làm thế nào để bạn liệt kê các biến cục bộ cho một mục nhập ngăn xếp trong Delphi?
Ở mức độ thấp, đây là những gì tôi đã và đang nghiên cứu:
RTTI: không liệt kê loại thông tin này về các phương pháp. Đây không phải là thứ mà tôi từng nghĩ là một lựa chọn thực tế, nhưng dù sao thì cũng liệt kê ở đây.
Thông tin gỡ lỗi: Tải thông tin gỡ lỗi được tạo cho bản dựng gỡ lỗi.
- Tệp bản đồ: ngay cả tệp bản đồ chi tiết (tệp định dạng văn bản! Mở và xem) không chứa thông tin biến cục bộ. Về cơ bản nó là danh sách các địa chỉ và số dòng tệp nguồn. Tuyệt vời cho địa chỉ gửi tệp & tương quan dòng, ví dụ: các chấm màu xanh trong máng xối; không tuyệt vời để biết thông tin chi tiết hơn
- Thông tin gỡ lỗi từ xa (tệp RSM) - no known information về nội dung hoặc định dạng của nó.
- Tệp TD32/TDS: dòng nghiên cứu hiện tại của tôi. Chúng chứa các biểu tượng toàn cầu và địa phương trong số rất nhiều thông tin khác.
Những vấn đề tôi gặp phải ở đây là:
- Không có tài liệu của các định dạng file TD32
- Hầu hết kiến thức của tôi trong số họ đến từ các Jedi JCL (mà tôi có thể tìm thấy.) mã bằng cách sử dụng chúng (JclTD32.pas) và tôi không chắc chắn làm thế nào để sử dụng mã đó, hoặc liệu các cấu trúc có đủ rộng để hiển thị các vars cục bộ. Tôi khá chắc chắn nó sẽ xử lý các biểu tượng toàn cầu, nhưng tôi rất không chắc chắn về địa phương. Có một loạt các hằng số được xác định và không có tài liệu cho định dạng, để đọc những gì họ có nghĩa là, tôi còn lại đoán. Tuy nhiên, những hằng số và tên của chúng phải đến từ đâu đó.
- Source I can find using TDS info không tải hoặc xử lý các ký hiệu cục bộ.
Nếu đây là phương pháp phù hợp, thì câu hỏi này sẽ trở thành 'Tài liệu có định dạng tệp TDS/TD32 và có bất kỳ mẫu mã nào tải biến cục bộ không?'
Mẫu mã không cần thiết nhưng có thể rất hữu ích, ngay cả khi nó rất nhỏ.
Tôi đã không thực sự sử dụng các đơn vị Jedi JCL để truy cập thông tin TD32 - Tôi có thư viện độc quyền của riêng tôi cho điều đó, nhưng nó trông giống như tất cả các hệ thống ống nước cơ bản bạn sẽ cần là có trong JclTD32.pas. Không có mã demo mà tôi có thể tìm thấy để truy cập thông tin biến, tuy nhiên, nhưng mẫu có ở đó (trong .. \ jcl \ examples \ windows \ debug \ sourceloc) cho biết cách lấy thông tin số dòng từ dữ liệu TD32, vì vậy bạn sẽ có thể xây dựng trên đó để có được những gì bạn cần. Xin vui lòng báo cáo lại ở đây những gì bạn tìm hiểu :) –
@ 500-InternalServerError Cảm ơn. Thông tin về số dòng là dễ dàng (ngay cả trong các tệp bản đồ) - nhưng bạn có thể cung cấp bất kỳ thông tin nào về những gì bạn thấy trong mã JCL có liên quan cụ thể đến các biểu tượng địa phương không? Ngoài ra, ngoài tò mò, thư viện độc quyền TD32 của bạn là gì, và nó có được xuất bản/công khai có thể sử dụng hoặc chỉ trong nội bộ không? –
Mỗi biểu tượng thủ tục/chức năng/phương pháp theo nó lần lượt chứa một danh sách các biểu tượng địa phương với nó. Hầu hết các định nghĩa đều xuất hiện ở đó trong đơn vị Jedi, nhưng một số có nhận xét. Đề nghị của tôi sẽ là tạo ra các ứng dụng thử nghiệm nhỏ và xem xét những gì đếm được các ký hiệu trả về. Mã tôi có là độc quyền và không phải để tôi xuất bản. Nó không bao gồm chủ đề của các biến cục bộ. Nhưng thông tin dựa trên nó là bán công khai, vì vậy tôi có thể giúp đỡ nếu bạn chạy vào các bức tường cụ thể. –