|
ÈÌß
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).
|