IT分からんわ~_~;

IT色々お勉強中のブログ

mac mojaveでgdbが動かない、、

gdbのバージョンが新しいと動かないらしいんでバージョン下げた

brew unlink gdb
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb

brew pin gdb

HighSierra以降は以下設定が必要

 echo "set startup-with-shell off" >> ~/.gdbinit

rcmdnk.com

このgdb32bitしか動かん奴やん、、、

(gdb) run
Starting program:
No executable file specified.
Use the "file" or "exec-file" command.

stackoverflow.com

file、stringsコマンド、gdb動かず、、

fileコマンド

$ file ngrok
ngrok: Mach-O 64-bit executable x86_64

$ file Downloads/odbg201/ollydbg.exe
Downloads/odbg201/ollydbg.exe: PE32 executable (GUI) Intel 80386, for MS Windows

fileコマンドを使うと実行ファイルがどのOS、bit向けか分かる

stringsコマンド

webkaru.net

stringsコマンド使おうとしたらエラーになった

$ strings sishyu.jpeg
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

何事かと思ったら昨晩Mojaveにアップデートしたから、xcodeアップデートしたら治った

xcode-select --install

gdb

brew install gdb

試しプログラム

#include <stdio.h>

int main(void) {
    printf("test\n");
    return 0;
}

コンパイル

gcc -g test.c -o test

動かす、

gdb ./test
(gdb) run
Starting program: /Users/hoge/tmp/test
Unable to find Mach task port for process-id 4465: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

怒られる、、

qiita.com

やった、再起動

ps aux | grep taskgated 
sudo kill 1206

署名

codesign -s gdbcert /usr/local/bin/gdb
Unable to find Mach task port for process-id 910: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

まだ動かんなんでや

dtruss、dtrace、radare2インストール

macでstraceをインストールしたいと思った。straceとは↓

プログラムが使用するシステムコールおよび受け取るシグナルを監視するものである

無かった、代わりにdtrussがあるらしい

sudo dtruss -e -d unison
  • -e : それぞれのシステムコールの実行時間をmicrosecondsで出力する

  • -d : コマンド開始からの実行時間をmicrosecondsで出力する

dtrussは-aオプションで全ての付加情報を出力できる

該当プロセスが使用しているファイルを調べるコマンド

lsof -p 1772

ltraceも無いらしい、代わりにdtrace

監視ポイントを探す

sudo dtrace -l | grep syscall

vim という名前のプロセスからシステムコールを監視するとこんな感じ

sudo dtrace -n "syscall::open:entry, syscall::stat:entry, syscall::stat64:entry / execname == \"vim\" / { trace(copyinstr(arg0)); trace(execname); trace(pid) } "

vimを起動するといろいろ出て来る出て来る、、、

radare2を使ってみる

git clone https://github.com/radare/radare2

$ cd radare2 && sys/install.sh
You need GNU Make to build me

怒られてもうた、、

なんやbrewにあるやん

brew install radare2
$ r2 -v
radare2 2.8.0 0 @ darwin-x86-64 git.2.8.0
commit: HEAD build: 2018-12-03__19:10:12

使い方はいずれ、、

neovimを使ってみるぜ

neovimインストール

brew install neovim

設定変更

nvim .config/nvim/init.vim

先ずは、色から

set termguicolors

qiita.com

行数表示

set number

クリップボードの共有

set clipboard=unnamed

プラグイン導入dein

# ディレクトリ作成
$ mkdir -p ~/.cache/dein
# curlで持ってくる
$ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2233  100  2233    0     0   1212      0  0:00:01  0:00:01 --:--:--  1212
$ sh ./installer.sh ~/.cache/dein
Install to "/Users/hogehoge/.cache/dein/repos/github.com/Shougo/dein.vim"...

installしたらサンプルが出てくるのでそのままそれを貼り付け

if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=/Users/hogehoge/.cache/dein/repos/github.com/Shougo/dein.vim

" Required:
if dein#load_state('/Users/hogehoge/.cache/dein')
  call dein#begin('/Users/hogehoge/.cache/dein')

  " Let dein manage dein
  " Required:
  call dein#add('/Users/hogehoge/.cache/dein/repos/github.com/Shougo/dein.vim')

  " Add or remove your plugins here like this:
  "call dein#add('Shougo/neosnippet.vim')
  "call dein#add('Shougo/neosnippet-snippets')

  " Required:
  call dein#end()
  call dein#save_state()
endif

" Required:
filetype plugin indent on
syntax enable

" If you want to install not installed plugins on startup.
"if dein#check_install()
"  call dein#install()
"endif

さて、なんのプラグインを追加していこうかしら 次回へ

git フックを使ってみた

git フックとは

特定のgitアクションが行われた時に、スクリプトを実行する

1. それぞれがフックが動くタイミングは?

docs.google.com

2. フックをインストール

  • プロジェクトのディレクトリへ移動
  • .git/hooks/pre-push.sampleのサンプルをhookスクリプトをgit/hooks/へコピー or
  • gitで管理したい場合.setup/hooks/に配置しhookスクリプトをgit/hooks/へコピー
cp .git/hooks/pre-push.sample .git/hooks/pre-push

3. 「masterに直接pushミス」への対策

vim .git/hooks/pre-pushを編集

while read local_ref local_sha1 remote_ref remote_sha1
do
  if [[ "${remote_ref##refs/heads/}" = "master" ]]; then
    echo "Warning: push to remote master, continue? [y/N]"

    exec < /dev/tty
    read ANSWER

    case $ANSWER in
      "Y" | "y" | "yes" | "Yes" | "YES" ) echo "OK. push start.";;
      * ) echo "push failed.";exit 1;;
    esac
    exit 0
  fi
done

masterにはpushすると確認される

4. 「コミットコメントが空で何の対応をしたかわからない。」への対策

vim .git/hooks/commit-msgを編集

# TODO: コミットメッセージ条件については、方針が決まり次第下記に組み込む
if [ $# -eq 1 ]; then
  if [ -z $1 ]; then
    echo "コミットメッセージを入れてください!!"
    exit 1
  else
    echo "commit ok"
    exit 0
  fi
else
  echo "message無し"
  exit 1
fi

fi

以下の様にcommit出来なくなる。git標準でメッセージが無かったらcommit出来ない気もするが、方針が決まったら実装入れていく

$ git ci -m ''
コミットメッセージを入れてください!!

5 「マージ済みのブランチは自動で消す」への対策→結果フックで対応しない方がいいとの結論

vim .git/hooks/pre-pushを編集

#!/bin/sh -eu

echo 'create release branch tag start'
cd ~/Docker/teachme
version=`cat .version`
git branch develop/$version
git push origin develop/$version
git tag $version
git push origin $version
echo 'done'

hookの中でpushが走るから、無限ループになってしまう。失敗 push自体に無関係なものはフックにしない方がいい。スクリプトにしておけばよかった、、

Rails デフォルトのReferrer-Policyが変わった件について

Referrer-Policyとはどんなreferrerを返すか決めたポリシーのこと

developer.mozilla.org

デフォルトのポリシーはno-referrer-when-downgrade らしい - セキュリティレベルが同一の場合はそのままreferrer送る

Railsでなぜかreferrerが切られて送られるのでなぜかなと調べてみると github.com

デフォルトのポリシーを変えたらしいguilleiguaran さんが変えたよう なのでstrict-origin-when-cross-originがデフォルト - セキュリティレベルが同一でもOrgin(http://hogehoge/ageageの/ageageは含まない部分)しか送らない