タグ

Cに関するaritekuのブックマーク (20)

  • C/C++ セキュアコーディングセミナー資料 | JPCERT コーディネーションセンター

    これまでにC/C++ セキュアコーディングセミナーで使用した講義資料を公開しています。2010年度にセミナを実施した、文字列、整数、動的メモリ管理、書式指定文字列、CERT C セキュアコーディングスタンダード、ROSE については、それぞれ最新版の資料を掲載しています。 文字列 ユーザとソフトウエア間に発生するデータのやりとりの大部分は文字列によって行われます。 また、プログラム間でのデータ交換も文字列形式で行われるようになり、その結果、文字列表現や文字列管理、文字列操作における弱点がソフトウエア脆弱性を生み出しています。 文字列では、C/C++ 言語における文字列操作、一般的なセキュリティ上の欠陥と、その結果発生する脆弱性と対処方法について解説します。 C/C++ における文字列の特性 犯しやすい文字列操作の間違い 文字列の脆弱性 プロセスのメモリ構成 スタック破壊の仕組み コードイン

    C/C++ セキュアコーディングセミナー資料 | JPCERT コーディネーションセンター
  • [迷信] とりあえず memset で初期化 | 株式会社きじねこ

    よく見かけるコードですが、上のコードは、必ずしも期待した結果になるとは限りません。なぜなら、double 型やポインタ型は、これらを構成する全ビットが 0 になったとしても、オブジェクトの値が 0 になるかどうかは分からないからです。 確かに、ほとんどの処理系では上記のコードでも問題なく、そして期待通りに動作します。しかし、それはあくまでも"たまたま"動いているに過ぎません。そうした不安定な要素をなくすために行った初期化が、かえってコードを怪しくしてしまっているのです。 単に、集成体の全要素をゼロクリアしたいだけであれば、 とすれば十分です。こう書くと、おそらく次のような反論が返ってくることでしょう。「その方法では、構造体の詰め物がゼロクリアされない」と。しかし、構造体の詰め物にアクセスして、言語仕様上保証される結果を期待することには無理があります。 構造体の詰め物をゼロクリアしたい理由は

    ariteku
    ariteku 2011/07/04
    んー普通にmemsetしてる…。
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    ariteku
    ariteku 2011/07/01
  • while(1){LOVE++;}を最適化 - duost

    最近ツイッターで "while(1){LOVE++}"と書き込まれてる指輪があって、 そのソースは最適化でLOVEが消えてただの無限ループになる云々という話があったので検証。 http://togetter.com/li/144840 用意したソースはこちら。 int main() { int LOVE = 0; while(1){LOVE++;} } それじゃアセンブラを見てみましょ。 まずは最適化抜き。 gcc -O0 -s hoge.c .file "hoge.c" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp subl $16, %esp movl $0, -4(%ebp) ;LOVE=0 .L2: addl $1, -4(%ebp) ;LOVE++ jmp .L2 ;JUMP TO

    while(1){LOVE++;}を最適化 - duost
  • http://www.g-ishihara.com/c_st_01.htm

    ariteku
    ariteku 2011/06/06
  • データ型のアラインメントとは何か,なぜ必要なのか?

    以前このサイトとブログに,何度かアラインメントに関する記事を書きました (サイト内関連ページ参照). そのせいか「アラインメント」で検索して来てくれる人が多いので, 過去の記事に加筆修正してこのページを新たに作成しました. 加筆した点は次のとおりです. アラインメントとメモリアクセス回数の関係をわかりやすくするため, (ほんの少し) 図を導入しました. 「データがアラインされていないとメモリアクセス回数が増える」 と言葉で説明しているサイトは多いのですが, 図で示しているところはまだ見たことありません. アラインされていないアドレスにデータを書き込む場合, 読み出しの場合以上にメモリアクセス回数がかかる可能性があることを追記しました. 以前は「複合データ型 (配列,構造体,共用体) のアラインメント」はほとんど自明のことだと思っていたので軽く流していましたが, 意外なことにこれを解説してい

    ariteku
    ariteku 2011/06/06
    アライメントとは?
  • Super Technique 講座~goto 文が有用な場合

    goto 文の利用とは、神学論争ではなくて、「リソースバランス」の問題である。この視点によって goto 文という議論の多いC言語機能を検討するのが、この論の目的である。goto 文の利用は「常に不可である」とする教条主義者はこんな論は読まずに、信仰の道を歩まれるのが良かろう。 リソースバランス 多重脱出 依存するリソース リソースバランス まず、「リソースバランス」という大変重要な問題について考えてみよう。「リソースバランス」とは、平たく言えば「使ったものは片付けなさい」ということに過ぎない。オープンしたファイルは必ずクローズするし、malloc(3) したメモリは必ず free(3) する。これを確実に行わないことには、いわゆる「メモリリーク」「リソースリーク」が起きて、長時間動作したり、大量のリソースを消費するプログラムでは、性能が制限されることになったり、OSの動作に悪影響(スラッ

    ariteku
    ariteku 2011/06/06
    goto文、構造化
  • 【goto文使いのプログラミングの考え方は?】 構造化をサポートする言語(C/C++, Javaなど)を知る前に、行番号付きBASICやアセンブリ言語のようなgoto文(ジャ…

    goto文使いのプログラミングの考え方は?】 構造化をサポートする言語(C/C++, Javaなど)を知る前に、行番号付きBASICやアセンブリ言語のようなgoto文(ジャンプ命令)ありきの言語を習得した人はどういう発想でプログラミングしているのでしょうか? 私は構造化言語(C言語)を先に習得したので、アルゴリズムをif文やwhile文の組み合わせで考えてから、アセンブリ言語の場合、それをジャンプ命令によって置き換えていきます。私にとって、これ以外の考え方ができないわけですが、非構造化言語を先に習得した人はgoto文ありきでサクサクとプログラミングしてるんでしょうか?その辺の感覚的なところであるとか、そうした上でスパゲティコードにならないように気をつけている点などありましたら、教えてください。

  • [迷信] 入力データ格納用配列のサイズは BUFSIZ | 株式会社きじねこ

    ariteku
    ariteku 2011/05/30
  • 文字列操作は「C言語最大の欠点」か? | スラド デベロッパー

    ITProのコラム「記者の目」は複数の日経BPの雑誌記者が記事にはしにくい個人的な意見などを書いている人気コラムだが、最近「C言語最大の欠点」というタイトルのコラムが掲載された。 どうやらタレこみ子と同世代らしい記者は、C言語最大の欠点を文字列処理であると断じ、特にバッファーオーバーフローの回避のためのコードを書くのが大変なところと論じている。そして、C++でSTLのstringクラスを使うべし、と主張している。 タレこみ子の乏しい経験からいうと、バッファーオーバーフローの問題は確かに大きな問題だが、それは「文字列」処理で起きるというよりは、ネットワークから受信する「データ列」の処理で起きるケースのほうが多いように思う。STLについては詳しくないのだが、stringクラスは'\0'も含みうるデータ列を正しく処理できるのだろうか。 また、バッファーオーバーフローは問題として理解しやすく、コー

    ariteku
    ariteku 2011/05/27
  • Cは既に時代遅れ? | スラド デベロッパー

    「どうも周知徹底が不足しているようなので再度のお願いとなりますが、C死ね。」などと言われるように、いつの間にかCは忌避すべき言語に成り下がったらしい。 /.J読者諸兄にはCでのプログラミングに造詣が深い方も多数いらっしゃると思いますが、どうでしょうか? 個人的には、自分が気に入らないからといって他人の志向をとやかくいうのもどうかと思いますが、COBOLerとかFORTRANマンセーな方々の意見も聞いてみたい。

    ariteku
    ariteku 2011/05/27
  • SimpleText DAY 4 - lookup_widget関数を使ってみる - 深く、広く、高く

    いよいよソフトの機能を構築するところに入っていきます。 OPENボタンをclickすると、entryに入力されているファイル名を開く という機能を実装したいので、ひとまず、 OPENボタンをclickすると、entryに入力されている文字をコマンドラインに出力 するようにしてみましょう。 手を加えるのは、callbacks.c の on_button_open_cliecked です。 entry内の文字列を取得する関数は const gchar* gtk_entry_get_text (GtkEntry *entry); という形で定義されていて、entryのポインタが必要です。 callback関数の引数に渡しておくという手もあるのですが、今回はlookup_widget関数を使ってみます。 lookup_widgetはgladeがsupport.c内に準備してくれた関数で、 ]同じウ

    SimpleText DAY 4 - lookup_widget関数を使ってみる - 深く、広く、高く
  • https://oshiete.goo.ne.jp/qa/751720.html

    ariteku
    ariteku 2011/05/11
    2重にアドレッシング = ポインタのポインタを参照していしまう
  • 関数型プログラミングと代入 - あどけない話

    関数型プログラミングでは、よく「代入は使ってはならない」と言われます。関数型言語の一種である Emacs Lisp を生業とする僕は、この言葉に長年悩まされてきました。代入を使わないで実用的なプログラムを書くことは無理だからです。 もちろん、問題の内容が数学の関数に類似したものなら、代入も副作用もないプログラムを書くことは簡単です。階乗(factorial)のコードは、以下のように奇麗に実装できます。 (defun factorial(n) (if (= n 1) 1 (* n (factorial (1- n))))) しかし、こう書けることと、実際にこう書くかということとは別問題です。 Scheme のように末尾最適化を実装していて、末尾再帰をループに変換してくれるなら、上記を末尾再帰に変換したコードを書くでしょう。 しかし、Emacs Lisp には末尾最適化がありませんから、スタッ

    関数型プログラミングと代入 - あどけない話
    ariteku
    ariteku 2011/05/11
  • メモリの二重解放回避テク - akihiko’s tech note

    メモリの二重解放とは, new などで確保したメモリ領域(ヒープ領域)を2回 delete などで解放することを言う. new と delete をきちんと対応させて書いていないときに起こる問題だ.特にクラスのメンバに動的確保したメモリへのポインタを含む場合にやってしまいがちである.ここでは二重解放によって発生する問題を解説する. 結論から言うと,メモリを解放した後 (delete p1;),ほかの用途でメモリを確保し (p2=new T;),たまたまそれが解放したメモリと同じアドレスに割り当てられてしまった場合 (p1==p2),最初のメモリを二重解放すると (delete p1;),新しく確保したメモリ (p2) が解放されてしまう.この結果,新しく確保したメモリにアクセスすると値が書き換えられていたり,セグメンテーションフォルトが発生する場合がある.プログラマはまず,新しく確保したメ

    メモリの二重解放回避テク - akihiko’s tech note
    ariteku
    ariteku 2011/05/10
  • プログラミング・メモ - MySQL の C API を使ってみる

    そういや MySQL の C API って使ったことないなー,と思ったので,使ってみました。簡単なテストしかしていません。とりあえず,ソースから。 #include <stdio.h> #include <stdlib.h> #include <mysql.h> int main (int argc, char *argv[]) { MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; const char *server = "localhost"; const char *user = "aian"; const char *password = "password"; const char *database = "test"; conn = mysql_init(NULL); if (mysql_real_connect(conn, server,

  • Charming Python: Functional programming in Python, Part 3

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    Charming Python: Functional programming in Python, Part 3
  • C言語関数辞典 - C言語Tips集

    ここでは C言語に関するTipsを各カテゴリーごとに掲載しています. 以下の一覧からご覧になりたいカテゴリーをクリックして下さい.

    ariteku
    ariteku 2011/05/09
  • 勇躍のゴミ箱

    C言語 目的別 画面への文字出力 画面へ1文字単位で出力 画面へ1行単位で出力 画面へ書式付きで出力 可変個引数を書式付き表示 キーボードから文字入力 入力を1文字単位で取得 入力を1行単位で取得 入力を書式付きで取得 ストリームに1文字戻す 文字列データの入出力 文字列から書式付きで取得 文字列へ書式付きで出力 可変個引数を書式付き出力 ファイルオープン ファイルを開く ファイルを閉じる ファイルオープンのモード 標準入出力について ファイルの読み込み テキストファイルの読込 空白区切りファイルの読込 CSVファイルの読込 バイナリファイルの読込 ファイルの書き込み テキストファイルの書込 CSVファイルの書込 バイナリファイルの書込 可変個引数をファイルへ書込 ファイル関連 ファイル位置の取得 ファイル位置の設定 ファイル位置の取得2 ファイル位置の設定2 ファイル位置を先頭に戻す フ

    ariteku
    ariteku 2011/04/25
  • ポインタと文字列

    10-3.ポインタと文字列 普通ポインタを用いるときには、配列などのアドレスをポインタに設定して用いますが、 文字列の場合には、配列を使わずにメモリ上に取られた文字列のアドレスを直接ポインタに指定することができます。 (1)1つの文字列をポインタで表す (書き方) char *p = "ABC"; char *p; p = "ABC"; まずメモリ上のどこかに文字列 "ABC" がとられ、その先頭番地がポインタに設定される。

  • 1