2009-04-03 25 views
5

Đây là một tình huống tôi chạy vào bây giờ và sau đó:trong Java: lập trình xác định địa chỉ của C/biến C++ cung cấp một COFF/ELF/lùn thực thi

Đối với một hệ thống nhúng mà không sử dụng địa chỉ ảo, tôi có một tập tin thực thi được biên dịch từ mã C hoặc C++ với thông tin gỡ lỗi đi kèm. Nó thường có dạng COFF hoặc ELF/DWARF (tôi nhận được hai kiểu hỗn hợp).

Khi chạy, trên PC, tôi muốn xác định địa chỉ của biến được đặt tên. (ví dụ: "foo.bar [7] .baz") Điều này cho phép tôi đọc/ghi giá trị của biến trên hệ thống nhúng (được đưa ra một giao thức gỡ lỗi nằm ngoài phạm vi của câu hỏi này). Rõ ràng, bất kỳ biến nào dựa trên xếp chồng hoặc dựa trên đống đều không có địa chỉ tĩnh.

Tôi đã thực hiện điều này trước khi bản thân mình trong C++ để phân tích các tệp COFF từ trình biên dịch TI cho các dòng DSP 2800 của chúng và điều này thật là đau. Tôi đã tự hỏi nếu có một thư viện Java ra khỏi đó mà loại điều này đã có, kể từ khi tôi đang phải đối mặt với cùng một điều với một hoặc hai tập tin thực thi của bộ vi xử lý khác.


Cập nhật: (2009/11/18) Một đầu mối hứa hẹn!

Có ai ngoài đó đã sử dụng trình phân tích cú pháp ELF của Eclipse CDT không?

(Xem http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc.isv/reference/api/org/eclipse/cdt/core/model/IBinary.html cho một trong những pgs javadoc)

Mã TI Composer 4 (dựa trên Eclipse) dường như sử dụng này, vì vậy nó có vẻ như nếu tôi có thể tìm ra nơi các tài liệu hướng dẫn là có lẽ tôi có thể sử dụng để giải quyết vấn đề của tôi.

Trả lời

2

Gdb có hỗ trợ CPU mục tiêu của bạn không?

Nếu có, chương trình thực hiện giao thức gỡ lỗi và nói chuyện với mục tiêu cũng có thể triển khai GDB Remote Serial Protocol và cung cấp cổng TCP cho gdb để liên lạc.

Việc bố trí sẽ là một cái gì đó như thế này

gdb < giao thức --gdb -> java-prog < --Thông debug giao thức -> nhắm mục tiêu

Để chạy toàn bộ điều, giả mục tiêu của bạn vẫn đang chạy chương trình của bạn

  1. Run java-prog
  2. Run gdb your-executable và kết nối với java-prog

    (gdb) nhắm mục tiêu từ xa 127.0.0.1:port

  3. Hỏi gdb để đọc một giá trị

    (gdb) p foo.bar [7] .baz

này được dịch các gói gdb được gửi tới java-prog qua TCP. java-prog nên thực hiện việc dịch giữa giao thức gdb và giao thức gỡ lỗi tùy chỉnh của bạn.

1

Bạn có thể tạo giao diện JNI cho GNU binutils được biên dịch cho nền tảng của bạn.Tuy nhiên, nếu GPL xung đột với giấy phép phần mềm của bạn, thì đây sẽ không phải là giải pháp khả thi.

+0

tiếc là GPL không nằm trong câu hỏi, nhưng cảm ơn ý tưởng. –

+0

Tôi cho rằng nó vẫn rất hữu ích để thử nghiệm đối với bất kỳ việc triển khai nào mà tôi sử dụng. –

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