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*
ELF 環境だと
% cc a.c
% ls
a.c elf
ですね。なるほど。
6 :
???????????????B:2001/01/29(月) 23:38
file(1) だが, 結局のところ magic(5) だ.
自分のプログラムで何とかしたいとかなら magic の中身
読んでみれ.
以上.
FreeBSD, Solaris 共に magic の置場所は違うので
man してくれ.
>>4-5 Solaris には使えないわざな気がする
file(1)じゃ出力のフォーマットが保証できないからだめだろ。
どうもです。
ちょっと検索したら資料がすぐに資料が見つかりました。
# なんだか、恥ずかしい。
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
11 :
名無しさん@お腹いっぱい。:2001/01/30(火) 12:01
>>5 あれ?ELFでもデフォの出力はa.outじゃないの?
12 :
5:2001/01/30(火) 14:22
いや、あの…ねぇ? 野暮なこと言わせるでないよ、この子は :-)
13 :
11:2001/01/30(火) 20:05
>>12 すんません、4への皮肉だったんですね。鬱だ氏のう。
>>13 つかホントに逝っちゃってください
空気が読めず、掛合いの妙がわからない方は2ちゃんすら早すぎます
わざとなら、なおのことです
>>13 > 4への皮肉だったんですね
いえ、4の振ったネタにのったつもりです。この際、
4が本気なのかネタなのかはどっちでもよし。
まぁ、マターリ仲良く逝きましょうや。
16 :
名無しさん@お腹いっぱい。:2001/01/31(水) 03:01
age
17 :
名無しさん@お腹いっぱい。:2001/01/31(水) 03:07
なんなんだこの板は。
耳が尖ってるのが elfだよ
Dragon knight 5!!
21 :
名無しさん@お腹いっぱい。:2001/01/31(水) 12:58
linux だと libbfd だよ、きっと。もっともなぜ /usr/share/magic があるのに
libbfd が必要なのか良く分からないが。
22 :
名無しさん@そうだドライブへいこう:2001/02/04(日) 12:44
>>13 結構うまくできてたとおもうよーノリボケ
一瞬ドキっとした人は手をあげましょう。
23 :
1:2001/02/04(日) 15:05
lddじゃ、だめなんでしょうか・・?