Goのオブジェクトファイルの中身を見てみる(リロケーション編)

Go

前回のシンボル編に引き続き、Goのオブジェクトファイルについてのメモ。今回はリロケーションについて。前回と同じく、Linux環境、Go 1.10が前提。CPUアーキテクチャはx86_64。 リロケーション情報のフォーマット Goのオブジェクトファイルの場合、リロケー…

Goのオブジェクトファイルの中身を見てみる(シンボル編)

Go

Goのオブジェクトファイルについて調べる機会があったのでメモ。今回は主に定義済みシンボルについて。Linux環境、Go 1.10が前提。 オブジェクトファイルのフォーマット Goのオブジェクトファイルは独自フォーマットになっている。Linux環境でよく使われるEL…

C言語でclosureを実現する

C言語は、仕様上closureをサポートしていない。GCC拡張によるサポートはあるけど、clangではエラーになる。ただライブラリレベルでclosureの機能を実現することはできるようで、libffcallというライブラリがその機能を提供している。この記事では、libffcall…

システムコールにみるGo言語のnetパッケージの実装

netパッケージのコードを読む機会があったのでメモ。TCPのエコーサーバーを実行して、呼ばれているシステムコールとその引数を確認した。Go言語がシンプルなインターフェースを提供している裏側で、ノンブロッキングIOやIO多重化を駆使している様子がわかっ…

Goでpingコマンドを書いてみた

Go

最近読んだUNIX Network Programmingに触発されてpingコマンドを書いてみた。 ping command in golang, just for fun 本家pingと違って、統計情報とかは保存していない。MessageのPack/Unpack周りの実装はnet/dnsmsg.goをかなり参考にしている。 Linux環境で…

Go言語からkubernetes APIを呼び出すクライアント「client-go」の紹介

これはKubernetes2 Advent Calendar 2017 25日目の記事です。この記事ではclient-goというライブラリを使ってgo言語からkubernetesのAPIを呼び出す方法を紹介します。 とりあえず使ってみるところから、任意のkubernetesクラスタにつなぐ方法、service accou…

GCP User GroupでStackdriverについて発表してきた

だいぶ間が空いてしまった。先日開催されたGCPUG Tokyo DevOps Day September 2017というイベントで発表してきたメモ。 「RocroにおけるGCP活用事例」という発表の後半を担当した。前半は現在開発中のサービスとそのデプロイについて、後半がStackdriverにつ…

CloudFormation Custom Resourceの意図しない削除を防ぐ

AWS

最近はCloudFormationをよく使っています。大変便利なのですが、S3オブジェクトやDynamoDBのItemの作成には対応していないため、Lambda-backed Custom Resourceで作成しています。ただCustom Resourceのライフサイクルは少し独特なところがあって、理解せず…

mitmproxyでHTTPSプロキシする時、どんな通信が発生しているのか追ってみる

前回の記事で、ブラウザからアクセスするURLはそのままで接続先サーバだけ変える方法と、その際のHTTP通信の様子を確認しました。今回はその続きで、HTTPSの場合について、ブラウザとmitmproxy間、mitmproxyとサーバ間の通信内容を追っていきたいと思います…

mitmproxyを使って、アクセスするURLはそのままで接続先サーバだけ変える

最近App Engineでの開発中に、ブラウザからはexample-a.comというURLでアクセスしたいけど、実際にはexample-b.comのサーバに接続させたい、ということがありました。こういうとき、mitmproxyというツールを使うと楽だったので、やり方をメモしておきます。…

GoogleのContainer Registry (gcr.io) からDocker Imageのメタデータだけを取得する

GCPではContainer RegistryにDocker Imageを格納できる。格納したImageの取得にはdocker pullコマンドが使えるけど、時々Imageのメタデータだけを参照したいことがある。そういうとき、いちいちdocker pullするのは時間がかかるし、ストレージも食う。 そう…

Scheme interpreter in Clojure (SICP 4.1: The Metacircular Evaluator)

SICPをようやく読み終え、Schemeインタプリタの実装に興味が出てきたので、Clojureで実装してみた。Schemeの仕様に則ったしっかりしたものではなく、SICP 4.1節のコードをClojureで書き換えて、パーサーを足したりしただけのもの。パーサー周辺は遅延シーケ…

SICP 3.3.4: A Simulator for Digital Circuits

SICP 3.3.4節にあるデジタル回路シミュレータをClojureで実装する機会があったので残しておく。Clojure初心者なので色々問題あるかもだけど、参考までに。 emacsのciderが便利すぎた。

pkg/errorsの導入時につまづいたところのメモ

Go

最近、既存のプロジェクトにpkg/errorsを導入する機会がありました。使い方のガイドラインが開発者のブログ記事の後半部分にあったので、参考にさせて頂きました。大体問題なく導入できましたが、悩んだ・つまづいたところもあったのでメモしておきます。 そ…

Mac OS X El Capitanにrlwrapをソースからインストールする

つまづいたところのメモ。 rlwrapをbrewからインストールしようとしたら、パッケージのダウンロードで失敗していた。 % brew install rlwrap [master] ==> Downloading http://utopia.knoware.nl/~hlub/rlwrap/rlwrap-0.42.tar.gz curl: (7) Failed to conne…

luciでAppEngine/Goの異常系テストを手軽に書く

こんばんは。アドベントカレンダー Google Cloud Platform(2) 24日目担当の @ks888 です。 昨日の記事に続いて、AppEngine/Goのテストに便利なluci/gaeというライブラリを紹介していきます。昨日は簡単な紹介として、AppEngine/Goのテスト実行時間を短縮する…

AppEngine/Goのテストに役立つライブラリluciの紹介

こんばんは。アドベントカレンダー Google Cloud Platform(2) 23日目担当の @ks888 です。 突然ですが、luciというライブラリをご存知でしょうか。AppEngine/Goのテストに効果を発揮する素晴らしいライブラリなのですが、あまり使っているという話を聞きませ…

NightmareでE2Eテストをするときに役立った独自アクションのメモ

アドベントカレンダー ソフトウェアテスト6日目担当の @ks888 です。 ソフトウェアテスト Advent Calendar 2016 - Qiita 最近はNightmareでE2Eテストを書くことが増えてきました。Nightmareを使うと、例えば以下のような感じでテストを書けます。 var Nightm…

OSSプロジェクトにLambCIを導入しようとした話

最近はLambStatusというOSSを作っているのですが、今回は、このプロジェクトでCIを回すためにLambCIを導入しようとした話です。結果は失敗に終わったのですが、つまづいた箇所とかが参考になるかもしれないので残しておきます。 LambCIとは LambCIは、AWS La…

Go言語のインターフェースの値は、メモリ上でどう表現されているか

Go

前回の記事では、Go言語のスライスと文字列の値がメモリ上でどう表現されているか見てみました。今回はインターフェースへの理解を深めるべく、インターフェースの値がメモリ上でどう表現されているかGDBでみてみます。 インターフェースの値 まず、インター…

GDBでGo言語のスライスの値をのぞいてみた

Go

最近Go言語をよく触っています。触っているうちに、スライス、文字列、インターフェースなどの値がメモリ上でどう表現されているか知っておくと実装やデバッグ時に役立ちそうだなーと思うことが度々でてきました。そこでGo言語本体のソースコードを読みつつ…

StackdriverでGCP上のサービスを監視してみた

今関わっているサービスは、GCPのGoogle App Engine (GAE) とGoogle Container Engine (GKE) を使って開発しています。そのサービスの監視にStackdriver Monitoringを使ってみたときのメモです。 現在の印象としては、かなり面白い機能はあるけど、基本的に…

AWS LambdaでCI環境を作れるOSS「LambCI」試用メモ

これまでそれほど縁がなかったサーバレスですが、LambCIというOSSを使うとAWS LambdaでCI環境が作れるという話を聞き、ちょっと使ってみました。 GitHub - lambci/lambci: A continuous integration system built on AWS Lambda LambCIとは LambCIの紹介とし…

各EC2インスタンスに配置したSnortのアラートをELK (ElasticSearch, Logstash, Kibana) で監視する

EC2でネットワークのパケット監視をしたい場合、どうするのがいいんでしょうか。商用だとDeep SecurityとかAlert Logicとかありそうですが、値段もそれなりにします。なんとかOSSでできないかということで、ネットワーク型IDS/IPSであるSnortと、ELK (Elasti…

Site Reliability Engineering: How Google Runs Production Systems の読書メモ

SRE

最近Site Reliability Engineer(SRE)という職種やチームがよく話題になります。当初は、コードをよく書けるインフラエンジニアがふつうにやっていたことに名前を付けただけと思っていましたが、Googleの出しているSRE本(Site Reliability Engineering: Ho…

AWS WAFをバイパスしてSQLインジェクション攻撃をしてみる

最近はAWS WAFを触っています。こういう防御ツールは、やはり攻撃をどれぐらい防いでくれるか気になります。AWS WAFの場合、SQLインジェクション系の脆弱性を探ってくれるsqlmapをかけたところ、攻撃をブロックしてくれたという記事があります。 記事を読ん…

ApacheのDigest認証モジュールがどのようにnonceを生成しているか

前回の記事で、Digest認証がどうやって攻撃に対策しているかまとめました。いくつかの攻撃への対策として、nonceと呼ばれるワンタイムトークンが重要な役割を果たしていました。このnonceの生成方法は実装者に任せられているのですが、実際のWebサーバではど…

Digest認証はどのような脆弱性対策をしているか

最近CTFをやってみたのをきっかけに、Digest認証のRFC(RFC2617)を読みました。今どきDigest認証を使うことはあまりなさそうですが、RFCにはセキュリティ面で考慮したことが色々書かれていて勉強になりました。古典大事。というわけで、いくつかの攻撃手法…

Ansible Playbook向けデバッガをStrategy Pluginとして作り直しました

細々と開発を続けていたAnsible Playbook向けデバッガですが、ここ数ヶ月Ansible v2では動かない問題がありました。Ansible v2はPlaybookのレベルではv1との互換性を保持していますが、内部はがっつり書き換わっています。開発していたデバッガはAnsible内部…

JAWS DAYS 2016でAmazon Auroraの話を聞いてきた

AWS

3月12日に開催されたJAWS DAYS 2016に行ってきました。いくつかセッションを聞いてきたのですが、今回は[Deep Dive]Amazon Auroraセッションについて復習がてら書きます。 「クラウドソーシングLancers」を支えるAurora 【JAWS DAYS 2016】ランサーズを支え…