У чым розніца паміж аб'ектным кодам і выкананым файлам?


адказ 1:

Выканаўчым кодам, простымі словамі, з'яўляецца машынны код мовы (двайковы код), які непасрэдна разумеецца кампутарам і выконваецца без дадатковага спрашчэння, у той час як аб'ектны код - гэта код, які складаецца кампілятарам або перакладчыкам. Гэта не абавязкова павінна быць машынным кодам, як на мове З. Гэта таксама можа быць байтавым кодам, калі мова Java павінна быць дадаткова спрошчана да двайковага кода, каб звацца выкананым кодам.

Праграму з бінарным кодам ці машыннай мовай можна назваць выкананым файлам, у той час як праграмны код, згенераваны кампілятарам (часам двайковым кодам, часам таксама выкананым файлам), называецца аб'ектным файлам.


адказ 2:

Аб'ектныя файлы ствараюцца кампілятарам, па адным для кожнага файла зыходнага кода. Затым Linker аб'ядноўвае іх у адзін выкананы файл, развязваючы адрасы выклікаў падпраграмы і ўсе глабальныя адрасныя зменныя. Лінкер таксама ведае, дзе чакае асноўная () аперацыйная сістэма, і ставіць яе першай.


адказ 3:

Код аб'екта звычайна ўтрымлівае некаторыя сімвалічныя спасылкі, якія павінны быць зламаны ("звязаны"), перш чым можа адбыцца выкананне.

Выканаўчы код цалкам апрацоўваецца на машыннай мове: усе знешнія спасылкі захоўваюцца ў якасці абсалютных адрасоў (альбо рэестравых спасылак, загружаных з абсалютнымі адрасамі).

Аднак, многія (можа, нават большасць) сучасных моў пакідаюць некаторыя спасылкі "прывязанымі" падчас выканання, нават у так званых выкананых файлах.


адказ 4:

Выкананы файл - гэта поўная праграма, якую можна запусціць непасрэдна з аперацыйнай сістэмы (у спалучэнні з агульнымі бібліятэкамі і сістэмнымі званкамі). Звычайна файл змяшчае змест, шэраг блокаў кода і блокі дадзеных, дадатковыя дадзеныя, такія як адрасы памяці, на якія неабходна загрузіць розныя блокі, якія патрабуюцца агульнымі бібліятэкамі, адрас кропкі ўваходу і часам табліцу сімвалаў для адладжвання. Аперацыйная сістэма можа больш-менш запускаць выкананы файл, загружаючы блокі кода і дадзеных у памяць па паказаных адрасах і пераскокваючы туды.

Большасць праграм напісаны з зыходным кодам, які лагічна падзелены на некалькі зыходных файлаў. Кожны зыходны файл незалежна кампілюецца ў адпаведны "аб'ектны" файл з часткова сфармаваным машынным кодам, вядомым як аб'ектны код. У наступны час гэтыя "аб'ектныя файлы" будуць "звязаны" з выкананым файлам.

Файлы аб'ектаў маюць шмат агульнага з выкананымі файламі (змест, блокі з машыннымі інструкцыямі і дадзенымі, а таксама звесткі пра адладкі). Аднак код яшчэ не гатовы да запуску. Ён поўны няпоўных спасылак на падпраграмы па-за межамі самога сябе, і таму такія шматлікія інструкцыі машыны маюць толькі відныя адрасы.

На апошнім этапе кампіляцыі злучальнік чытае ўсе аб'ектныя файлы, вырашае спасылкі паміж імі, выконвае канчатковую раскладку кода ў памяці, якая вызначае адрасы для ўсіх блокаў кода і дадзеных, а таксама карэктуе ўсе адрасныя запаўняльнікі з рэальнымі адрасамі і выпісвае выкананы файл .


адказ 5:

Аб'ектны код - гэта бінарны код выкананага мовы, на якім кампутарны працэсар чытае і выконвае мікраінструкцыі.

Калі вы пытаецеся пра выкананы файл, гэта можа быць шмат рэчаў, напрыклад, файл, які змяшчае ўсе вышэйпералічаныя (выкананыя, аб'ектныя) коды, але і файл, які змяшчае зусім іншыя рэчы, у тым ліку адзін першы выкананы код загрузкі (як і аб'ектны код) і сціснутая частка, якая распакуецца кодам загрузніка і паказвае іншую частку, нават вірус.

Код аб'екта - гэта таксама імя, якое выкарыстоўваецца для кампіляванага кода, напісанага на машыннай мове, але мае структуру, якую трэба звязаць, каб пераўтварыць у выкананы аб'ектны код, як паказана вышэй.