ELFかAOUTかの判定

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
*BSDやLinuxやSolarisなどで(できる限り特定OSに依存したくない)
ELFかAOUTかを判定する方法ってありませんか?
FreeBSDだと/etc/objformatなどに書いてたりするんですが。
2名無しさん@お腹いっぱい。:2001/01/29(月) 22:54
file コマンドじゃだめ?
3名無しさん@お腹いっぱい。:2001/01/29(月) 22:58
% head -c 4 /bin/ls | tail -c 3
で "ELF" と出ればその環境は ELF がデフォルトだとみなしていいのでは。
4名無しさん@お腹いっぱい。:2001/01/29(月) 23:30
こうりつの良い判定法
% cc a.c
% ls
a.c a.out*
5???????????????B:2001/01/29(月) 23:37
ELF 環境だと
 % cc a.c
 % ls
 a.c elf
ですね。なるほど。
6???????????????B:2001/01/29(月) 23:38
file(1) だが, 結局のところ magic(5) だ.
自分のプログラムで何とかしたいとかなら magic の中身
読んでみれ.

以上.

FreeBSD, Solaris 共に magic の置場所は違うので
man してくれ.
7名無しさん:2001/01/30(火) 00:05
>>4-5 Solaris には使えないわざな気がする
8名無しさん@お腹いっぱい。:2001/01/30(火) 00:33
file(1)じゃ出力のフォーマットが保証できないからだめだろ。
91:2001/01/30(火) 01:17
どうもです。
ちょっと検索したら資料がすぐに資料が見つかりました。
# なんだか、恥ずかしい。
ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ELF.doc.tar.gz

自分のプログラムで使いたいので書いてみました。
こんなのでいいのかな、、、

#include <stdio.h>
#include <string.h>

int
is_elf_executable( const char *file )
{
FILE *fp = fopen( file, "rb" );
if ( fp == NULL )
{
return 0;
}

{
unsigned char sig[ 4 ] = { 0, 0, 0, 0 };
unsigned char elf[ 4 ] = { 0x7F, 'E', 'L', 'F' };

fread( sig, 4, 1, fp );
fclose( fp );

return memcmp( sig, elf, 4 ) == 0;
}
}

int
main( int argc, char **argv )
{
if ( argc != 2 )
{
printf( "Usage: iself file\n" );
return 1;
}

if ( is_elf_executable( argv[ 1 ] ) )
{
printf( "OK\n" );
}
else
{
printf( "ERROR\n" );
}

return 0;
}

10名無しさん@お腹いっぱい。:2001/01/30(火) 01:30
>>1
逝ってよし
11名無しさん@お腹いっぱい。:2001/01/30(火) 12:01
>>5
あれ?ELFでもデフォの出力はa.outじゃないの?
125:2001/01/30(火) 14:22
いや、あの…ねぇ? 野暮なこと言わせるでないよ、この子は :-)
1311:2001/01/30(火) 20:05
>>12
すんません、4への皮肉だったんですね。鬱だ氏のう。
14名無しさん@お腹いっぱい。:2001/01/30(火) 20:33
>>13
つかホントに逝っちゃってください
空気が読めず、掛合いの妙がわからない方は2ちゃんすら早すぎます
わざとなら、なおのことです
15???????????????B:2001/01/30(火) 22:08
>>13
> 4への皮肉だったんですね
いえ、4の振ったネタにのったつもりです。この際、
4が本気なのかネタなのかはどっちでもよし。

まぁ、マターリ仲良く逝きましょうや。
16名無しさん@お腹いっぱい。:2001/01/31(水) 03:01
age
17名無しさん@お腹いっぱい。:2001/01/31(水) 03:07
なんなんだこの板は。
18名無しさん@お腹いっぱい。:2001/01/31(水) 04:20
耳が尖ってるのが elfだよ
19名無しさん@お腹いっぱい。,sage ,2001/01/31(水) 04:49,>>true" target="_blank">>>18
ハーフリングやグラスランナーはどう見分ければいいのですか?
20病弱名無しさん:2001/01/31(水) 06:53
Dragon knight 5!!
21名無しさん@お腹いっぱい。:2001/01/31(水) 12:58
linux だと libbfd だよ、きっと。もっともなぜ /usr/share/magic があるのに
libbfd が必要なのか良く分からないが。
22名無しさん@そうだドライブへいこう:2001/02/04(日) 12:44
>>13
結構うまくできてたとおもうよーノリボケ
一瞬ドキっとした人は手をあげましょう。
231:2001/02/04(日) 15:05
>>22
しました。
24名無しさん@お腹いっぱい。
lddじゃ、だめなんでしょうか・・?