vim で挿入モードのときに hjkl でカーソルを移動する
vim でコードを書いているときに、() や [] を打つときに手間取ることが多かった。
flash[:success] = "Welcome to the Sample App!"
例えば↑のような文において[:success]の部分を書くとき、以下の手順で入力していた。
1. [] を書く
2. Esc を押して挿入モードからコマンドモードに戻る
3. h で左に移動する
4. i を押して挿入モードに戻る
5. :success を入力
面倒だったので、挿入モードの状態で hjkl でカーソル移動したかった。
~/.vimrc に以下を書いて解決。
inoremap ^H ^[ha inoremap ^L ^[la
挿入モード時に ctrl+h で、左に移動、ctrl+l で右に移動することができる(上下は使うことが少ないので省略している)。
その結果、以下のように変わった。
1. [] を書く
2. ctrl + h で左に移動
3. :success を書く
大幅な改善!!
まぁ、[を書いたら]も書いてくれて、しかも[と]の間にカーソルが移動するようにもできるんだけど、そこまでやる気が起きなかったので。
inoremap とかの意味のまとめについては以下を参照。
http://vimblog.hatenablog.com/entry/vimrc_key_mapping
制御文字の入力方法に関しては以下を参照。
https://www.pistolfly.com/weblog/2011/11/post-134.html
ksnctf 35 Simple Auth II に挑戦
問題は以下
ksnctf - 35 Simple Auth II
とりあえず、SQL インジェクション(最近名前覚えたばかり)なのかなと思ってググってみるが、仮に実際 SQL インジェクションの問題だとしても、解き方が載っているサイトとか全然うまくみつけられない。。。
" とかそういう文字列とかを id/password に打ち込んでみても、ダメダメダメ・・・。
で、諦めて解答を調べてると以下の知恵袋が見つかった。
このCTF問題ლ(╹◡╹ლ)のヒントを教えてください。現在PHPについて勉強中で... - Yahoo!知恵袋
が、ダウンロード?どこから?という感じでさっぱりわからないでずっと悩んでいた・・・
さて解答方法ですが、↑(source から抜粋)の sqlite:database.db の database.db って、相対パスなんですね。
だから、source の url (http://ksnctf.sweetduet.info/q/35/auth.php) の auth.php の部分を database.db に変えたものが、database.db のパスになるってことです。
これでダウンロードができる!!!
ダウンロードして、ローカルに database.db という名前で置いておく。
あとは、sqlite3 とやらの使い方をネットでググり、ごにょごにゅすれば、FLAG ゲット!!
$sqlite3 database.db sqlite> select * from user; // これは、source に書いてある命令を使っている
C言語ポインタ完全制覇、読了(ポインタの概念がわかる良著)
- 作者: 前橋和弥
- 出版社/メーカー: 技術評論社
- 発売日: 2001/01
- メディア: 単行本
- 購入: 22人 クリック: 147回
- この商品を含むブログ (75件) を見る
↑の本を読んだので感想等。
[なぜ読んだか]
体系的に一度もポインタについて学んでいなかったので、そろそろしっかり学んでおくかという気になった。
[私のポインタに対する理解(読む前)]
会社ではC言語を使って開発をしている。
さすがにもう2年以上C言語を使っているので、ポインタの使い方くらいは理解できている、という感じ。
(研修で初めてポインタに触れたときも、実はあんまりポインタに苦しめられた覚えはない。)
[本の感想]
だいたい知っていることが書かれていたが、C言語はメモリをどう確保するのか、という点については初めて知れたので良かった。
どのタイミングでどこに(スタック or ヒープ)メモリを確保して、いつまで保持しておくのかなど、普通に使っているだけではわからないことなので、テストコードと共に解説がしっかり書いてあるのは本当にありがたかった。
メモリ管理=内部で勝手に行われてること=ブラックボックス、みたいに捉えているのはもったいないので、この本を読んで克服しましょう。せっかくの C 言語なんだし。
この本を読むことで、自信を持って他人にポインタの使い方や仕組み?を教えてあげられるようになると思う。
なお、いろいろなところで書かれているが、初心者がいきなり読むにはきつい。
きついというか、つまらないと思う。
[面白かったこと]
以下のコードを見ていただきたい。
#include <stdio.h> int main (void) { int array[4] = {0, 1, 2, 3}; printf("array[3] = %d\n", array[3]); // 当然 array[3] は 3 printf("array[3] = %d\n", 3[array]); // じゃあこれは??? return 0; }
どちらも同じ出力になるんですねこれが。
hoge[i] という書き方は、シンタックスシュガーと呼ばれ、コンパイラは *(hoge+i) に展開してしまうそう。
なので、一見意味不明な i[hoge] という書き方でも警告は出ないし、ましてやエラーにもならないんですね。
これは面白い。
完全初心者がCTFに挑戦(ksnctf 3 Crawling Chaos に苦戦)
CTF に初挑戦した。
最初に取り組んだ問題は、以下
ksnctf - 3 Crawling Chaos
が、全くの初心者なので、自力で解くことはもちろん、解説をいろいろと読んでみてもやり方がよくわからなかった。
結局数時間かけてクリアしたが、ここに解決法を詳細に記しておく。
なお、使用しているブラウザは chrome
①とりあえずリンク先に飛んでみる。
http://ksnctf.sweetduet.info/q/3/unya.html
にアクセスしてみる。
②画面にはボックスと送信のボタンしかないので、とりあえずソースを見る。
mac では option+command+i (windows では F12らしい)を押す。
すると、いかにもエンジニアっぽい画面が出てくる(google developer console)。
③怪しい箇所っぽいところに注目
12行目を見てみると、なにやら怪しい長ーい一行がある。
意味の無い文章がこんなところにあるはずがない&ところどころに","とか":"とかあって意味がありそう。
④console.log に出してみる。
ここが、初心者にはどうやっていいのか分からず困ったところだ。
まず、↑の画像の全行を、メモ帳に貼り付けて hoge.html といった名前で保存する。
次に、その hoge.html をchrome で開く。先ほどの方法で、developer console を呼び出す。
やってみればわかるのだが、今度はソースコードをいじれるようになっている(ローカルにコピーした、自分のファイルなので)。
ということで、ソースコードに修正を加え、この長い12行目の秘密を探ってみることにする。
↓の画像のように、console.log() で 12 行目をくくってしまってから、このページをリロードすると、console の部分に赤文字でぞろぞろと出てくる。
この下の方の部分を読みやすく整形すると以下みたいな感じに。
$(function(){ $("form").submit(function(){ var t=$('input[type="text"]').val(); var p=Array(70,152,195,284,475,612,791,896,810,850,737,1332,1469,1120,1470,832,1785,2196,1520,1480,1449); var f=false; if(p.length==t.length){ f=true; for(var i=0;i<p.length;i++) { if(t.charCodeAt(i)*(i+1)!=p[i]) { f=false; } } if(f) { alert("(」・ω・)」うー!(/・ω・)/にゃー!"); } if(!f) { alert("No"); } return false; }); });
⑤ FLAGを見つける
↑のコードを見ると、array の要素一つ一つに対して、正解の文字コードが存在するみたいだ。
なので、C言語でそれを解くコードを書いてみた。
#include <stdio.h> int main (void) { #include <stdio.h> int main (void) { int i; int array[] = {70,152,195,284,475,612,791,896,810,850,737,1332,1469,1120, 1470,832,1785,2196,1520,1480,1449}; for ( i = 0; i < sizeof(array) / sizeof(int); i++ ) { char c; c = array[i] / ( i + 1); printf("%c", c); } printf("\n"); return 0; } ||>
Mac に VirtualBox と Ubuntu を導入
本日行ったこと
- VirtualBox インストール
- VirtualBox 上で Ubuntu 起動
- Ubuntu かるーくいじってみた
1. VirtualBox インストール
2. VirtualBox 上で Ubuntu 起動
以下の 2 つを参考に、導入。
MacのVirtualBoxにLinuxのUbuntuをインストールする方法 / Inforati
Linuxmania: VirtualBoxを使おう (Ubuntu)
家の通信速度のせいか、iso イメージをダウンロードするのに20分くらいかかった気がする。
特に問題なく導入完了。
3. Ubuntu かるーくいじってみた
感想としては、思ったよりいろいろ最初から入っているなーという感じ。
firefox, LibreOffice(無料版 Office ソフト), GUI のVim などなど。
とりあえず、端末の起動方法が分からなかったので、調べて起動してみた。
Ubuntu 14.04:「端末(ターミナル)」を起動する方法
とりあえず初日はここまで。
たいしたことしてないのに、わりと時間がかかってしまった・・・。
技術者として勉強を始めることにした。
文系国立大学を卒業してはや 2 年。
もうプログラマとして働き出して 3 年目になる。
しかし、ほとんど技術力が身に付いている気がしない。
このままだと、市場価値のない、学歴だけが取り柄の人材ができあがってしまう。
それはまずい。
自主的に勉強していかなければならない。
入社 3 年目でようやくこのような意識を持てた。
スタートダッシュはできなかったが、これから少しでも遅れを取り戻して成長していこう。
このブログでは、取り組んだことを備忘録的にまとめていく。
技術以外のことも書くかもしれないが、それは気分次第で。