2013-05-05 20 views
9

Montaj için yeniyim ve bu nedenle yeniden yerleştirme kavramı hakkında daha fazla bilgi edinmek istiyorum.Taşınma kavramı ne anlama geliyor?

  1. Niçin programları ve verileri yeniden konumlandırmamız gerekiyor?
  2. Tam olarak nasıl yapılır?

Birisi başlangıç ​​düzeyinde bir örnekle açıklayabilirse harika olurdu.

+0

http://stackoverflow.com/questions/6002359/so-most-of-the-binary-is-composed-of-reloc-table/6092773#6092773 – JosephH

+0

Pratik programlama probleminiz nedir? Programınız taşınmalarla ilgili bir sorun nedeniyle çalışmıyor mu? –

+0

Ayrıntılı minimum örnek: http://stackoverflow.com/a/30507725/895245 –

cevap

12

Montajcıya bakmak için bir kaynak dosya vardır. Bu bir kaynak dosyaya dayalı bir bellek görüntüsü oluşturmalıdır. Böylece kod için 0 ve ayrıca verilerle 0 ile başlar. Sonuçlar bir nesne dosyasına gider.

Şimdi, bağlayıcı geliyor ve birçok nesne dosyasını bir yürütülebilir dosyaya (veya çekirdek görüntüsüne veya herhangi bir şeye) birleştirmeniz gerekiyor. Herkesi 0'da bırakamazlar, üst üste gelirlerdi. Dolayısıyla, her bir nesne dosyasının veri değerini benzersiz bir aralığa atamak için adresleri yeniden konumlandırması gerekir. Daha sonra, görüntü sanal belleğe yüklendikten sonra, işletim sisteminin temel sanal adres olarak '0'dan başka bir adres kullanmak istemesinin iyi nedenleri olabilir. Üste | Geri Bildirim Ver Daha fazla bilgi Daha fazla bilgi için bkz: http://support.microsoft.com/downloads/default.aspx (http://www.microsoft.com/downloads/default.aspx?displaylang=tr) Yani, çalışma zamanında, her şeyi yeniden konumlandırmak istiyor. Son olarak, eğer paylaşılan kütüphaneler söz konusu ise, ne montajcı ne de linker, çalışma ortamında nerede olacaklarını bilir ve bu yüzden referanslar yeniden yerleştirilmelidir.