Tôi đã tìm kiếm rất xa và rộng để biết cách thực hiện điều này và không thể đưa ra câu trả lời.Trình liên kết tập lệnh - Đặt một phần ở phần cuối của vùng bộ nhớ
bố trí bộ nhớ của tôi là như sau:
Fake Address | Section
0 | text
7 | relocate
15 | bss
23 | stack
Vào cuối Stack Tôi đặt Heap. Mà lớn lên và ngăn xếp là một ngăn xếp giảm dần đầy đủ cho chip ARM tôi đang sử dụng.
Bây giờ, những gì tôi muốn làm là đặt một phần duy nhất, hãy gọi nó là .persist
, vào bộ nhớ ram của tôi. Tôi muốn nó nằm ở phần cuối của RAM và tôi muốn chương trình này vào kịch bản linker của tôi. Tuy nhiên, kích thước của phần .persist
này không được định nghĩa bởi tôi nhưng được tính toán bởi trình biên dịch từ các biểu tượng mà nó chứa.
Cho đến giờ tôi chưa nghĩ ra cách tốt để làm điều đó. Vì tôi biết địa chỉ khởi động RAM và SIZE nó sẽ là tầm thường để tính toán nơi mà phần cần phải đi nếu tôi biết kích thước phần. Tuy nhiên, theo the GNU linker documentation (pg 74) có vẻ như rằng:
sizeof (phần) Trả về kích thước tính bằng byte của tên phần, nếu phần đó đã được phân bổ. Nếu phần không được phân bổ khi đánh giá phần này, trình liên kết sẽ báo cáo lỗi.
vì vậy tôi không thể làm việc với kích thước của phần trong tập lệnh trình liên kết (vì tôi muốn tính kích thước TRƯỚC KHI tôi đặt nó/phân bổ nó).
Có ai biết cách tốt để làm điều này không?
Tôi có cùng một vấn đề. Điều này có giúp bạn không? http://stackoverflow.com/a/19348569/911550 – parvus
Đó là một giải pháp một phần nhưng không phải là những gì tôi theo sau. Nó vẫn là người gần nhất đã đến giúp đỡ. Cảm ơn! – nonsensickle