2024-09-07 セキュリティキャンプ アフターイベント 2024-09-14 traP & Zli 合同LT で発表したスライドになります。

2024-09-07 セキュリティキャンプ アフターイベント 2024-09-14 traP & Zli 合同LT で発表したスライドになります。
電卓を通じて、再帰下降構文解析を使った構文解析を行います。インタプリタ自作やコンパイラ自作の前段階として挑むとちょうど良いのではと思います。 ステップ1からステップ15まであります。ステップ1のファイルにどんどん加筆していくと、最終的に括弧を使った四則演算の式を解析できる電卓が出来上がります。各ステップは少しづつの書き換えだけで済むようになっています。 「大学に入ってからプログラミングを始めて、1年生でC言語を学んでいる」という人に向けて書きました。 「このステップは難しすぎる」「説明が分からない」「ここの説明は間違っている」等があれば、sou7まで連絡を頂けるとありがたいです。また、実装してみて「みてみて!電卓が実装できたよ!」というときにも連絡を頂けると嬉しいです。 参考実装はこちらにありますCommits · soukouki/c-calc · GitHub。ステップごとにコミットを
Linux プログラミング言語 malloc(3)のメモリ管理構造 2007/11/30 技術本部 クラウド基盤エキスパート 角馬 文彦 malloc()といえばC言語ではお馴染みのライブラリで、最も良く使用されるライブラリの一つです。しかしその分だけ何らかの不具合を経験した人も多いのではないでしょうか。本書ではmalloc()、free()で確保、解放されるメモリリソースが内部的にどのように管理されているかを説明していきます。mallocライブラリの仕様を理解する事で、ライブラリ使用時に何らかの不具合が発生した際の手助けになればと思います。 ここではLinuxディストリビューションで標準的に使用されているglibcのmallocライブラリを扱います。今回の調査では次の環境を使用しています。 ディストリビューション :Debian sarge パッケージバージョン :glibc-2.3.
このシリーズではこれらの関数が内部でどのように処理されるのかを調べていきます。 malloc.c を読む (malloc / free) malloc.c を読む (bins) malloc.c を読む (arena) 今回は malloc() free() の全体像を紹介します。 注意としてここでの目的は全体を俯瞰して、詳細を詰めずとも各 bins の役割を理解し、攻撃手法を理解できるようにすることです。それに合わないマルチスレッドや最適化などにおける緻密なトリックやコーナーケースなどは暗黙的に実装されていると仮定します。その詳細についてはソースコードや他の資料を参考にしていただきたいです。 ここで扱う glibc のバージョンは v2.38 です。また glibc のソースコードはブラウザ上で読むことができます。 https://elixir.bootlin.com/glibc/lat
より価値の高いソフトウェアを開発するために。C++エキスパート・高橋晶が薦める、C++の技術書5選 2024年7月16日 C++ライブラリアン 高橋 晶 C++日本語リファレンスサイトcpprefjpを運営し、C++の最新情報を日本語で発信している。株式会社Preferred Networksに所属し、スーパーコンピュータのソフトウェア開発に携わっている。 著書として、『C++テンプレートテクニック』(SBクリエイティブ)、『C++ポケットリファレンス』(技術評論社)、『プログラミングの魔導書』(ロングゲート)。 X: @cpp_akira GitHub: faithandbrave 1. 『Effective C++ 第3版』Scott Meyers 著、小林健一郎 翻訳 2. 『Effective Modern C++ ― C++11/14プログラムを進化させる42項目』Scott M
How Bond Home Built In-House Observability & Why They Switched to Memfault | Wed, October 30th - 9AM PT | 12PM ET | RSVP Sometimes, C/C++ projects have a long development cycle. When working on such a project, it can be easy to take our development environment for granted, and forget about the effort invested in its bring-up. The build environment works like magic, the test framework is neatly int
Happy with my recent breakthrough in understanding C integer divisions after weeks of struggle, I was minding my own business having fun writing integer arithmetic code. Life was good, when suddenly… zsh: segmentation fault (core dumped). That code wasn't messing with memory much so it was more likely to be a side effect of an arithmetic overflow or something. Using -fsanitize=undefined quickly id
追記: Twitterなどでご指摘等いただいているのをコメントしてますので、ぜひそちらもご覧ください! これはなに 絶賛Rust勉強中の僕が、「なんでRustはメモリ安全って言われているの?」と聞かれたので、実際にメモリ安全ではない(?)C言語のコードを並べてみて考える記事です。 C言語の場合 メモリリーク 以下のコードはメモリリークを起こす可能性があります。 #include <stdio.h> #include <stdlib.h> #define STR_BUF_SIZE 100000000 char *str_new() { return calloc(STR_BUF_SIZE, sizeof(char)); } int main() { for (int i = 0; i < 100000000; i++) { char *str = str_new(); snprintf(st
世の中の TypeScript コンパイラが大きすぎるので作りました。 ここで試せます。 jsx と jsx pragma のサポートもしたので、 preact も動いています。 実装方針 ビルドサイズ第一 とにかく軽量に mints自体が他のコードをビルドするときの速度ではない点に注意 現状、まともなエラーレポートが出ない。エラーメッセージをインライン化するとビルドサイズが増えるため。 空白行と型情報を落とすだけ ES5 への変換や commonjs への変換は実装しない enum と constructor と jsx のみ transform する特殊対応をしている 真面目な構文解析をしてない 例えば 1+1*2 のような binary expression は結合順を解析してない。型を落とすだけなら不要 prettier でフォーマットされたコードはコンパイルできるのが目標(空白行
発端はuchan_nos氏によるこのツイートでした。 C言語で、本当にメモリの0番地にデータを書きたいときはどうすりゃええの?— うー@技術書典8 Day1う31 BitNOS (@uchan_nos) 2020年2月12日 それに対する私のリプライ: uint8_t *p = 1; p--; *p = v;— hikalium (@hikalium) 2020年2月12日 私はこれで話が終わると思っていたのだが、どうやらそうではなかったらしく、色々な視点からの意見が加わりながら、話は混沌を極めたのでした…。 ということで、ここに私のこのツイートに対しての見解とか、わかったことをまとめておこうと思います。 私のリプライの背景について uchanさんが求める「0番地にデータを書きたい」という課題設定を、私はこのように解釈しました。 C言語において、整数0をポインタに変換すると、それはNULL
本記事は C言語 Advent Calendar 2016 22日目(2週間ぶり3度目) にエントリしています。 当初、12/1で参加した時は4エントリしか参加表明がなかったのに、自転車操業のごとく2度目の参加につながり、気が付いたら25日分全てのエントリが埋まったようです。おめでとうございます。みなさんC言語好きなんですね(?) プログラミング言語Cの sizeof演算子 に関するネタを、基本の"キ"から重箱の隅つつきまで揃えました。1 各話題にはマニアック度(=どうでも良い度合い)を独断と偏見で3段階評価してあります。★が少ないほど広くC言語プログラマに知っておいて欲しい事項(=重要)です。...普通のランキングと逆じゃねーか。 なお本記事の内容は、特に断りがない限りISO/IEC 9899言語仕様(C90/C99/C11)に準じます。また用語の日本語訳はJIS X 3010規格票に合
2015年7月(46歳)から始めた、「C言語でのゲームプログラミングの学習」。当初の目標をほぼ達成することができました。「メガドライブ版ダライアス」完成です。C言語の勉強を始めてから約3年かかりました。ゲームバランス調整、動作確認、バグ修正などまだまだ改善の余地がありそうなので念のためβ版としています。 中学生の頃に一度挫折したゲームプログラミングですが、最近は沢山の書籍や、ネットでも多くの情報を得ることができます。またゲームプログラミングに必要なソフトも充実しています。 *ドットエディタ(EDGE, Photoshop)や、音楽作成ツール (DefleMask, VGM Maker)、秀逸なメガドライブ開発ツールであるSGDKなど。 またブログやツイッターでの皆様からの暖かいアドバイスや応援のメッセージのお陰で、モチベーションを3年間も維持することができました。自分だけの力では途中で挫折
C++のテンプレートメタプログラミングによるコンパイル時C言語コンパイラ、「ltmpc」を作っています。まだまだ実装すべきことはたくさんありますが、最低限動くようになってきました。 ltmpcのはなし 実は、以前にC11のフルセットをサポートするC言語のコンパイラがC++TMP上に実装されたことがありました。 コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 しかし、この自動生成法のアプローチでは、メモリ使用量が爆発する問題から、残念ながら現存するコンパイラで現実的なコンピュータ上で動かすことはできません。 テンプレートメタプログラミングで、C言語のコンパイラほど大きな「動く」プログラムが作られたことは今までになかったように思われます。今回は、いかにして「動く」TMPプログラミングを行っていくか、というおはなしをしたいと思います。 既存技術の紹介 constexprメタ
レールに乗らないで起業するのがブームみたいなので、レールに乗ったまま話もしようかなぁ、と思ったので、書いてみます。 参考: (2021/04/01追記 リンク先が危険なページになってたので、リンクを削除しました。) 過去を語りながら起業に至った経緯を語るのが流行ってるみたいなので、便乗しようかなあ、と思います。もう5年目だけどねw 中学・高校時代 小学校時代は、算数が得意で、筑駒って言う凄い中学に入りました。 でも中学だと、それが全然通用しませんでした。得意分野ならついていけるものの、苦手科目はお話にならず、下1割から2割の成績でした。このあたりで僕は悟ります。僕はそれなりに頭がいいけれども、トップクラスと戦えるほど、平均的に頭が良い人間ではない、ということを。 高2で肘を壊し野球部をやめ、パソコン研究会に頻繁に顔を出すようになります。といっても、そこではボードゲームや麻雀やパソコンのフリ
Hatada's Home Page トップ デジタル回路 音響・音声信号処理 言語処理 機械学習&整数計画 数学・アルゴリズム C言語 & C++ Windows C .NET & C# Java JavaScript PS & WSH & VBS Python アセンブリ言語 シェル&バッチ HTML & CSS ネットワーク データベース LibreOffice FP 新地図システム 地図システム 画像 システム 資料・リンク 雑記 旧版倉庫 索引 C言語入門 マクロ データの読み込み(scanf関数) 数値・文字列変換 算術演算 論理演算 ビット単位のAND/OR演算 シフト演算 配列 配列をポインタで走査する 構造体 共用体(union) ポインタ アルゴリズム 多角形に点が含まれるかどうか判定する シャッフル(配列の要素をランダムに並び替える) ファイル ディレクトリ内のファイ
これは、Competitive Programming Advent Calendar 2014の17日目の記事です。 競技プログラミングという世界を知って1年がたちました。結構飽きやすい性格の自分が1年ほどコンスタントに参加するという充実したプロコン(プログラミングコンテスト)ライフを送ることができた記念に、これからプロコンに参加してみようという方向けの記事を書かせていただきます。CPAC2014参加諸氏のような技術的に高度な内容は残念ながらなさそうですが(書けるものなら書きたい)、10年目エンジニア的視点で自分が感じたことを踏まえて「これはいいものだ」と思えたところなどを中心に振り返ることで、なんとかタイトル詐欺を回避したいと思います。中盤はお目汚し感が強いかも。。 経緯や参加したプロコンなど 半導体関連のメーカーで開発の仕事に従事していますが、2012年に職場都合で富山県に引っ越すこ
ゲームプログラミングにおけるC++の都市伝説 † この記事は、C++ Advent Calendar 2012 22日目の記事です。 Prev 21日目の記事 CEANによる配列操作 Next 23日目の記事 構造化並列プログラミング 時間の関係で3つの都市伝説しかご紹介できませんでしたが、またの機会があれば他の都市伝説についてもお話したいと思います。 2012/12/22 written by h.godai @hgodai 目次 初めに 都市伝説1 C++は遅いのでゲームには向いていない 都市伝説2 boost::poolはゲームには向いていない 都市伝説3 boostライブラリは怪しいライブラリだ。使うと呪われる。 ↑ 初めに † かつて、8bit時代はゲームのプログラムはアセンブラが主流でした。やがて、ゲームのプラットフォームが16bitから32bitになるに従い、C言語でゲームが
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く