lynx   »   [go: up one dir, main page]

タグ

cとprogrammingに関するlizyのブックマーク (76)

  • malloc.c を読む (malloc / free)

    このシリーズではこれらの関数が内部でどのように処理されるのかを調べていきます。 malloc.c を読む (malloc / free) malloc.c を読む (bins) malloc.c を読む (arena) 今回は malloc() free() の全体像を紹介します。 注意としてここでの目的は全体を俯瞰して、詳細を詰めずとも各 bins の役割を理解し、攻撃手法を理解できるようにすることです。それに合わないマルチスレッドや最適化などにおける緻密なトリックやコーナーケースなどは暗黙的に実装されていると仮定します。その詳細についてはソースコードや他の資料を参考にしていただきたいです。 ここで扱う glibc のバージョンは v2.38 です。また glibc のソースコードはブラウザ上で読むことができます。 https://elixir.bootlin.com/glibc/lat

    malloc.c を読む (malloc / free)
    lizy
    lizy 2024/07/17
    mallocと聞くと昔(大昔?)のNetNewsで行われてたmalloc/free論争を思い出す
  • パケットキャプチャツールをつくる - Qiita

    はじめに ネットワークと C 言語の勉強を兼ねて、簡易的なパケットキャプチャツールをつくってみました。参考にしたのは「ルーター自作でわかるパケットの流れ」という書籍です。 表紙に書かれている「ネットワークはどのようにつながるのかパケットの気持ちになって考えてみたことはありますか?」というコメントにが若干引いておりましたが、こういったディープな内容のは中々ないので有り難かったです。なお、このはタイトルのとおりルータを自作することがゴールになっていて、パケットキャプチャツールの作成はそのための練習という位置付けです。 また、特別講座 ネットワークプログラミング ( FWをつくろう )というサイトも非常に参考になりました。図入りで説明されていてとても分かりやすかったです。 ちなみに、C 言語は大学の時に少しかじったものの、ほぼ初心者に近い状態だったので Udemy の「イメージでわかる!基

    パケットキャプチャツールをつくる - Qiita
  • ZetZ、形式的検証機能を備えたCのダイアレクト

    原文(投稿日:2020/02/27)へのリンク ZetZ、略してZZは、RustにインスパイアされたCのダイアレクト(diarect, 方言)だ。コンパイル時に仮想マシン内でシンボリック実行することによって、コードの形式的検証を行う。 ZZはハードウェアに近い部分で動作するソフトウェアをターゲットにしているが、クロスプラットフォームなANSI-C準拠のライブラリ構築にも使用することができる。実際には、ZZはCコードのトランスパイラとして、処理結果を任意の標準的Cコンパイラに入力することで動作する。多くの言語が行っている安全性へのアプローチとは対照的に、ZZは、例えば生のポインタアクセスのように"安全でない(unsafe)"と見なした機能の除外や制限は行わない。その代わりに静的単一代入(static single assignment, SSA)を使用して、yices2やz3といったSMTプ

    ZetZ、形式的検証機能を備えたCのダイアレクト
    lizy
    lizy 2020/05/29
    もはやCには見えない
  • C/C++プログラマのための開発ツール

    Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門 Kubernetesの近年の大きなbreakthroughの一つにCRD & Controllerを使った拡張があります。このセッションではCRD & Custom Controller開発を始めようと思っている人向けに、Kubernetesコミュニティで開発されているCustom Controller向けSDKであるkubebuilder, controller-runtimeについての解説を行います。

    C/C++プログラマのための開発ツール
  • C言語1000行以下で開発されたエディタ「Kilo」

    このほど、「antirez / kilo|GitHub」において、Salvatore Sanfilippo氏によってC言語を使い1000行以下のソースコードで開発されたエディタ「Kilo」が公開された。2条項BSDライセンスの下でオープンソース・ソフトウェアとして公開されている。ほかのライブラリに依存することなく開発されており、作業を始めてから数時間ほどで開発されたと説明がある。C言語による学習素材やエディタ開発のベースソースコードとして利用できる。 Kiloはclocを使ったカウントでコメントや空行を除いた行数が956行とされており、1000行を下回っている。開発にはcursesライブラリといった基的なライブラリも使われておらず、VT100の基的なエスケープシーケンスを使って開発されている。エディタにおける保存や終了といった操作には次のキーが割り当てられている。 Ctrl-S 保存

    C言語1000行以下で開発されたエディタ「Kilo」
  • Microsoft、C言語を拡張する「Checked C」を開発中

    fossBytesに6月14日(米国時間)に掲載された記事「Microsoft Open Sources "Checked C" — An Extended Version Of C To Avoid Coding Errors」が、Microsoftにより開発が進められている「Checked C」と呼ばれる技術について伝えた。「Checked C」はC言語を拡張する機能で、より安全なコーディングが可能になるとされている。 Microsoftのソフトウェアの多くはC/C++で開発されている。C言語はポインタの扱いを間違えると来アクセスしてはいけないメモリを指した操作をしてしまうことがあり、これがバグや脆弱性の原因の1つになっている。「Checked C」はこうした問題を回避することを目指してC言語の機能を拡張するもので、ポインタに対してあらかじめ範囲情報を持たせておき、ポインタの指し示す

    Microsoft、C言語を拡張する「Checked C」を開発中
  • Big Sky :: API が小さい埋め込み向け JavaScript エンジン v7

    埋め込み向けで、C言語から呼べて API が小さい JavaScript エンジン v7 を見つけました。 cesanta/v7 · GitHub https://github.com/cesanta/v7/ 特徴としては クロスプラットフォーム: Arduino から MS Windows まで、どこでも動く。 小さい: コンパイルされたコアはわずか 40KB から 200KB。 シンプルで直観的な C/C++ API: 簡単に C/C++ の関数を JavaScript 環境へエクスポート出来る。 標準: V7 は JavaScript 5.1 を実装し、Standard ECMA tests をパスする事を目指している。 パフォーマンス: V7 は非 JIT エンジンの中で最速を目指している。 創造的に利用可能: V7 は、ハードウェア(SPI、UARTなど)、ファイル、暗号化、ネッ

    Big Sky :: API が小さい埋め込み向け JavaScript エンジン v7
  • sprintf を最大10倍以上高速化するプリプロセッサ「qrintf」を作った

    最近H2OというHTTPサーバを書いているのですが、プロファイルを取ってみるとsprintfが結構な時間をっていて不満に感じていました。実際、sprintfは数値や文字列をフォーマットするのに十徳ナイフ的に便利なので、HTTPサーバに限らず良く使われる(そしてCPU時間を消費しがちな)関数です。 では、sprintfを最適化すれば、様々なプログラムが より高速に動作するようになるのではないでしょうか。ということで作ったのが、qrintfです。 qrintfは、Cプリプロセッサのラッパーとしてソースコードに含まれるsprintfの呼出フォーマットを解析し、フォーマットにあわせたコードに書き換えることで、sprintfを高速化します。 たとえば、以下のようなIPv4アドレスを文字列化するコード片を sprintf( buf, "%d.%d.%d.%d", (addr >> 24) & 0xf

  • mrubyのmrb_gc_arena_save()/mrb_gc_arena_restore()の使い方 - Matzにっき(2013-07-31)

    << 2013/07/ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1. mrubyのmrb_gc_arena_save()/mrb_gc_arena_restore()の使い方 >> _ mrubyのmrb_gc_arena_save()/mrb_gc_arena_restore()の使い方 Twitterで質問を受けたので、 mrubyのmrb_gc_arena_save()/mrb_gc_arena_restore()の使い方 という解説を行った。が、1つ140文字のTwitterでの解説にはどうしても無理があるので、 こっちでまとめることにする。 まずは、Twitterの発言*1はこんな感じ。 arenaの目的。利用中のオブジェクトはGCに回収されないよう保護

    mrubyのmrb_gc_arena_save()/mrb_gc_arena_restore()の使い方 - Matzにっき(2013-07-31)
  • テスト駆動開発による組み込みプログラミングも良い本です - プログラマの思索

    「テスト駆動開発による組み込みプログラミング」を頂きました。 ありがとうございます。 既に色んな方が感想を書かれています。 【元ネタ】 「テスト駆動開発による組み込みプログラミング」 - Yasuo's Notebook [書評]テスト駆動開発による組み込みプログラミング | Ryuzee.com O'Reilly Japan - テスト駆動開発による組み込みプログラミング 書籍『テスト駆動開発による組み込みプログラミング』:柴田 芳樹 (Yoshiki Shibata):So-netブログ "これこそ私の探していたものだった" - テスト駆動開発による組み込みプログラミング: 菊と書評 テスト駆動開発は設計技法である~組み込みアジャイルコーチ James Grenning さんインタビュー: プログラマの思索 C言語でTDDをやる場合、JavaRubyに比べると、リフレクションやモック

    テスト駆動開発による組み込みプログラミングも良い本です - プログラマの思索
  • nginxの開発コミュニティにパッチを送った時の話 - pixiv engineering blog

    あけましておめでとうございます。年末年始はひどい風邪でほぼ布団の上だったbokkoです。 しかし、布団の上でもプログラミングはできるので過去に自分が作ったnginxのモジュールのコードを直したり、 ngx_mrubyにPull-Requestを送ったりして過ごしていました。 そんな中・・・ 年が明けてもなかなか風邪が治らず、朦朧とした意識の中でngx_mrubyに機能を追加してnginx体と 一緒にコンパイル & Valgrindで実行していると以下のエラーが出力されました。(nginxの拡張モジュールはnginx体のビルド時に静的に組み込まれます) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ==21338== Conditional jump or move depends on uninitialised value(s) ==21338== at 0x44

  • Big Sky :: C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。

    前回は JSMN というのを試したけど、今度も matsuu さんのブクマから。。。 parson Lightweight json parser and reader written in C. http://kgabis.github.com/parson/ 特徴は 軽い (2ファイルだけ) 単純なAPI ドット記法による json 値のアドレッシング (C言語の構造体やOO言語のオブジェクトに似た感じ。例: "objectA.objectB.value") C89 コンパティブル テストスーツ 前回の JSMN とは違い、メモリを動的に確保するタイプ。DOM の様にルートノードから探索を始め、最終的にルートノードを指定してメモリを開放する。 今回もtwitterのタイムラインをパースしよう。 #include <assert.h> #include <string.h> #inclu

    Big Sky :: C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。
  • システムコールを減らすシステムコール

    前回まで、mmap(2)によるコピー処理の高速化について紹介してきた。mmap(2)にはまた、システムコールが呼ばれる回数を削減し、処理速度を高速化するという効果もある。今回は、共有メモリの観点から、その機能を紹介する(編集部) システムコールを減らすシステムコール mmap(2) 前回まではコピープログラムを例に挙げながら、mmap(2)を使うことでコピー処理を高速化できることを紹介してきた。連載第1回目で説明したように、処理速度を高速化したければ、基的にはシステムコールは少ない方がよい。システムコールを実行すれば、その分プログラムとカーネルの間でのデータのコピーや処理の切り替えが発生し、それだけ処理速度が遅くなる。 しかし、例外的に処理を高速化できるものもある。その代表格がmmap(2)だ。mmap(2)はシステムコールだが、このシステムコールを利用すると、最終的にはシステムコールが

    システムコールを減らすシステムコール
  • LD_PRELOADを使ったテスト(C言語編)

    一般に、テストを自動化する場合、テスト対象のプログラムやコードに対するインプットとアウトプットを制御する必要があります。 コードが綺麗に抽象化され、テストデータを外部から入力しやすいインターフェースが用意されていれば、ユニットテストのコードを書くことができますが、そうではないケースも多いのではないでしょうか。 その場合、テストコードを書けるようにリファクタリングを行うことになるのでしょうが、テストコードなしでのリファクタリングが必要になり、一般に困難な作業になります。 ここでは、共有ライブラリとLD_PRELOADという環境変数を使うことで、コードに手を加えることなく外部から対象のプログラムの挙動を制御する方法を紹介します。 それでは例として、dateコマンドで表示される日時を制御することを考えてみましょう。 まず、dateコマンドを実行すると次のように日時が表示されます。 $ date

  • FlashDevelop + GCCでANE入門 – Rest Term

    Adobe AIR3から ANE (ActionScript Native Extensions) という機能が追加され、これを使うとAIRアプリケーションをネイティブコードで拡張できるらしいです。素晴らしいですね。 今回はFlashDevelopを使ってWindows x86用のANEを作ろうかと思います。小さなdll (Dynamic Link Library)を作るだけなので、Visual Studio(Visual C++)のような大げさなIDEは使わずにGCCで。余計なプロジェクトフォルダやファイル等も作らなくていいのですっきり作れるんじゃないかなと。Windows環境へのGCCのインストール方法はこのエントリーの最後に紹介しています。 Flash Builder + Visual Studio な環境の人は、agendy さんにてANEを利用したAIRアプリケーションの作り方を

    FlashDevelop + GCCでANE入門 – Rest Term
  • PHP5.3.7のcrypt関数のバグはこうして生まれた

    昨日のブログエントリ「PHP5.3.7のcrypt関数に致命的な脆弱性(Bug #55439)」にて、crypt関数の重大な脆弱性について報告しました。脆弱性の出方が近年まれに見るほどのものだったので、twitterやブクマなどを見ても、「どうしてこうなった」という疑問を多数目にしました。 そこで、このエントリでは、この脆弱性がどのように混入したのかを追ってみたいと思います。 PHPのレポジトリのログや公開されているソースの状況から、PHP5.3.7RC4までこのバグはなく、PHP5.3.7RC5でこのバグが混入した模様です。RC5はPHP5.3.7最後のRelease Candidateですから、まさに正式リリースの直前でバグが入ったことになります。 バグの入る直前のソースは、ここの関数php_md5_crypt_rから参照することができます。以下に、おおまかな流れを図示します。まずはバ

    PHP5.3.7のcrypt関数のバグはこうして生まれた
    lizy
    lizy 2011/08/24
    例えば、Cを避ける←避けられない
  • 普通のやつらの下を行け: BFDでデバッグ情報の取得 - bkブログ

    普通のやつらの下を行け: BFDでデバッグ情報の取得 gcc に -g オプションを与えるとデバッグ情報をバイナリに埋め込むことができます。この情報は通常 gdb などのデバッガによって利用されますが、普通のプログラムでも利用できれば何かおもしろいことができるかもしれません。 普通のやつらの下を行けの第4回として、今回は BFD (libbfd) を用いてデバッグ情報を取得する方法を取り上げたいと思います。 BFD とは BFD (Binary File Descriptor library) は各種バイナリフォーマットに対して低レベルな操作を行うためのライブラリです。 GNU binutils に含まれています。Debian GNU/Linux なら次のコマンドでインストールできます。 % sudo apt-get install binutils-dev ここでは BFD の bfd_

  • ブラウザー上でネイティブコード実行、Googleが「Native Client」のSDK公開 

  • Eclipse用C言語コーディングスタイルチェックプラグイン『KariyaSiesta』をリリースしました - みずぴー日記

    伊東まで開発合宿に行って、みんなでC言語のコーディングスタイルチェッカーを作ってました。 => KariyaSiesta | C 言語向けのコーディングチェッカ 配布サイトも作りました。 ルールを簡単にカスタマイズできるようになってるので、みんな使うといいでゲソ。 特徴 Eclipseのプラグインとして使える Eclipseプラグインとして実装されているので、IDEで使えます。 もちろんCDTとも組合せることができます。 簡単イントール 更新サイトから簡単にインストールできます。 もちろん自動アップデートにも対応してます。 XPathでルールで書ける ルールはXPathで書くことができます。 例えば『whileの内でbreakを使ってはいけない』というルールは以下のようになります。 こまかい書き方はマニュアルを参考にしてください。 //Stmt[@sort="While" and .//k

    Eclipse用C言語コーディングスタイルチェックプラグイン『KariyaSiesta』をリリースしました - みずぴー日記
  • Android NDK で .so ではなく、実行ファイルをつくる - Hacking My Way 〜 itogのhack日記

    AndroidにはNDKという、JavaではなくネイティブのC/C++で開発するためのツールチェインが用意されていて、これを使えばパフォーマンスアップを望めたり、C/C++で書かれた資産を流用出来たりします。 こういった使い方をする場合は、ネイティブのコードをコンパイルして.soをつくり、それをJavaからloadLibrary()でロードする、という使い方をするのですが、.soではなく、実行ファイル形式もつくることが出来ます。 やり方は至って簡単で、Android.mkに以下を追記するだけです(※NDK r4) include $(BUILD_EXECUTABLE) サンプル hello-exe.c #include int main(int argc, char ** argv) { printf("Hello, world!\n"); return 0; } Android.mk L

    Android NDK で .so ではなく、実行ファイルをつくる - Hacking My Way 〜 itogのhack日記
Лучший частный хостинг