JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
マニュアルページセクション 1: ユーザーコマンド     Oracle Solaris 11.1 Information Library (日本語)
このドキュメントの評価
search filter icon
search icon

ドキュメントの情報

はじめに

紹介

User Commands

acctcom(1)

adb(1)

addbib(1)

admin(1)

alias(1)

allocate(1)

amt(1)

appcert(1)

apptrace(1)

apropos(1)

ar(1)

arch(1)

as(1)

asa(1)

at(1)

atq(1)

atrm(1)

audioconvert(1)

audioctl(1)

audioplay(1)

audiorecord(1)

audiotest(1)

auths(1)

auto_ef(1)

awk(1)

banner(1)

basename(1)

basename(1B)

batch(1)

bc(1)

bdiff(1)

bfs(1)

bg(1)

biff(1B)

break(1)

builtin(1)

cal(1)

calendar(1)

case(1)

cat(1)

cd(1)

cdc(1)

cdrw(1)

chdir(1)

checkeq(1)

checknr(1)

chgrp(1)

chkey(1)

chmod(1)

chown(1)

chown(1B)

ckdate(1)

ckgid(1)

ckint(1)

ckitem(1)

ckkeywd(1)

ckpath(1)

ckrange(1)

ckstr(1)

cksum(1)

cktime(1)

ckuid(1)

ckyorn(1)

clear(1)

cmp(1)

col(1)

comb(1)

comm(1)

command(1)

compress(1)

continue(1)

cp(1)

cpio(1)

cpp(1)

cputrack(1)

crle(1)

crontab(1)

csh(1)

csplit(1)

ct(1C)

ctags(1)

ctrun(1)

ctstat(1)

ctwatch(1)

cu(1C)

cut(1)

date(1)

dc(1)

deallocate(1)

decrypt(1)

delta(1)

deroff(1)

df(1B)

dhcpinfo(1)

diff(1)

diff3(1)

diffmk(1)

digest(1)

digestp(1)

dircmp(1)

dirname(1)

dirs(1)

dis(1)

disown(1)

dispgid(1)

dispuid(1)

dos2unix(1)

dpost(1)

du(1)

du(1B)

dump(1)

dumpcs(1)

dumpkeys(1)

echo(1)

echo(1B)

ed(1)

edit(1)

egrep(1)

eject(1)

elfdump(1)

elfedit(1)

elffile(1)

elfsign(1)

elfwrap(1)

encrypt(1)

enhance(1)

env(1)

eqn(1)

errange(1)

errdate(1)

errgid(1)

errint(1)

erritem(1)

error(1)

errpath(1)

errstr(1)

errtime(1)

erruid(1)

erryorn(1)

eval(1)

ex(1)

exec(1)

exit(1)

expand(1)

export(1)

exportfs(1B)

expr(1)

expr(1B)

exstr(1)

factor(1)

false(1)

fastboot(1B)

fasthalt(1B)

fc(1)

fg(1)

fgrep(1)

file(1)

file(1B)

filebench(1)

filep(1)

filesync(1)

filofaxp(1)

find(1)

finger(1)

fmt(1)

fmtmsg(1)

fold(1)

for(1)

foreach(1)

franklinp(1)

from(1B)

ftp(1)

function(1)

gcore(1)

gencat(1)

geniconvtbl(1)

genmsg(1)

get(1)

getconf(1)

getfacl(1)

getlabel(1)

getopt(1)

getoptcvt(1)

getopts(1)

gettext(1)

gettxt(1)

getzonepath(1)

glob(1)

goto(1)

gprof(1)

grep(1)

groups(1)

groups(1B)

grpck(1B)

hash(1)

hashcheck(1)

hashmake(1)

hashstat(1)

head(1)

helpdate(1)

helpgid(1)

helpint(1)

helpitem(1)

helppath(1)

helprange(1)

helpstr(1)

helptime(1)

helpuid(1)

helpyorn(1)

hist(1)

history(1)

hostid(1)

hostname(1)

i386(1)

i486(1)

iconv(1)

if(1)

indxbib(1)

install(1B)

ipcrm(1)

ipcs(1)

isainfo(1)

isalist(1)

jobs(1)

join(1)

jsh(1)

kbd(1)

kdestroy(1)

keylogin(1)

keylogout(1)

kill(1)

kinit(1)

klist(1)

kmdb(1)

kmfcfg(1)

kpasswd(1)

krb5-config(1)

ksh(1)

ksh88(1)

ksh93(1)

ktutil(1)

kvno(1)

lari(1)

last(1)

lastcomm(1)

ld(1)

ldapadd(1)

ldapdelete(1)

ldaplist(1)

ldapmodify(1)

ldapmodrdn(1)

ldapsearch(1)

ldd(1)

ld.so.1(1)

let(1)

lex(1)

lgrpinfo(1)

limit(1)

line(1)

list_devices(1)

listusers(1)

llc2_autoconfig(1)

llc2_config(1)

llc2_stats(1)

ln(1)

ln(1B)

loadkeys(1)

locale(1)

localedef(1)

logger(1)

logger(1B)

login(1)

logname(1)

logout(1)

look(1)

lookbib(1)

lorder(1)

ls(1)

ls(1B)

m4(1)

mac(1)

mach(1)

machid(1)

madv.so.1(1)

mail(1)

Mail(1B)

mail(1B)

mailcompat(1)

mailp(1)

mailq(1)

mailstats(1)

mailx(1)

make(1S)

makekey(1)

man(1)

mconnect(1)

mcs(1)

mdb(1)

mesg(1)

mkdir(1)

mkmsgs(1)

mkstr(1B)

mktemp(1)

moe(1)

more(1)

mp(1)

mpss.so.1(1)

msgcc(1)

msgcpp(1)

msgcvt(1)

msgfmt(1)

msggen(1)

msgget(1)

mt(1)

mv(1)

nawk(1)

nc(1)

ncab2clf(1)

ncakmod(1)

neqn(1)

netcat(1)

newform(1)

newgrp(1)

newsp(1)

newtask(1)

nice(1)

nl(1)

nm(1)

nohup(1)

notify(1)

nroff(1)

od(1)

on(1)

onintr(1)

optisa(1)

pack(1)

packagemanager(1)

page(1)

pagesize(1)

pargs(1)

passwd(1)

paste(1)

patch(1)

pathchk(1)

pax(1)

pcat(1)

pcred(1)

perl(1)

pfbash(1)

pfcsh(1)

pfexec(1)

pfiles(1)

pfksh(1)

pflags(1)

pfsh(1)

pftcsh(1)

pfzsh(1)

pg(1)

pgrep(1)

pkcs11_inspect(1)

pkg(1)

pkgdepend(1)

pkgdiff(1)

pkgfmt(1)

pkginfo(1)

pkglint(1)

pkgmerge(1)

pkgmk(1)

pkgmogrify(1)

pkgparam(1)

pkgproto(1)

pkgrecv(1)

pkgrepo(1)

pkgsend(1)

pkgsign(1)

pkgtrans(1)

pkill(1)

pklogin_finder(1)

pktool(1)

plabel(1)

pldd(1)

plgrp(1)

plimit(1)

pmadvise(1)

pmap(1)

pm-updatemanager(1)

popd(1)

ppgsz(1)

ppriv(1)

pr(1)

praliases(1)

prctl(1)

preap(1)

print(1)

printenv(1B)

printf(1)

priocntl(1)

proc(1)

prof(1)

profiles(1)

projects(1)

prs(1)

prt(1)

prun(1)

ps(1)

ps(1B)

psig(1)

pstack(1)

pstop(1)

ptime(1)

ptree(1)

pushd(1)

pvs(1)

pwait(1)

pwd(1)

pwdx(1)

radadrgen(1)

ranlib(1)

rcapstat(1)

rcp(1)

read(1)

readonly(1)

red(1)

refer(1)

regcmp(1)

rehash(1)

remote_shell(1)

remsh(1)

renice(1)

repeat(1)

reset(1B)

return(1)

rksh(1)

rksh88(1)

rlogin(1)

rm(1)

rmail(1)

rmdel(1)

rmdir(1)

rmformat(1)

rmmount(1)

rmumount(1)

roffbib(1)

roles(1)

rpcgen(1)

rpm2cpio(1)

rsh(1)

runat(1)

rup(1)

rup(1C)

ruptime(1)

rusage(1B)

rusers(1)

rwho(1)

sact(1)

sar(1)

sccs(1)

sccs-admin(1)

sccs-cdc(1)

sccs-comb(1)

sccs-delta(1)

sccsdiff(1)

sccs-get(1)

sccs-help(1)

sccshelp(1)

sccs-prs(1)

sccs-prt(1)

sccs-rmdel(1)

sccs-sact(1)

sccs-sccsdiff(1)

sccs-unget(1)

sccs-val(1)

scp(1)

script(1)

sdiff(1)

sed(1)

sed(1B)

select(1)

set(1)

setenv(1)

setfacl(1)

setlabel(1)

setpgrp(1)

settime(1)

sftp(1)

sh(1)

shcomp(1)

shell_builtins(1)

shift(1)

shutdown(1B)

size(1)

sleep(1)

soelim(1)

sort(1)

sortbib(1)

sotruss(1)

source(1)

sparc(1)

spell(1)

spellin(1)

split(1)

srchtxt(1)

ssh(1)

ssh-add(1)

ssh-agent(1)

ssh-http-proxy-connect(1)

ssh-keygen(1)

ssh-keyscan(1)

ssh-socks5-proxy-connect(1)

stop(1)

strchg(1)

strconf(1)

strings(1)

strip(1)

stty(1)

stty(1B)

sum(1)

sum(1B)

sun(1)

suspend(1)

svcprop(1)

svcs(1)

switch(1)

symorder(1)

sys-suspend(1)

sysV-make(1)

t300(1)

t300s(1)

t4014(1)

t450(1)

tabs(1)

tail(1)

talk(1)

tar(1)

tbl(1)

tcopy(1)

tee(1)

tek(1)

telnet(1)

test(1)

test(1B)

tftp(1)

time(1)

timemanp(1)

times(1)

timesysp(1)

timex(1)

tip(1)

touch(1)

touch(1B)

tplot(1)

tput(1)

tr(1)

tr(1B)

trap(1)

troff(1)

true(1)

truss(1)

tset(1B)

tsort(1)

tty(1)

type(1)

typeset(1)

ul(1)

ulimit(1)

umask(1)

unalias(1)

uname(1)

uncompress(1)

unexpand(1)

unget(1)

unhash(1)

unifdef(1)

uniq(1)

units(1)

unix2dos(1)

unlimit(1)

unpack(1)

unset(1)

unsetenv(1)

until(1)

updatehome(1)

uptime(1)

userattr(1)

users(1B)

uucp(1C)

uudecode(1C)

uuencode(1C)

uuglist(1C)

uulog(1C)

uuname(1C)

uupick(1C)

uustat(1C)

uuto(1C)

uux(1C)

vacation(1)

val(1)

valdate(1)

valgid(1)

valint(1)

valpath(1)

valrange(1)

valstr(1)

valtime(1)

valuid(1)

valyorn(1)

vc(1)

vedit(1)

ver(1)

vgrind(1)

vi(1)

view(1)

vipw(1B)

volcheck(1)

volrmmount(1)

w(1)

wait(1)

wc(1)

what(1)

whatis(1)

whence(1)

whereis(1B)

which(1)

while(1)

who(1)

whoami(1B)

whocalls(1)

whois(1)

write(1)

xargs(1)

xgettext(1)

xstr(1)

yacc(1)

yes(1)

ypcat(1)

ypmatch(1)

yppasswd(1)

ypwhich(1)

zcat(1)

zlogin(1)

zonename(1)

zonestat(1)

ドキュメントの品質向上のためのご意見をください
簡潔すぎた
読みづらかった、または難し過ぎた
重要な情報が欠けていた
内容が間違っていた
翻訳版が必要
その他
Your rating has been updated
貴重なご意見を有り難うございました!

あなたの貴重なご意見はより良いドキュメント作成の手助けとなります 内容の品質向上と追加コメントのためのアンケートに参加されますか?

elfedit

- ELF ファイルの検査または編集

形式

elfedit [-adr] [-e cmd] [-L path] [-o default | simple | num] [infile] [outfile]

機能説明

elfedit は、既存の ELF オブジェクトの内容を検査または変更するためのツールです。特に、elfedit は、オブジェクトに含まれている ELF メタデータを変更するために使用されます。ELF ヘッダー、セクションヘッダーテーブル、プログラムヘッダーテーブル、動的セクション、ハードウェアおよびソフトウェア機能、文字列テーブル、シンボルテーブルなどの、オブジェクトに含まれているほとんどの ELF データへのアクセスが提供されます。

構文

elfedit は、コマンド行 (-e オプション) または標準入力からのコマンドを処理します。標準入力が端末である場合、elfedit では端末編集機能のほか、広範囲のコマンド完了が提供されます。ELF では、特殊な整数値やビットマスクのために多くの標準の記号名が使用されます。elfedit は、このような名前に関する、可能性のあるほとんどの完了を認識します。elfedit コマンドの入力中はいつでも TAB キーを押すことができ、それにより、elfedit は現在のカーソル位置にあるテキストの使用法に関するメッセージや既知の完了を表示します。

elfedit の機能は、モジュールの形式で構成されています。各モジュールは、関連する機能に焦点を絞った一連のコマンドを提供します。コマンドは、モジュールとコマンド名をコロン (:) の区切り記号で結合する (空白は入れない) ことによって指定されます。たとえば、dyn:runpath は、dyn モジュールによって提供される runpath コマンドを示します。モジュール名は一意である必要があります。特定のモジュール内のコマンド名はそのモジュール内では一意ですが、その同じコマンド名を複数のモジュールで使用できます。

一部のモジュールでは、コマンドの 1 つが、そのモジュールのデフォルトコマンドとして指定されます。このコマンドは、ユーザーがモジュール名のみを指定した場合に実行されます。ほとんどの elfedit モジュールでは、そのモジュールがサポートする ELF ファイルの部分に関して elfdump ユーティリティーによって表示されるのと同じ情報を生成する、dump という名前のコマンドが提供されます。モジュールでは一般に、dump がデフォルトコマンドとして指定されます。

elfedit コマンドを実行するために使用される構文は、UNIX コマンド行ユーティリティーを使用しているすべてのユーザーが使いやすいように考慮されています。この構文は、空白で区切られたトークンで構成されます。最初のトークンはコマンド名です。コマンドのあとに、ハイフン (-) 文字で始まる引数である各オプションが指定されます。オプションのあとに、プレーン引数 (オペランド) が指定されます。特定のコマンドに対してオプションやオペランドを 0 個以上指定できますが、この両方が存在する場合は、常にオプションをプレーン引数の前に指定します。特殊オプション -- (2 つのハイフン) を使用して、オプションの終わりを表すことができます。このオプションが見つかると、残りの引数はすべて、- で始まっていたとしてもプレーン引数であると見なされます。

elfedit トークン内の文字の解釈は、使用されている引用の形式によって異なります。

引用なし

単一引用符 (') または二重引用符 (“) の外側では、バックスラッシュ (\) がエスケープ文字として機能します。バックスラッシュ文字が見つかると、elfedit はこの文字を無視し、後続の文字を (その文字自体がバックスラッシュであっても) 文字どおりに処理します。この機能を使用すると、文字列を 2 つの個別のトークンに分割しなくても、コマンドの文字列引数に空白文字を挿入できます。同様に、この機能を使用すると、引用符またはバックスラッシュをリテラル文字として挿入できます。

単一引用符

単一引用符 (') 内では、空白文字によってトークンは区切られず、空白文字はトークン内のリテラル文字として解釈されます。二重引用符 (") およびバックスラッシュ (\) 文字はリテラル文字として解釈され、特別な意味を持ちません。

二重引用符

二重引用符 (") 内では、空白文字によってトークンは区切られません。単一引用符文字は文字どおり解釈され、引用機能を持ちません。バックスラッシュ (\) は、文字列リテラル内の C プログラミング言語で使用される場合と同様に動作するエスケープ文字です。

\a

警告 (ベル)

\b

バックスペース

\f

フォームフィード

\n

改行

\r

復帰

\t

水平タブ

\v

垂直タブ

\\

バックスラッシュ

\'

単一引用符

\”

二重引用符

\ooo

8 進定数であり、ooo は 1 桁から 3 桁までの 8 進数 (0...7)

バックスラッシュのあとのその他の文字はすべてエラーです。

コアのコマンドは、sys という名前の内部モジュールに属しています。その他のモジュールはすべて、動的にロード可能な共有可能オブジェクトとしてパッケージ化されます。elfedit は、特定のモジュールを必要とするコマンドが実行された場合、または sys:load コマンド実行の結果として、必要に応じてモジュールをロードします。その特殊な組み込みステータスのため、さらにはそのコマンドが頻繁に使用されるため、elfedit では、sys: 接頭辞を含めなくても sys モジュールのコマンドを指定できます (たとえば、sys:load ではなく load)。その他のすべてのモジュールのコマンドにアクセスするには、完全な module:cmd 形式を指定する必要があります。

elfedit は、次の標準モジュールとともに提供されます。

cap

機能セクション

dyn

動的セクション

ehdr

ELF ヘッダー

phdr

プログラムヘッダー配列

shdr

セクションヘッダー配列

str

文字列テーブルセクション

sym

シンボルテーブルセクション

syminfo

Syminfo セクション

sys

コアに組み込まれた elfedit コマンド

ステータスおよびコマンドドキュメント

ステータスおよびコマンドドキュメント

status (sys:status) コマンドは、現在の elfedit セッションに関する情報を表示します。

どの elfedit モジュールにも、コマンドごとの広範囲なオンラインドキュメントが、UNIX のマニュアルページと同様の形式で含まれています。help (sys:help) コマンドは、この情報を表示するために使用されます。elfedit についての詳細を表示するには、elfedit を起動し、ヘルプコマンドを引数なしで使用します。

% elfedit
> help

elfedit はウェルカムメッセージと、elfedit およびヘルプシステムの使用方法に関する詳細情報を表示します。

モジュールのサマリー情報を取得するには:

> help module

モジュールが提供する特定のコマンドの詳細なドキュメントを取得するには、次のようにします。

> help module:command

例としての dyn モジュールおよび dyn:runpath コマンドの使用:

> help dyn
> help dyn:runpath

help (sys:help) を使用すると、それ自体に関するヘルプを取得できます。

> help help

モジュール検索パス

elfedit モジュールは、必要に応じてロードされる共有可能オブジェクトとして実装されます。あるモジュールが必要になると、elfedit は、そのモジュールを実装している共有可能オブジェクトを見つけるためにモジュールパスを検索します。このときのパスは、一連のディレクトリ名をコロン (:) 文字で区切ったものです。そのパスには、通常の文字に加えて、次のいずれかのトークンも含めることができます。

%i

現在の命令セットアーキテクチャー (ISA) の名前 (sparcsparcv9i386amd64) に展開されます。

%I

64 ビット ISA に展開されます。これは 64 ビットバージョンの elfedit では %i と同じものですが、32 ビットバージョンでは空の文字列に展開されます。

%o

変更対象のパスの古い値まで展開されます。これは、デフォルトのパスの前またはあとにディレクトリを追加する場合に役立ちます。

%r

elfedit プログラムを保持しているファイルシステムツリーのルート。elfedit がこのツリー内の usr/bin/elfedit としてインストールされていることを前提にしています。標準のシステムでは、これは単純に標準のシステムのルートディレクトリ (/) です。elfedit のコピーをほかの場所にインストールできる開発システムでは、%r を使用することにより、一致した一連のモジュールが使用されることを保証できます。

%%

1 つの % 文字に展開されます。

elfedit のデフォルトのモジュール検索パスは次のとおりです。

%r/usr/lib/elfedit/%I

トークンを展開すると、これは次のようになります。

/usr/lib/elfedit

32 ビットの elfedit

/usr/lib/elfedit/sparcv9

64 ビットの elfedit (sparc)

/usr/lib/elfedit/amd64

64 ビットの elfedit (x86)

デフォルト検索パスは、ELFEDIT_PATH 環境変数を設定するか、または -L コマンド行オプションを使用することによって変更できます。この両方を指定した場合は、-L オプションが環境変数より優先されます。

オプション

サポートしているオプションは、次のとおりです。

-a

autoprint モードを有効にします。autoprint が有効になっている場合、elfedit は、ELF ファイルが変更されたときに生成される変更された値を出力します。この出力は、-o オプションを使用して変更できる現在の出力形式で示されます。デフォルトの出力形式は、elfdump(1) ユーティリティーによって使用される形式です。autoprint モードは、elfedit が対話的に使用されている場合 (標準入力標準出力が端末である場合) にデフォルトになります。そのため、-a オプションは、elfedit が非対話型コンテキストで使用されている場合にのみ意味を持ちます。対話型セッションで autoprint を無効にするには、elfedit コマンドを使用します。

> set a off
-d

このオプションが設定されていると、elfedit は、処理されている ELF オブジェクトの内部の動作や詳細が記述された情報メッセージを発行します。これは、内部で実行されている動作を深く理解したい場合に役立ちます。

-e cmd

編集コマンドを指定します。複数の -e オプションを指定できます。0コマンド行に編集コマンドが存在する場合、elfedit はバッチモードで動作します。ファイルを開いたあと、elfedit は各コマンドを指定された順序で実行します。そのあと、変更されたファイルが保存され、elfedit が終了します。バッチモードは、シェルスクリプトやメイクファイルから単純な操作を実行する場合に役立ちます。

-L path

elfedit モジュールを検索するためのデフォルトのパスを設定します。モジュールは、このマニュアルページの「モジュール検索パス」セクションで説明されています。

-o default | simple | num

ELF データを表示するために使用される形式。このオプションによって、セッションの現在の形式が確立されます。この形式は、elfedit セッション内から set (sys:set) コマンドを使用するか、またはセッション内で実行される個々のコマンドに -o オプションを指定することによって変更できます。

default

デフォルトの形式では、人間が見ることを目的にした形式で出力を表示します。この形式は、elfdump ユーティリティーによって使用される形式と同じです。

num

整数値は常に、整数の形式で表示されます。文字列は、包含する文字列テーブルへの整数オフセットとして表示されます。

simple

ELF ファイル内から文字列を表示する場合は、文字列のみが表示されます。整数値は、可能な場合は記号定数として表示され、それ以外の場合は整数の形式で表示されます。タイトルやヘッダーなどの補足的な出力は表示されません。

-r

読み取り専用モード。入力ファイルは読み取り専用アクセス用に開かれ、編集セッションの結果は保存されません。elfedit では、-r が指定された場合、outfile 引数は許可されません。ファイルを変更する意図がない場合は、読み取り専用モードを強くお勧めします。誤った変更に対する追加の保護を提供することに加えて、ユーザーが書き込み権を持っていないファイルの検査も可能になります。

オペランド

次のオペランドがサポートされています。

infile

処理する ELF オブジェクトを含む入力ファイル。

実行可能ファイル (ET_EXEC)、共有オブジェクト (ET_DYN)、または再配置可能オブジェクトファイル、(ET_REL) を指定できます。アーカイブは、直接にはサポートされていません。アーカイブ内のオブジェクトを編集するには、オブジェクトを抽出し、そのコピーを編集してから、それをアーカイブ内に戻す必要があります。

infile が存在しない場合、elfedit は、sys: モジュールからのコマンドの実行のみが許可される制限されたモードで実行されます。このモードは主に、help (sys:help) コマンドから使用可能なコマンドドキュメントへのアクセスを許可するためのものです。

infile が存在し、outfile が指定されていない場合、elfedit は所定のファイルを編集し、その結果を同じファイルに書き込むため、元のファイルの内容が上書きされます。通常、elfedit をこのモードで使用することはやめ、出力ファイルを指定することをお勧めします。結果として得られるファイルがテストされ、検証されたあと、そのファイルを元のファイルの場所に移動できます。

-r オプションを使用すると、infile を読み取り専用アクセス用に開くことができます。これは、変更したくない既存のファイルを検査する場合に役立ちます。

outfile

出力ファイル。infileoutfile の両方が存在する場合は、infile が読み取り専用アクセス用に開かれ、変更されたオブジェクト内容が outfile に書き込まれます。

使用法

システムでサポートされている場合、elfedit は 64 ビットアプリケーションとして実行されるため、2G バイト (2^31 バイト) 以上のファイルを処理できます。

起動時に、elfeditlibelf を使用して入力ファイルを開き、その内容のコピーを編集のためにメモリー内にキャッシュします。そのあと、1 つ以上のコマンドを実行できます。変更されたオブジェクトを必要に応じて出力ファイルに書き込むことによってセッションが完了し、次に終了します。

infile が存在しない場合、elfedit は、sys モジュールからのコマンドの実行のみが許可される制限されたモードで実行されます。このモードは主に、help (sys:help) コマンドから使用可能なコマンドドキュメントへのアクセスを許可するためのものです。

1 つ以上の -e オプションが指定されている場合、指定されたコマンドは指定された順序で実行されます。elfedit は、指定されたコマンドの直後に write (sys:write) と quit (sys:quit) への暗黙の呼び出しを追加します。それにより、出力ファイルが書き込まれ、elfedit プロセスが終了します。シェルスクリプトやメイクファイルでは、この形式の使用が便利です。

-e オプションが指定されていない場合、elfedit標準入力からコマンドを読み取り、それらのコマンドを指定された順序で実行します。呼び出し側は、このモードで実行中に作業を保存して終了するには write (sys:write) コマンドと quit (sys:quit) コマンドを明示的に発行する必要があります。

終了ステータス

次の終了ステータスが返されます。

0

正常終了。

1

致命的なエラーが発生しました。

2

無効なコマンド行オプションが指定された。

使用例

次の例では、シェルプロンプト (%) と elfedit プロンプト (>) での elfedit の対話型使用が示されています。ユーザーは、これらのいずれの文字も入力しないでください。

例 1 実行可能ファイルの実行パスの変更

次の例では、共有可能オブジェクト用の lib ディレクトリが隣接する bin ディレクトリ内にインストールされた、prog という名前の実行可能ファイルを前提にしています。次のコマンドは、その実行可能ファイルの runpathlib ディレクトリに設定します。

elfedit -e 'dyn:runpath $ORIGIN/../lib'

-e オプションの引数での単一引用符の使用は、シェルがこのコマンド全体を elfedit に確実に 1 つの引数として渡すようにするために必要です。

あるいは、elfedit を非バッチモードで使用することによって、同じ操作を実行できます。

% elfedit prog
> dyn:runpath $ORIGIN/../lib
     index  tag         value
       [30]  RUNPATH     0x3e6      $ORIGIN/../lib
> write
> quit

runpath などの要素や、必要なエントリの追加または変更は、オブジェクト内にパディングが存在する場合にのみ実現できる可能性があります。「注意事項」を参照してください。

例 2 ハードウェア機能ビットの削除

実行のためにオプションハードウェアのサポートを必要とするオブジェクトは、必要な機能を指定したビットのマスクを含む機能セクションを使用して構築されます。実行時リンカー (ld.so.1) は、このマスクを実行中のシステムの属性に対してチェックして、現在のシステムが特定のオブジェクトを実行できるかどうかを判定します。そのシステム上で使用できない機能を必要とするプログラムは、実行を妨げられます。

このチェックによって、必要なハードウェアサポートを明示的にチェックしない不備なプログラムが紛らわしい方法でクラッシュすることが防止されます。ただし、記述されるプログラムが、実行時にシステムの機能を明示的にチェックすることは不便な場合があります。このようなプログラムは、ハードウェアでサポートされている場合に使用する最適化されたコードを備える一方、それ以外の場合は、より低速ではあっても実行可能な汎用のフォールバックバージョンを提供していることがあります。この場合は、ハードウェア互換性マスクによって、このようなプログラムの古いハードウェア上での実行が妨げられます。このような場合は、関連するビットをマスクから削除すると、そのプログラムを実行できます。

次の例では、SSE3 CPU 拡張機能を使用する x86 バイナリから AV_386_SSE3 ハードウェア機能を削除します。これにより、SSE3 を使用するための機能を検証する責任が、実行時リンカーからプログラム自体に移転されます。

elfedit -e 'cap:hw1 -and -cmp sse3' prog

例 3 オブジェクトからの情報の読み取り

elfedit を使用すると、対象を絞った特定の情報をオブジェクトから抽出できます。次のシェルコマンドは、ファイル /usr/bin/ls に含まれているセクションヘッダーの数を読み取ります。

% SHNUM=`elfedit -r -onum -e 'ehdr:e_shnum' /usr/bin/ls`
% echo $SHNUM
29

Solaris のバージョンや、使用しているマシンの種類に応じて、異なる値が取得されることがあります。-r オプションを指定すると、ファイルが読み取り専用で開かれるため、通常のアクセス権を持つユーザーはファイルを開くことができ、また重要なシステム実行可能ファイルが誤って破損されることが防止されます。num 出力形式は、無関係なテキストを含まない、目的の値のみを取得するために使用されます。

同様に、次のコマンドは、シンボル unlink のシンボルの型を C 実行時ライブラリから抽出します。

% TYPE=`elfedit -r -osimple -e 'sym:st_type unlink' \
      /lib/libc.so`
% echo $TYPE
STT_FUNC

例 4 実行可能ファイルの ASLR 設定の指定

実行可能ファイルのデフォルトのアドレス空間配置のランダム化 (ASLR) 動作は、DT_SUNW_ASLR 動的セクションエントリを使って指定します。次に、指定されたプログラムの ASLR を有効または無効にする方法を示します。

% elfedit prog
> dyn:sunw_aslr enable
     index  tag              value
      [40]  SUNW_ASLR       0x2           ENABLE
> dyn:sunw_aslr disable
     index  tag              value
      [40]  SUNW_ASLR       0x1           DISABLE

環境変数

ELFEDIT_PATH

デフォルトのモジュール検索パスを変更します。モジュール検索パスは、このマニュアルページの「モジュール検索パス」セクションで説明されています。

LD_NOEXEC_64

64 ビットの elfedit の自動実行を抑止します。デフォルトでは、64 ビットバージョンの elfedit は、システムが 64 ビットに対応している場合に実行されます。

PAGER

elfedit から画面への出力を対話的に提供します。設定されていない場合は、more が使用されます。more(1) を参照してください。

ファイル

/usr/lib/elfedit

編集コマンドを提供するために必要に応じてロードされる elfedit モジュールのデフォルトディレクトリ。

~/.teclarc

コマンド行編集のための個人用 tecla カスタマイズファイル。tecla(5) を参照してください。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
system/linker
インタフェースの安定性
確実

関連項目

dump(1), elfdump(1), ld.so.1(1), more(1), nm(1), pvs(1), sxadm(1M), elf(3ELF), libelf(3LIB), tecla(5), attributes(5)

『リンカーとライブラリ』

警告

elfedit は、ELF システムのテストおよび開発のためのツールとして設計されています。このツールでは、オブジェクト内のほぼすべての ELF メタデータの検査および変更のための機能が提供されます。無効な、または使用できない ELF ファイルを生成する可能性のある編集でも、何も出力せずに許可されます。ユーザーは、ELF の形式と、それを制御している規則や規約に関する知識を持っているものと想定されています。elfedit を使用する場合は、『リンカーとライブラリ』が役立ちます。

elfedit を使用すると、ユーザーはオブジェクト内の ELF メタデータを変更できますが、実際のプログラムのコードを理解したり、変更したりすることはできません。そのため、タイプ、サイズ、配置などの ELF 属性を、そのファイルの実際の内容に一致しない方法で設定すると、壊れていて、使用できない出力オブジェクトが生成される可能性があります。このような変更はリンカーコンポーネントのテストに役立つ場合がありますが、それ以外の場合は避けるようにしてください。

dyn:runpath コマンドを使用してオブジェクトの runpath を変更するなどの、より高いレベルの操作は安全であり、このセクションで詳細に説明している種類のリスクを冒すことなく実行できます。

注意事項

elfedit でサポートされているすべての ELF 操作を、すべての ELF オブジェクトに対して正常に実行できるわけではありません。elfedit は、ファイル内にある既存のセクションによって制約されます。

特に注意する点の 1 つは、elfedit が特定のオブジェクトの runpath を変更できない可能性があることです。runpath を変更するには、次の条件を満たしている必要があります。

古いオブジェクトには、このような操作を完了するために必要な追加の領域が存在しません。これに必要な領域は、Solaris Express Community Edition リリースで導入されました。

ある操作が失敗した場合は、-d (debug) オプションを使用して出力された詳細情報が、その原因を見つけるために非常に役立ちます。

elfedit モジュールは、ELF 構造内のフィールドを直接操作するコマンドはそのフィールドと同じ名前を持つが、より高いレベルの概念を実装するコマンドはそれに当てはまらないという規約に従っています。たとえば、ELF ヘッダー内の e_flags フィールドを操作するためのコマンドには ehdr:e_flags という名前が付けられています。そのため一般には、モジュールを識別し、ELF フィールドの名前を持つコマンドを探すことによって、そのフィールドを変更するためのコマンドが見つかります。