ÈÌß
a.out - Ôopìaò ôaéëa, ïoëy÷aeìoão â peçyëüòaòe paáoòû
ïpoãpaìì acceìáëèpoâaíèÿ è peäaêòopa câÿçeé.
ÎÏÈÑÀÍÈÅ
A.out ÿâëÿeòcÿ peçyëüòèpyþùèì ôaéëoì ïocëe çaâepøeíèÿ paáoòû
ïpoãpaìì acceìáëepa masm è peäaêòopa câÿçeé ld. Ecëè â
ïpoöecce paáoòû êaæäoé èç ýòèx ïpoãpaìì íe áûëè oáíapyæeíû
oøèáêè èëè íeoïpeäeëeííûe ãëoáaëüíûe ïepeìeííûe, áyäeò
coçäaí ôaéë fa.out.
Ôopìaò ôaéëa a.out, íaçûâaeìûé òaêæe x.out èëè ceãìeíòèpoâaííûé x.out, oïpeäeëÿeòcÿ ôaéëaìè /usr/include/a.out.h è /usr/include/sys/relsym.h. Ôaéë a.out èìeeò cëeäyþùèe ocíoâíûe ÷acòè:
B ceãìeíòèpoâaííoì ôopìaòe ìoãyò cyùecòâoâaòü íecêoëüêo ceãìeíòoâ òeêcòoâ è äaííûx, â çaâècèìocòè oò ìoäeëè ïaìÿòè ïpoãpaììû. Ceãìeíòû â ôaéëe ía÷èíaþòcÿ c aäpeca, êpaòíoão paçìepy còpaíèöû ôaéëa (512 áaéò).
ÔOPÌAÒ
/* *Ocíoâíoé è äoïoëíèòeëüíûé çaãoëoâoê còpyêòyp. *Äëÿ ceãìeòèpoâaííoão ôopìaòa x.out (XE_SEG): * 1)ïoëÿ, ìapêèpoâaííûe (s) äoëæíû * coäepæaòü cyììy âcex xs_psize, ecëè oápaç íaxoäèòcÿ ía äècêe * èëè xs_vsize äëÿ oápaça ïaìÿòè. * 2)coäepæèìoe oáëacòeé, ìapêèpoâaííûx * (u) íeoïpeäeëeío. */ struct xexec{ /*çaãoëoâoê x.out*/ unsigned short x_magic; /*ìaãè÷ecêoe ÷ècëo*/ unsigned short x_ext; /*paçìep äoïoëíèòeëüíoão çaãoëoâêa*/ long X-Text; /*paçìep ceãìeíòa òeêcòa (s)*/ long x_data; /*paçìep èíèöèaëèçèpoâaííûx äaííûx (s)*/ long x_bss; /*paçìep íeèíèöèaëèçèpoâaííûx äaííûx (s)*/ long syms; /*paçìep òaáëèöû cèìâoëoâ (s)*/ long x_reloc; /*äëèía òaáëèöû ïepeìeùeíèé (s)*/ long x_entry; /*ìaøèíío çaâècèìaÿ òo÷êa âxoäa*/ char x_cpu; /*òèï ïpoöeccopa è ïopÿäoê áaéò/cëoâo*/ char x_relsym; /*ôopìò ïepeìeùeíèé è cèìâoëoâ (u)*/ unsigned short x_renv; /* cpeäa âûïoëíeíèÿ*/ }; struct xext { /* äoïoëíèòeëüíûé çaãoëoâoê x.out */ long xe_trsize; /* paçìep òaáëèöû ïepeìeùeíèé òeêcòa (s) */ long xe_drsize; /* paçìep òaáëèöû ïepeìeùeíèé äaííûx (s) */ long xe_tbase; /* áaça ïepeìeùaeìoão òeêcòa(u) */ long xe_dbase; /* áaça ïepeìeùaeìûx äaííûx(u) */ long xe_stksize; /* paçìep còeêa (ecëè XE_FS ycòaíoâëeí) */ /* cëeäyþùèe äaëee ýëeìeíòû äoëæíû áûòü ïpeäcòaâëeíû ecëè XE_SEG ycòaíoâëeí */ long xe_segpos; /* ïoëoæeíèe òaáëèöû ceãìeíòoâ */ long xe_segsize; /* paçìep òaáëèöû ceãìeíòoâ */ long xe_mdtpos; /* ìaøèíío çaâècèìoe ïoëoæeíèe */ long xe_mdtsize; /* ìaøèíío çaâècèìûé paçìep òaáëèöû */ char xe_mdttype; /* ìaøèíío çaâècèìûé òèï òaáëèöû */ char xe_pagesize; /* paçìep còpaíèöû ôaéëa, êpaòíoe 512 */ char xe_ostype; /* òèï oïepaöèoííoé cècòeìû */ char xe_osvers; /* âepcèÿ oïepaöèoííoé cècòeìû */ unsigned short xe_eseg; /*ceãìeíò âxoäa, çaâècèìûé oò aïïapaòypû */ unsigned short xe_sres; /* peçepâèpoâaí */ }; struct xseg { /* òaáëèöa ceãìeíòoâ x.out */ unsigned short xs_type; /*òèï ceãìeíòa */ unsigned short xs_attr; /*aòpèáyòû ceãìeíòa */ unsigned short xs_seg; /*íoìep ceãìeíòa */ char xs_align; /* ëoãapèôì ïo ocíoâaíèþ 2 oò âûpaâíèâaíèÿ */ char xs_cres; /* íeècïoëüçyeòcÿ*/ long xs_filpos; /* ïoëoæeíèe ôaéëa */ long xs_psize; /* ôèçè÷ecêèé paçìep (â ôaéëe) */ long xs_vsize; /* âèpòyaëüíûé paçìep (in core) */ long xs_rbase; /* aäpec/cìeùeíèe áaçû ïepeìeùeíèÿ */ unsigned short xs_noff; /* cìeùeíèe äo èìeíè ceãìíòa â òaáëèöe ceãìeíòoâ ceãìeíòa */ unsigned short xs_sres; /* íeècïoëüçyeòcÿ*/ long xs_lres; /* íeècïoëüçyeòcÿ */ }; struct xiter { /* çaïècü ïoâòopeíèé x.out */ long xi_size; /* source byte count */ long xi_rep; /* replication count */ long xi_offset; /* destination offset in segment */ }; struct xlist { /* xlist còpyêòypa äëÿ xlist(3). */ unsigned short xl_type; /* òèï cèìâoëa */ unsigned short xl_seg; /* èíäeêc òaáëèöû ceãìeíòa ôaéëa */ long xl_value; /* âeëè÷èía cèìâoëa */ char *xl_name; /* yêaçaòeëü ía èìÿ, oãpaíè÷eííoe íyëeì */ }; struct aexec { /* çaãoëoâoê a.out */ unsigned short xa_magic; /* ìaãè÷ecêoe ÷ècëo */ unsigned short xa_text; /* paçìep ceãìeíòa òeêcòa*/ unsigned short xa_data; /* paçìep èíèöèaëèçèpoâaííûx äaííûx */ unsigned short xa_bss; /* paçìep íeèíèöèaëèçèpoâaííûx äaííûx */ unsigned short xa_syms; /* paçìep òaáëèöû cèìâoëoâ */ unsigned short xa_entry; /* òo÷êa âxoäa */ unsigned short xa_unused; /* íe ècïoëüçyeòcÿ */ unsigned short xa_flag; /* ôëaã oòcyòcâèÿ òaáëèöû èìeí */ }; struct nlist { /* nlist còpyêòypa äëÿ nlist(3). */ char n_name[8]; /* èìÿ cèìâoëa */ int n_type; /* ôëaã òèïa*/ unsigned n_value; /* âeëè÷èía */ }; struct bexec { /* çaãoëoâoê b.out */ long xb_magic; /* ìaãè÷ecêoe ÷ècëo */ long xb_text; /* paçìep ceãìeíòa òeêcòa*/ long xb_data; /* paçìep ceíìeíòa äaííûx*/ long xb_bss; /* paçìep íeèíèöèaëèçèpoâaííûx äaííûx */ long xb_syms; /* paçìep òaáëèöû cèìâoëoâ*/ long xb_trsize; /* paçìep òaáëèöû ïepeìeùeíèÿ òeêcòa*/ long xb_drsize; /* paçìep òaáëèöû ïepeìeùeíèÿ äaííûx*/ long xb_entry; /* òo÷êa âxoäa*/ };
ÑÌ. ÒÀÊÆÅ
masm(1), ld(1), nm(1), strip(1), xlist(1).