トップ «前の日記(2015-01-28(Wed)) 最新 次の日記(2015-01-30(Fri))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2015-01-29(Thu) なんか曇って寒い

glibc自体が実行形式だった

当然といえば当然なのだろうけど。
脆弱性対応確認。

$ ldd /bin/true
        linux-vdso.so.1 =>  (0x00007fff74db7000)
        libc.so.6 => \
  /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5fdcd56000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5fdd0ee000)
 
$ ls -l /lib/x86_64-linux-gnu/libc.so.6 
lrwxrwxrwx 1 root root 12  1月 27 09:25 \
 /lib/x86_64-linux-gnu/libc.so.6 -> libc-2.13.so
$ ls -l /lib/x86_64-linux-gnu/libc-2.13.so 
-rwxr-xr-x 1 root root 1603600  1月 27 09:25 \
 /lib/x86_64-linux-gnu/libc-2.13.so
 
$ file /lib/x86_64-linux-gnu/libc-2.13.so 
/lib/x86_64-linux-gnu/libc-2.13.so: \
ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), \
dynamically linked (uses shared libs), \
BuildID[sha1]=0xf6ad460540e2095396694c47abfe546be9fe4956, \
for GNU/Linux 2.6.26, stripped
 
$ /lib/x86_64-linux-gnu/libc-2.13.so 
GNU C Library (Debian EGLIBC 2.13-38+deb7u7) stable \
 release version 2.13, by Roland McGrath et al.
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.4.7.
Compiled on a Linux 3.2.65 system on 2015-01-26.
Available extensions:
        crypt add-on version 2.1 by Michael Glad and others
        GNU Libidn by Simon Josefsson
        Native POSIX Threads Library by Ulrich Drepper et al
        BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.

例えばtrue(1), false(1)

FreeBSD 11-CURRENT r277866。

[$USER@$HOST /usr/src/usr.bin/true]$ wc -l true.c
      46 true.c
[$USER@$HOST /usr/src/usr.bin/false]$ wc -l false.c
      46 false.c

30行ほどは著作権表示、10行ほどが内部への著作権情報 埋め込み、肝心の処理は5行ほど。

int
main(void)
{
        return 0; /* false(1)なら1 */
}

GNU Coreutils-8.23の場合、

$ wc -l true.c false.c
  80 true.c
   2 false.c
  82 合計

true.c は15行ほどのライセンス表示に Usageに18行ほど、残りが実際の処理部分。
実のところ、どこがどうなってるのか、 あまりよくわからなかったり。
false.c は

$ cat false.c 
#define EXIT_STATUS EXIT_FAILURE
#include "true.c"

s/gets/fgets/

例によって難バカ。
gcc に文句を言われる関数を一つ(2ヶ所)ようやく 削除
ついでに入出力するファイルの長さをUnixに合わせる(255バイト)。
gets(3)からfgets(3)への書き換えについて 参考になったサイト。

もっともgcc -Wall やられると、まだまだ エラーでまくりだったりする。

main()の頭にint をつけ、それから get_opt1()にreturn 0 を加えた。
最初と最後のエラーだけは出なくなった。


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。