2010-06-03 31 views
28

Tháo một hệ nhị phân ELF trên hệ thống Ubuntu x86 Tôi không thể không chú ý rằng đoạn mã (.text) bắt đầu từ địa chỉ ảo 0x8048000 và tất cả các địa chỉ bộ nhớ thấp hơn dường như không được sử dụng.Tại sao địa chỉ bộ nhớ ảo cho các tệp nhị phân Linux bắt đầu ở 0x8048000?

Điều này có vẻ khá lãng phí và tất cả các lượt truy cập của Google đều là folklore involving STACK_TOP hoặc bảo vệ chống lại các tham chiếu không có con trỏ null. Trường hợp thứ hai có vẻ như nó có thể được sửa bằng cách sử dụng một trang duy nhất thay vì để lại khoảng trống 128MB.

Vì vậy, câu hỏi của tôi là điều này - có câu trả lời dứt khoát nào về lý do bố cục đã được sửa cho các giá trị này hay chỉ là một lựa chọn tùy ý?

+0

Tôi không biết câu trả lời thực sự; nhưng có lẽ bài viết này có thể giúp hoặc ít nhất là cung cấp một đọc thú vị! http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html –

+0

bản sao có thể có của [Tại sao địa chỉ ảo thực thi ELF có dạng 0x80xxxxx và không phải 0x0?] (http: // stackoverflow .com/questions/2187484/why-is-the-elf-execution-entry-point-virtual-địa chỉ-of-the-form-0x80xxxxx-and-n) –

Trả lời

24

Từ Linkers and loaders cuốn sách:

On 386 hệ thống, địa chỉ cơ sở văn bản là 0x08048000, cho phép một chồng một cách hợp lý lớn bên dưới văn bản trong khi vẫn ở trên địa chỉ 0x08000000, cho phép hầu hết các chương trình sử dụng một đĩa đơn thứ hai trang bảng. (Nhớ lại rằng trên 386, mỗi bảng cấp hai ánh xạ địa chỉ 0x00400000.)

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