LPIC101 合格体験記

最近ブログをさぼっていてネタを考えていて、そういえば資格最近取れてないと思い、これからは資格試験をどんどん受けてブログに目標などを公言すれば自分のモチベーションアップに繋がると考えました。

 

今回はLPIC101を受けてきました。

受けた理由は、1年ぐらいLinuxを触ってきて自分がどれくらいできているのか物差しとして見たかったからです。

この試験を受けようと決めてから結局半年ぐらいはズルズル勉強してた気がします。

このズルズル期間を合わせると勉強期間は約10カ月。(長すぎる…)

102を同時に受けようと思いましたが、確実に取りたいと思い、分ける事にしました。

受験料が両方合わせて2万後半から3万かかるので落ちたら洒落にならん…

 

勉強に使用したもの

ping-t、小豆本、LPIC1問題集

 

勉強方法

まず小豆本を1周読んで、そのあとにping-tと問題集でひたすら問題を解きました。

問題を解きながら電車などで小豆本の2周目を読んで、より理解を深めました。

個人的に短期集中型で勉強したほうが良さそうだと感じました。

 

試験結果

あなたの得点 (Your Score)  540
必修合格点 (Required Passing Score)  500
結果 (Status)  Pass

少しギリギリ感はありますが、合格しました!

 

次の目標

101が受かっても、LPIC1は合格ではないので、1ヶ月後には102を受けて合格!

 

 

 

 

アセンブリ命令とレジスタ等の役割

*命令*
・mov dest, src
mov命令は、srcオペランドの値をdestオペランドに移動する
移動した後もsrcオペランドの値は残る
 
・lea dest, src
lea命令は、srcオペランドのアドレスを計算し、そのアドレスをdestオペレンドにロードする
lea eax,[esp+0x40]のように、変位などを含めたアドレス計算をする(この場合スタックポインタを指すアドレスから変位の0x40を加えた位置のアドレスが、eaxに格納される)
 
・xchg dest1, dest2
xchg命令は、arg1オペランドとarg2オペランドの値を交換する
 
・lodsb
lodsb命令は、[DS:ESI]のメモリの内容を、BYTE、すなわち1バイト分、ALレジスタに読み込む
読み込んだ後は、ESIレジスタを、DFレジスタに基づいて、読み込んだサイズ分、加算または減算する
lodsw命令は、WORDの2バイト分、AXレジスタに読み込む
lodsd命令は、DWORDの4バイト分、EAXレジスタに読み込む
メモリの値を決まったバイト数ずつ処理する場合に用いられ、文字列処理などでよく使う
 
・stosb
stosb命令は、lodsb命令の反対でALレジスタの値を、[ES:ESI]のメモリに書き込む
 
・push src
push命令はargオペランドの値をスタックにpushする(32bitでは4バイト、64bitでは8バイト)
ESPレジスタの値をレジスタ幅分(32bitでは4バイト、64bitでは8バイト)減算し、argオペランド
ESPレジスタの指すスタックのトップに格納する
 
・pop dest
スタックからargオペランドへpopする
ESPレジスタの指すスタックのトップの値をargオペランドへ格納し、ESPレジスタの値をレジスタ幅分(32bitでは4バイト、64bitでは8バイト)
加算する
 
・add dest, src     sub dest, src
add命令は、destオペランドにsrcオペランドを加算した結果を、destオペランドに格納する
sub命令はこの減算バージョン
 
・mul
mul命令は、srcオペランドにEAXレジスタの値を乗算し、結果の上位4バイトをEDXレジスタ、下位4バイトをEAXレジスタに格納する
 
・div src
div命令は、EDX:EAXの8バイトをsrcオペランドの値で除算し、商をEAXレジスタ、乗除をEDXレジスタに格納
 
・inc dest     dec dest
inc命令とdec命令は、それぞれ、destオペランドの値を1加算/減算する
 
・cmp src1, src2
cmp命令はsub命令と同じだが、結果はオペランドに格納されず、破棄される
目的は、フラグレジスタの値を条件によって変化させること
 
shr/shl dest, count
shl命令とshrの命令は、destオペランドをcountオペランドで指定したビット数分、それぞれを左、右にビットシフトする
結果はdestオペランドへ格納される
 
ror/rol dest, count
ror命令およびrol命令は、destオペランドをcountオペランドで指定したビット数分、ローテートさせる
結果は結果はdestオペランドに格納される
 
・xor dest, src
xor命令は、destオペランドとsrcオペランド排他的論理和を、destオペランドに格納される
レジスタを0で初期化する際によく使われる
 
・test src1,src2
test命令は、src1オペランドとsrc2オペランド論理積をとる
cmp命令と同じく、結果は破棄され、フラグレジスタの変化が主な目的
 
・jmp arg
jmp命令は実行をargオペランドへ分岐させる
フラグレジスタを参照して、条件が満たされた時のみ分岐する条件分岐命令もある
JE命令(Jump if equal)     JZ命令(Jump if zero):ZF=1の時に分岐
JNE命令(Jump in not equal)     JNZ命令(Jump if not zero):ZF=0の時に分岐
JG命令(Jump if greater):ZF=0かつSF=OFの時に分岐
JL命令(Jump if less):SF<>OFの時に分岐
 
・ret命令
callと対になる命令で、callされた関数の終わりに、call元の次のアドレスへと実行を戻すための命令
 
・call arg
call命令は、jmp命令と同様に、実行をargオペランドへと分岐させる
ret命令で戻ってこれるようにcall命令の次の命令のアドレスを、戻り先のアドレスとしてスタックに保存する
 
・leave
leave命令は、データ転送命令だが、ret命令とセットで使われることが多い
この命令は、関数の最後、ret命令の前に呼び出され、スタックポインタをベースポインタと同じ位置に戻し、
スタック上に保存していた呼び出し元の関数のスタックフレームでのベースポインタを復元する
つまり、mov esp, ebp;pop ebpと同じ動作をする
 
 
・EAX(アキュムレータレジスタ):演算の結果を格納する
・ECX(カウンタレジスタ):ループの回数などのカウントを格納する
・EDX(データレジスタ):演算に用いるデータを格納する
・EBX(ベースレジスタ):アドレスのベース値を格納する
・ESI(ソースインデックスレジスタ):一部のデータ転送命令において、データの送信元を格納する
・EDI(デスティネーションインデックスレジスタ):一部のデータ転送命令において、データの転送先を格納する
 
EBP(ベースポインタレジスタ):現在のスタックフレームにおける底のアドレスを保持する(ベースポインタともいう)
・ESP(スタックポインタレジスタ):現在のスタックトップのアドレスを保持する(スタックポインタともいう)
・EIP(インストラクションポインタレジスタ):次に実行するアセンブリ命令のアドレスを保持する(命令ポインタともいう)
 
*フラグ*
・CF(キャリーフラグ):演算命令でキャリー(桁上がり)かボロー(桁借り)が発生した時にセットされる
・ZF(ゼロフラグ):操作の結果が0になった場合にセットされる
・SF(符号フラグ):操作の結果が負となった場合にセットされる
・DF(方向フラグ):ストリームの方向を制御する
・OF(オーバーフローフラグ):符号付き算術演算の結果がレジスタの格納可能範囲を超えた場合にセットされる
 
*レグメントレジスタ
・CS(コードセグメントレジスタ):コードセグメントのアドレスを格納する
・DS(データセグメントレジスタ):データセグメントのアドレスを格納する
・SS(スタックセグメントレジスタ):スタックセグメントのアドレスを格納する
・ES(エクストラセグメントレジスタ):エクストラセグメントの(追加セグメント)のアドレスを格納する
・FS(Fセグメントレジスタ):Fセグメント(2つめの追加セグメント)のアドレスを格納する
・GS(Gセグメントレジスタ):Gセグメント(3つめの追加セグメント)のアドレスを格納する
 
・DWORD PTR
     これは対象の値(やレジスタ)を何バイトとして扱うか、ということを修飾する
     DWORDは4バイト、WORDは2バイト、BYTEは1バイト
     レジスタは何バイトなのか明示する必要がある
 
・callしたら次の命令の番地をスタックに積んで戻るべき場所を記録しておく
 
・plt(プログラムリンケージテーブル)とは、共有ライブラリから呼び出される個々の関数は、それぞれのエントリをPLTに持っていて、静的にリンクされるので直接呼び出される

CiscoのRouterとSwitchを使用したVlan間ルーティング

今回はネットワークの知識と技術が皆無な中で、少しでもネットワーク分野の知識と技術を伸ばそうとして、この実機を使った勉強をしようと思ったのがきっかけ。

 

しかしながら、8割以上が後輩の助けのお陰なので、これからはしっかりと自分の力でやって行きたいと言う気持ち。

 

ggってggってやっと1つ解決できたと思ったら、また1つの壁にぶつかっての繰り返しだった。

 

これからは色々なルーティングプロトコルOSPFやRIPなどを使ってもっとネットワークの知識と技術を磨いて行きたい。

 

ルーターを介したwin機間のpingなどの疎通確認をする時は、windowsfirewallの設定を全て無効にしないと通らない

 

wgetとcurlの違い

wget・・・ファイルをダウンロードするコマンドで、curlと違い再帰的にファイルをダウンロードできるのが特徴。対応しているプロトコルはHTTP・HTTPSFTPのみ。

curl・・・wgetと異なり対応しているプロトコルは、FTP、FTPS、Gopher、HTTP、SCP、TFTP、TELNET、DICT(サーバから辞書を引くためのプロトコル)、LDAP、LDAPS、FILE、POP3IMAP、SMB/CIFS、SMTPRTMP、RTSPがあり、様々なプロトコルに対応しているのがwgetと大きな違い。

セッションとクッキーの違い

セッションは、リクエストとそのリクエストした主を結びつける仕組み。セッションを実装するためには、Session IDの受け渡しをする必要があり、このSession IDは識別子の事。このSession IDをキーとして、サーバー側に色々な情報を保存させる。さらに、クライアントとサーバ間のSession IDの受け渡しを実装するのがクッキー。

 

クッキーとは、サーバからクライアントに対して書き込める小さなテキストで、クライアントの情報を維持できる仕組みで、クッキーはクライアント側に全ての情報を保存させるのでユーザーが改変可能である。

クライアントはサーバにアクセスする際に、Session IDをヘッダ情報としてサーバーへ送信することで、クライアントは自身のセッション情報を参照する事ができる。