【メモリアル】googleリーダ、サービスが終わってしまうようです。
【原文】

【google日本語翻訳】

【ノムリッシュ変換】


(´;ω;`)


【原文】

【google日本語翻訳】

【ノムリッシュ変換】


(´;ω;`)
1.作成したfunction(関数)を窓で動かす。には登録が必要。登録とは。
env で設定されいてる「環境変数」がわかる。
root@debian:/tmp# env
TERM=xterm
SHELL=/bin/bash
:中略
SSH_TTY=/dev/pts/0
USER=root
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/tmp
LANG=ja_JP.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
:後略
root@debian:/tmp#
set で設定されている「シェル変数とか」がわかる。
root@debian:/tmp# set > result
root@debian:/tmp# cat result | wc -l
5866
root@debian:/tmp#
5866行も定義されてる。
見る。
root@debian:/tmp# set
:前略。以下のように変数や、
HOME=/root
HOSTNAME=debian
HOSTTYPE=i486
IFS=$’ \t\n’
LANG=ja_JP.UTF-8
LINES=32
:中略。以下のように関数も定義されてる。ここに関数を追加するイメージ。
quote ()
{
echo '${1//'/'\''}'
}
:後略
では登録する。
少し前のシェルと違うのは関数定義だけってとこ。
root@debian:/tmp# cat HexToNum.sh
#!/bin/bash
function HexToNum {
local I=0
local OFS=0
local let SSS=`expr ${#1} + 0`
RET=”“
RETURN=”“
for (( I=0; I<$SSS; ))
do
RET=`echo ${1:$OFS:2}`
case $RET in
“30”|”31”|”32”|”33”|”34”|”35”|”36”|”37”|”38”|”39” )
WK=`expr $RET - “30”`
RETURN=$RETURN$WK ;;
* ) ;;
#break
esac
OFS=$(( $OFS + 2))
I=$(( $I + 2))
done
echo $RETURN
}
root@debian:/tmp# #以下で登録source ファイル名
root@debian:/tmp# source HexToNum.sh
root@debian:/tmp# set | grep HexToNum
HexToNum ()
root@debian:/tmp# #以下のようにコマンドチックに使える。
root@debian:/tmp# HexToNum 30323334
0234
root@debian:/tmp#
【補足】どのような順番でスタートアップ的な作業が行われるかは
http://www.hpc.cs.ehime-u.ac.jp/~aman/linux/bash/customize.html
の頁に詳しく書いてあった。ここ(スタータップ)に登録しとけば…いいのに。
以上。༼ԾɷԾ༽捗った。
なんか違う気がする。
ある文字列がある。 “30316536”
‘0’ と ‘1’ と ‘A’ と’6’ の16進数である。
このうち、文字としての数字のみを抜き出したい。’A’のように’0’-‘9’以外が出現したら、そこで終了する。
但し、”2E”については、’.’(ピリオド)で置き換える。
引数が奇数の場合は余ったものは意識しない。
試した。
なんか違う。他に方法は無いのか。
root@debian:/tmp#
root@debian:/tmp# date
2013年 2月 24日 日曜日 04:57:13 JST
root@debian:/tmp# cat ooo.txt
#期待値 01
30316536
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #実行する
root@debian:/tmp#
root@debian:/tmp# ./a.sh `cat ooo.txt | grep -v “^#”`
01
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# cat vvv.txt
#期待値 01.87
30312E38377
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #実行する
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# ./a.sh `cat vvv.txt | grep -v “^#”`
01.87
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #内容
root@debian:/tmp#
root@debian:/tmp# cat a.sh
#!/bin/bash
function HexToAscii {
local I=0
local OFS=0
local let SSS=`expr ${#1} + 0`
RET=”“
RETURN=”“
for (( I=0; I<$SSS; ))
do
RET=`echo ${1:$OFS:2}`
case $RET in
“30”|”31”|”32”|”33”|”34”|”35”|”36”|”37”|”38”|”39” )
WK=`expr $RET - “30”`
RETURN=$RETURN$WK ;;
“2E” )
RETURN=${RETURN}’.’ ;;
* )
break ;;
esac
OFS=$(( $OFS + 2))
I=$(( $I + 2))
done
echo $RETURN
}
#main
if [ $# != 1 ]
then
exit 1
fi
# EEE=`HexToAscii $1`
echo `HexToAscii $1`
root@debian:/tmp#
root@debian:/tmp# date
2013年 2月 24日 日曜日 04:58:00 JST
root@debian:/tmp#
root@debian:/tmp# #絶対何か違う気がする..
root@debian:/tmp#
以上。_(:3ゝ∠)_
:中略
4005F6564617461005F5F693638362E6765745F70635F7468756E6B2E6278006D61696E005F696E697400root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #凄いでたので、ファイルに。
root@debian:/tmp#
root@debian:/tmp# od -tx1 a.out | tr “[a-z]” “[A-Z]” | nawk ‘{ print $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17}’ | tr -d “\n” > result.txt
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# ls -la /tmp/result.txt
-rw-r—r— 1 root root 14386 2013-02-22 02:56 /tmp/result.txt
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# od -tx1 a.out | tr “[a-z]” “[A-Z]” | nawk ‘{ print $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17}’ | head -n 1
7F454C46010101000000000000000000
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #先頭みてあってるか確認しろ。
root@debian:/tmp#
root@debian:/tmp# #このまどで処理したいので、変数に入れる。
root@debian:/tmp#
root@debian:/tmp# SS=`cat /tmp/result.txt `
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #32文字(16バイト)だけ見る。
root@debian:/tmp#
root@debian:/tmp# echo ${SS:0:32}
7F454C46010101000000000000000000
root@debian:/tmp#
root@debian:/tmp# #一致
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #文字のマッチングはawkが便利そう。
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #awkのindexにてキーワードの先頭からのオフセットを見る。
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# echo $SS | awk ‘{print index($1,”646F6C6D656E313233”)}’
3265
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #という値がでた。これを-1すればいいのに。
root@debian:/tmp#
root@debian:/tmp# echo ${SS:3265:10}
46F6C6D656
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# echo ${SS:3264:18}
646F6C6D656E313233
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #キーワード 0x646F6C6D656E313233 (“dolmen123”)と一致
root@debian:/tmp#
root@debian:/tmp# #オフセットはawkの結果から判断する。
root@debian:/tmp# date
2013年 2月 22日 金曜日 03:04:15 JST
root@debian:/tmp#
————-
以上。_(:3ゝ∠)_
・ ・
[
o・o
マ dolmen123GCC: (Debian 4.4.5-8) 4.4.5bXルmainTル@モ0チ ヤテ6int
oo「ク-i UZ# # r# ヲ#
・ G# a# \ テ#$ #( ) #, i”ァ#0 $ュ#4 ム&Z#8 *Z#< ,z#@ 。0>#D エ1L#F ・ウ#G テ#H ?
#L >H#T EI#X LJ#\ SK#` ZL%#d NZ#h
?
・
・
(5・ア・クp
タヨ鋺% 4 HOUgイソフZワ・・・b#・
crtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.5982dtor_idx.5984frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxnoho.cversion_GLOBAL_OFFSET_TABLE___init_array_end__init_array_start_DYNAMICdata_start__libc_csu_fini_start__gmon_start___Jv_RegisterClasses_fp_hw_finimemset@@GLIBC_2.0__libc_start_main@@GLIBC_2.0_IO_stdin_used__data_startstderr@@GLIBC_2.0__dso_handle__DTOR_END____libc_csu_initfprintf@@GLIBC_2.0__bss_start_end_edata__i686.get_pc_thunk.bxmain_initroot@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #一応dolmen123のリテラルは発見できるが..
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #ここでテキスト化して確認する
root@debian:/tmp#
root@debian:/tmp# #
root@debian:/tmp# # 使うコマンド
root@debian:/tmp# # bash , awk , od , tr , echo , パイプ とか
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #まず、エンディアンを確認する。パソコンなのでリトルエンディア ンのはず。
root@debian:/tmp#
root@debian:/tmp# echo “0123456789ABCDEF”
0123456789ABCDEF
root@debian:/tmp# echo “0123456789ABCDEF” | od -x
0000000 3130 3332 3534 3736 3938 4241 4443 4645
0000020 000a
0000021
root@debian:/tmp# #逆転してるので、見られる形に編集
root@debian:/tmp#
root@debian:/tmp# echo “0123456789ABCDEF” | od -tx1
0000000 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46
0000020 0a
0000021
root@debian:/tmp# #小文字aとかうざいので大文字に
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# echo “0123456789ABCDEF” | od -tx1 |tr “[a-z]” “[A-Z]”
0000000 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46
0000020 0A
0000021
root@debian:/tmp#
root@debian:/tmp# #複数行だとロジックが面倒いので1行に
root@debian:/tmp#
root@debian:/tmp# echo “0123456789ABCDEF” | tr “[a-z]” “[A-Z]” | nawk ‘{ print
$2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17}’
root@debian:/tmp#
root@debian:/tmp# echo “0123456789ABCDEF” | od -tx1 | tr “[a-z]” “[A-Z]” | nawk
’{ print $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17}’
30313233343536373839414243444546
0A
root@debian:/tmp# echo “0123456789ABCDEF” | od -tx1 | tr “[a-z]” “[A-Z]” | nawk ‘{ print $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17}’ | tr -d “\n”
303132333435363738394142434445460Aroot@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #これをa.outに適用する。
root@debian:/tmp#
root@debian:/tmp# od -tx1 a.out | tr “[a-z]” “[A-Z]” | nawk ‘{ print $2 $3 $4 $5
$6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17}’ | tr -d “\n”
7F454C4601010100000000000000000002000300010000007083040834000000600F00000000000034002000070028002600230006000000340000003480040834800408E0000000E000000005000000040000000300000014010000148104081481040813000000130000000400000001
bashとawkでバイナリの中を捜す。
お試しで作った。
————-
なんかバイナリをDebian上で見る。 あるキーワードの文字列があるか、捜す。 そのバイナリにおいて0から始まる位置をもとめ、 そこから9バイト取り出し、HEX表示でみたい。
https://twitter.com/dolmen777/status/304630828472860672
https://twitter.com/dolmen777/status/304631423149682688
https://twitter.com/dolmen777/status/304631852260544514
https://twitter.com/dolmen777/status/304633856286404609
————-
キーワドは 0x646F6C6D656E313233 (“dolmen123”)
————-
あるロードモジュールa.outにリテラルが入っている。
0003160 64 6f 6c 6d 65 6e 31 32 33 00 00 00 47 43 43 3a
d o l m e n 1 2 3 \0 \0 \0 G C C :
0003200 20 28 44 65 62 69 61 6e 20 34 2e 34 2e 35 2d 38
————-
以下オペレーションなど。
root@debian:/tmp# date
2013年 2月 22日 金曜日 02:48:57 JST
root@debian:/tmp# cat noho.c
#include <stdio.h>
#include <string.h>
static char version[]=”dolmen123”;
void main()
{
char aaa[20];
int i=123;
char *bb;
bb = &aaa[0];
memset((void *)bb,(int)0x33,(size_t)(sizeof(aaa) -1));
aaa[19]=0x00;
fprintf(stderr,”neru![%d][%s]\t\n”,i,bb);
}
root@debian:/tmp#
root@debian:/tmp# !gcc
gcc -g noho.c
root@debian:/tmp# ls -la a.out
-rwxr-xr-x 1 root root 7225 2013-02-22 02:49 a.out
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# gdb a.out
GNU gdb (GDB) 7.0.1-debian
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type “show copying”
and “show warranty” for details.
This GDB was configured as “i486-linux-gnu”.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>…
Reading symbols from /tmp/a.out…done.
(gdb) list
1 #include <stdio.h>
2 #include <string.h>
3 static char version[]=”dolmen123”;
4 void main()
5 {
6 char aaa[20];
7 int i=123;
8 char *bb;
9 bb = &aaa[0];
10
(gdb)
11 memset((void *)bb,(int)0x33,(size_t)(sizeof(aaa) -1));
12 aaa[19]=0x00;
13
14 fprintf(stderr,”neru![%d][%s]\t\n”,i,bb);
15 }
(gdb) b 14
Breakpoint 1 at 0x804845e: file noho.c, line 14.
(gdb) run
Starting program: /tmp/a.out
Breakpoint 1, main () at noho.c:14
14 fprintf(stderr,”neru![%d][%s]\t\n”,i,bb);
(gdb) n
neru![123][3333333333333333333]
15 }
(gdb) c
Continuing.
Program exited with code 041.
(gdb) quit
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# #cat でみても崩れちゃってて正確な位置はわからない。アヘアヘ文 字になっている。
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp#
root@debian:/tmp# cat a.out
ELF4`4 (&ddd$xミミ(DDQ蚯d/lib/ld-linux.so.2GNUGNURB>氿 mW87・Rタタ “ャK翅9・
)?70__gmon_start__libc.so.6_IO_stdin_usedmemsetstderrfprintf__libc_start_mainGLIBC_2.0QU 藉・[テT
・メt韋湜鏐[ノテ5%%h鰲%鰔%h鯊%h魏1偂 砌TRQVD$U9リr霪D$,ヌDヌD$3S・?サ・ヌ$ミノDU 裝0ヌD$({
D$, $鞳ニD$’コ。|
L$, L$
L$( L$ T$ $靼ノDU )ヌチt$1Oa・3
E D$
E
D$
E $?ニ9r?ト[^_]E$DU 藉・・tサf・ミ
・u[]DU 藉・[テ鐔Y[ノテneru![%d][%s]
・
気になったので、お試し
———————————————
https://twitter.com/dolmen777/status/303524529119043586
https://twitter.com/dolmen777/status/303525943115403265
https://twitter.com/dolmen777/status/303539625929097217
https://twitter.com/dolmen777/status/303539791717343232
https://twitter.com/dolmen777/status/303539991244587008
https://twitter.com/dolmen777/status/303540471521742848
———————————————
上記twitterの抜粋
① 普通? basename /tmp/aaa/bbb/ccc/ddd.txt
② メンテ大変 echo /tmp/aaa/bbb/ccc/ddd.txt | awk ‘BEGIN {FS=”/”;} {print $NF}’
③強引? SS=`echo /tmp/aaa/bbb/ccc/ddd.txt `;echo ${SS##*/} とちょっと思いつくだけでも色々ある。①②③のうち、コスト的に一番良いのはどれでしょうか?
———————————————
やってみますた。
bashシェル中で10000回実施。timeで計測。
ichi ni san のシェル。
<追記start>
root@debian:/home# date
2013年 2月 19日 火曜日 01:57:14 JST
root@debian:/home# basename /tmp/aaa/bbb/ccc/ddd.txt
ddd.txt
root@debian:/home# echo /tmp/aaa/bbb/ccc/ddd.txt | awk ‘BEGIN {FS=”/”;} {print $NF}’
ddd.txt
root@debian:/home# SS=`echo /tmp/aaa/bbb/ccc/ddd.txt `;echo ${SS##*/}
ddd.txt
root@debian:/home# date
2013年 2月 19日 火曜日 01:57:37 JST
root@debian:/home# #一応でるからねw
root@debian:/home#
<追記end>
数回やりましたが、③が早かった。理由は追って調べましょう。
———————————————
root@debian:/home# !mp
mpstat
Linux 2.6.32-5-686 (debian) 2013年02月19日 _i686_ (3 CPU)
01時43分47秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01時43分47秒 all 0.23 0.05 1.13 0.79 0.03 0.00 0.00 0.00 97.77
root@debian:/home#
root@debian:/home#
root@debian:/home# !cat
cat ichi
#!/bin/bash
CNT=0
DMAX=10000
#DMAX=3
while [ 1 ]
do
basename /tmp/aaa/bbb/ccc/ddd.txt 1> /dev/null 2>&1
#echo /tmp/aaa/bbb/ccc/ddd.txt | awk ‘BEGIN {FS=”/”;} {print $NF}’ 1> /dev/null 2>&1
#SS=`echo /tmp/aaa/bbb/ccc/ddd.txt `;echo ${SS##*/} 1> /dev/null 2>&1
CNT=`expr $CNT + 1`
if [ $CNT -ge $DMAX ]
then
break
fi
#sleep 1
done
root@debian:/home#
root@debian:/home#
root@debian:/home# diff ichi ni
7,8c7,8
< basename /tmp/aaa/bbb/ccc/ddd.txt 1> /dev/null 2>&1
< #echo /tmp/aaa/bbb/ccc/ddd.txt | awk ‘BEGIN {FS=”/”;} {print $NF}’ 1> /dev/null 2>&1
—-
> #basename /tmp/aaa/bbb/ccc/ddd.txt 1> /dev/null 2>&1
> echo /tmp/aaa/bbb/ccc/ddd.txt | awk ‘BEGIN {FS=”/”;} {print $NF}’ 1> /dev/null 2>&1
root@debian:/home#
root@debian:/home# diff ichi san
7c7
< basename /tmp/aaa/bbb/ccc/ddd.txt 1> /dev/null 2>&1
—-
> #basename /tmp/aaa/bbb/ccc/ddd.txt 1> /dev/null 2>&1
9c9
< #SS=`echo /tmp/aaa/bbb/ccc/ddd.txt `;echo ${SS##*/} 1> /dev/null 2>&1
—-
> SS=`echo /tmp/aaa/bbb/ccc/ddd.txt `;echo ${SS##*/} 1> /dev/null 2>&1
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home#
root@debian:/home# time . ./ichi
real 0m25.369s
user 0m4.344s
sys 0m6.004s
root@debian:/home#
root@debian:/home#
root@debian:/home# time . ./ni
real 0m28.954s
user 0m8.133s
sys 0m7.776s
root@debian:/home#
root@debian:/home# time . ./san
real 0m22.610s
user 0m2.368s
sys 0m5.808s
root@debian:/home# date
2013年 2月 19日 火曜日 01:45:46 JST
root@debian:/home#
以上。
レンズ越しに何か見えてたのかもな(笑)