libevのドキュメントでしたら 本家のREADME を参照するのが良いと思います。 ev_async は、マルチスレッド環境でイペントループに対して安全にイベントを通知する仕組みです。例えば、あるスレッドが ev_run() しているイベントループに対して、別のスレッドからループの終了を通知したいといった目的で利用されます。 以下に ev_async を用いて、別スレッドからイベントループを終了させるサンプルのコードを載せておきます。(※ エラー処理など省略しています) #include <stdio.h> #include <unistd.h> #include <pthread.h> #include <ev.h> struct ev_loop *loop; struct ev_async shutdown_w; static void * thread_main (void *ar
software.schmorp.de #include <stdio.h> #include <stdlib.h> #include <netinet/in.h> #include <ev.h> #include <strings.h> #define PORT_NO 3033 #define BUFFER_SIZE 1024 void accept_cb(struct ev_loop *loop, struct ev_io *watcher, int revents); void read_cb(struct ev_loop *loop, struct ev_io *watcher, int revents); int main() { struct ev_loop *loop = ev_default_loop(0); int sd; struct sockaddr_in addr;
PHP8などへ移行する際の互換性チェック 「PHP5からPHP8への移行は何が面倒なのか」の記事などに"PHP8移行ツール"とか"互換性チェックツール"というキーワードでたどり着いている人がいるようなので補足しておきます。 いきなりとどめを刺すようで悪いのですが、PHP5とかPHP7からPHP8へ自動移行をするようなツールはおそらくありません(*1)。ただ、互換性のチェックを"ある程度"助けるものとして、静的解析ツールというジャンルのツールを使うことはできます。 開発者でない人向けにざっくり説明すると、静的解析ツールとは、ソースコードをチェックして、エラーやバグの可能性がある怪しい箇所を指摘してくれるツールです。対象のスクリプトを実際には動作させずに内容をチェックすることから"静的"解析と呼ばれます。 PHP8に移行したいスクリプトを静的解析ツールにかければ、"ある程度"は修正箇所の洗い出
新しいプログラミング言語やライブラリ、フレームワークを学ぶには、実際にそれらを試して挙動などを見てみることが大事ですが、実行環境を用意するのは手間がかかります。 そこで役立つのが、いわゆる「プレイグラウンド」と呼ばれる、Webブラウザでプログラミング言語やライブラリ、フレームワークをすぐに試すことができるサービスです。 主要なプログラミング言語の公式サイトには、実際にその言語をすぐに試せるプレイグラウンドが用意されていることも多く、また公式サイト以外にもネット上にはさまざまなプレイグラウンドがあります。 プレイグラウンドを使えば、気軽にいろんなプログラミング言語やライブラリ、フレームワークを試せます。 この記事ではそうしたプレイグラウンドをまとめてみました。ここで紹介したプレイグラウンドの他にも、あなたのお気に入りのプレイグラウンドがあればX/Twitterやブックマークのコメント、メール
なぜ令和にもなって動的型付け言語を使うのか シフトレフトという概念が生まれたのは二十年以上も前のはずだ。 それにもかかわらず動かしてみるまで答え合わせもできない言語で開発をするという発想自体がどうかしている。 同じ動的型付けといってもJavaScriptはブラウザという事情があるし、型の表現力に優れたTypeScriptがあるからまだよい。 しかし、Pythonはどうだ。他にいくらでも選択肢があるなかで、サーバーサイドにわざわざ選定する言語ではなかろう。 貧弱な型ヒント、しかも書いたところで大した効用もない。 使っている外部ライブラリにひとつでも型ヒントがクソなものがあれば即座に破綻する。 型というガードレールもシートベルトもなしで糞を撒き散らしながらする開発にはうんざりだ。 シンタックスもキモい 動的型付けもさることながら、シンタックスもキモい。とにかく思考を妨げる語順になっている。 m
_FORTIFY_SOURCEというバッファーオーバーフロー攻撃を防ぐのにとても有用なマクロがある。 知らなかった人は以下のmanでもまず見てください http://linuxjm.sourceforge.jp/html/LDP_man-pages/man7/feature_test_macros.7.html _FORTIFY_SOURCE (glibc 2.3.4 以降) このマクロを定義すると、文字列やメモリの操作を行う様々な関数を 使用する際にバッファオーバーフローを検出するための軽めのチェックが 実行されるようになる。すべてのバッファオーバーフローが検出される わけではなく、あくまでよくある例についてだけである。 現在の実装では、以下の関数にチェックが追加されている: memcpy(3), mempcpy(3), memmove(3), memset(3), stpcpy(3),
株式会社Ninjastars取締役の齊藤です。 皆様もC言語やC++で開発しているときなどに一度はこの実行時エラーを見たことがあるのではないでしょうか? 今回はSegmentation Fault(以下セグフォ)がどのようにして発生するのかを詳細に書いていこうと思います。 1.セグフォとは 割り当てられた仮想メモリ領域(セグメント)に読み込み(r)または書き込み(w)、実行の権限(x)がない状態でアクセスしたときに起こるエラーのことを指します。 では、なぜセグフォが必要なのでしょうか? それはメモリに展開されているプロセスを保護し、OS全体に影響を及ぼさないためです。 2.セグフォの原因を探す手順 プログラムを用意したのでそれを例に原因を探していきましょう。 まず今回のプログラムは標準入力で10byteのbufferに文字データを格納するものです。 標準入力する際、gets関数を使っている
これもバッファーオーバーフロー検出に関するお話。 gcc4からの機能です。 使い方 (o1以上の最適化オプションをつける) gcc -O1 -D_FORTIFY_SOURCE=1 foo.c検出時は、下記のいずれか コンパイル時 実行時 これの機能のすごいとこは、リリースビルドで使えるということ。 gオプションがいらないので、リリースするモジュールにも積極的に使えるということ。 #include <string.h> static char buf[6]; int main(int argc, char** argv) { strcpy(buf, argv[1]); return 0; } こんなソースを実行すると下記の感じになる。 ======= Memory map: ======== 08048000-08049000 r-xp 00000000 08:01 10888991 /ho
このドキュメントは、C および C++のネイティブ(またはクロス)ツールチェーンを使用して、信頼性が高くセキュアなコードを提供するために貢献するコンパイラとリンカのオプションに関するガイドです。コンパイラオプションの強化の目的は、潜在的な攻撃や誤動作に対するセキュリティメカニズムを備えたアプリケーションバイナリ(実行可能ファイル)を生成することです。また、強化されたコンパイラオプションは、最新のオペレーティングシステム(OS) の既存のプラットフォーム セキュリティ機能とうまく統合するアプリケーションを生成するはずです。コンパイラコンパイラを効果的に設定することは、コンパイラーの警告、静的解析、デバッグインスツルメンテーションの強化など、開発中にもいくつかの利点をもたらします。 本ドキュメントは、以下の方々を対象としています: 組み込み機器、モノのインターネット機器、スマートフォン、パソコ
TL;DR coredumpはサイズが大きくなりがちなので圧縮したいということはよくあると思う。 下記設定で、お手軽にgzip圧縮して保存できる、という小ネタ。 環境 動作確認、および、引用しているLinuxのソースコードはv4.15.0。 core_patternとは? coredumpが出力されるLinux環境では、デフォルトではプロセスの実行ディレクトリにcoreという名前で保存される。 ただこのままだと場所がバラけてしまうため管理しにくい。 また、同一ディレクトリで動いているプロセスにつき一つしかcoredumpを残せないのも問題だ。 そこでlinuxには/proc/sys/kernel/core_patternで出力ファイル名を変更する仕組みが用意されている。 man core(5) Naming of core dump files By default, a core dum
C言語 Advent Calendar 2016 16日目です。 clang 3.1, gcc 4.9以降にメモリ関連の不正な操作を検出するAddressSanitizerという仕組みが入りました。 二重freeやバッファオーバーフローなどCプログラミングにありがちなメモリ操作を検出できるので、ソフトウェアの品質向上だけでなく、セキュリティ対策としても有用です。 以下に思いつく限りのメモリの不正操作を実際に試してみました。 (1) スタックオーバーフロー(1.1) 正方向の書き込み [stack_overwrite.c] (https://github.com/hamano/santest/blob/master/tests/stack_overwrite.c)(1.2) 正方向の参照 [stack_overread.c] (https://github.com/hamano/santes
ISO C++ committee meeting March 18-23, Tokyo, Japan ACCU 2024 April 17-20, Bristol, UK using std::cpp 2024 April 24-26, Leganes, Spain C++ Now 2024 May 7-12, Aspen, CO, USA ISO C++ committee meeting June 24-29, St. Louis, MO, USA C++ on Sea July 2-5, Folkestone, Kent, UK Memory Management How do I deal with memory leaks? By writing code that doesn’t have any. Clearly, if your code has new operatio
メンバー向けトレーニングネタその1。delete this は危険に見えるが何を削除しているのか確認する。 class ClassA { public: void del() { delete this; } }; int main() { ClassA* ptr = new ClassA(); ptr->del(); // ダメな例 // ClassA test; // test.del(); return 0; } (gdb) b ClassA::del Breakpoint 1 at 0x4006aa: file test.cc, line 6. (gdb) run Breakpoint 1, ClassA::del (this=0x602010) at test.cc:6 6 delete this; ようするに、削除されるのはオブジェクトの管理領域 (0x602010) であって
はじめに これは何か / 何がいいのか clang-formatは、主にC++を対象としたソースコード整形ツール(code formatter)である。 ソースコード整形ツールは、ソースコードのフォーマット: コーディングスタイルのうちの見た目に関するものを、一定のルールに従って整形するツールである。ソースコード整形ツールを使うことで、例えばインデントの行い方やカッコの付け方などを手間をかけずに統一できる。チームで開発する際などに、全ソースコードのフォーマットをツールに任せて統一できると、フォーマットに対する好みの差によるソースコードの差分が発生しないため開発効率がよい。 C++用ソースコード整形ツールとして、2022年9月現在で名前がよく知られているのはclang-formatぐらいの様子。 clang-formatでは、整形の行い方をルールファイルで指定する。用意されているスタイル(G
makeファイルはデフォルトではhelpが存在しない。bashの補完の設定などを入れているとタブで利用可能なタスクの一覧が出る環境もあるが、その設定もしていない場合には利用可能なタスクの一覧も表示できない。 タスクに対するcommentの流派 似たようなことを考える人はいるもので、helpというタスク(ターゲット)を定義してhelpメッセージを表示しようという試みをしている人たちがいる。 ちょっとだけ検索してみた所以下の2つの流派があるみたい。 <task>: ## <comment> 派 https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html (和訳) https://qiita.com/po3rin/items/7875ef9db5ca994ff762 https://gist.github.com/prwh
C言語のマクロの引数の最後に ... を指定することで任意個の引数を取り、 __VA_ARGS__ で参照できる:
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く