タグ

gccとプログラムに関するiwwのブックマーク (12)

  • データ型モデル ‐ 通信用語の基礎知識

    処理系が用いるデータ型の大きさなどを定義するものであり、特にプログラミング環境で重要となる。 現在使われているプログラミング言語には、整数型の実際の大きさを保証しないものがあり、データ型モデルに応じて変化する。 ある特定のデータ型モデルに依存したプログラムも簡単に書くことができるが、そのようなものは移植性が無いということである。 16ビットから32ビットに移行する時代、Cなどでこの問題が頻発した。 16ビット環境では、変数長は次のようであった。 char: 8ビット short: 16ビット int: 16ビット long: 32ビット long long: 存在しない ポインター: 16ビット (far修飾子を付けると32ビット) 32ビット環境では、intとポインターが32ビット化された。 例えばこの当時、特にx86環境ではnearポインターとfarポインターがあり、実装によりhuge

  • プログラム高速化の禁術 - Qiita

    はじめに これは昔(2010年頃)自分が使っていた高速化技法について書いたものです. 今となってはレガシーだったり,通用しないものもあるかもしれませんが,こういう知識も無くなってしまったり,自分も忘れてしまう気がしたので,メモ代わりに書いておきます. ただ言えることは,「最適化はするな」ということです.最適化すると,保守性が大幅に失われる危険性があります.そして,これから書く項目を1つ1つ行って,高速化できたとしても,せいぜい2倍程度です.ただその2倍程度の速度も欲しい!そのためには悪魔に魂と保守性を売る!という方はご覧ください.これらの高速化は割といろいろな言語に当てはまることも多いですが,大体C++で書くことを念頭に置いていただければ,幸いです.あと,個人的には競技プログラミングだったり,計算科学をやっていた時期に見つけた経験則なので間違ってる場合もあります. コンパイルオプションをこ

    プログラム高速化の禁術 - Qiita
    iww
    iww 2018/06/27
    「newするな」と「deleteするな」はバグを減らす効果もあるので良いと思う。
  • Using and Porting the GNU Compiler Collection (GCC) - GCCコマンド・オプション

    GCCを起動すると、 通常は、 前処理(preprocessing)、 コンパイル、 アセンブル、 リンクが行われます。 「全体的(overall)オプション」によって、 この一連の処理を中途の段階で停止することができます。 例えば、 `-c'オプションはリンカを起動しないよう指示するものです。 この場合、 アセンブラによって生成されるオブジェクト・ファイルが出力となります。 他のオプションは、 一連の処理の中の1つの段階に渡されるものです。 オプションの中には、 プリプロセッサを制御するものもあり、 コンパイラ自体を制御するものもあります。 また、 アセンブラやリンカを制御するオプションもありますが、 それらのほとんどは、 ここではドキュメント化されていません。 というのは、 このようなオプションを使うことが必要になることはめったにないからです。 GCCにおいて使うことのできるコマンドラ

    iww
    iww 2017/08/22
    『-llibrary リンク時に、 libraryにより指定される名前のライブラリを探します。コマンドの中のどこにこのオプションを指定するかによって、 違いが出てきます。』 知らなかった そんなの・・・
  • gprof

    コンパイルとリンク時に-pgオプションをつける。 gcc -pg -o test test.c makefileを利用する時には、リンク時のオプションを付け忘れることが多いので注意。 ( -pg を付けて作成した)プログラムを普通に実行する。 プログラムが正常終了すると、 カレントディレクトリに gmon.out というファイルが生成されている。 (Ctrl-Cで止めたり、Segmentation Faultで異常終了した時には gmon.out は生成されないので、注意しよう。) ./test ls -F gmon.out test test.c

  • Linux, gccという環境で、プログラムの実行速度プロファイルをとりたいと思っています。…

    Linux, gccという環境で、プログラムの実行速度プロファイルをとりたいと思っています。 ソースコードに特定のコードを埋め込むと、各処理にかかった時間などを調べてくれる標準的な方法を教えてください。

  • プログラムにバイナリーファイルを組み込む方法 | うだうだブログ

    2012年7月4日水曜日 Category - プログラミング, 電子工作 Tag - chan氏,stm32 Comment : 0 ffsample.zipの中にあるchanさんのファイラーのプログラムではFONTX形式(FONTX2?)のファイルを直接プログラムに組み込んでいる。やり方を調べると、IMPORT_BINというマクロが定義されていた。 C言語のasm文でアセンブラ(gnu assembler)を呼び出し、.incbinという命令でバイナリーファイルを直接プログラムに組み込んでいるわけである。.incbinという命令は知らなかった。便利な命令があるものだ。 この機能を使ってフォントファイルとBMP形式の画像ファイルをプログラムに埋め込んでしまった。それ以外に、C言語の形式でShiftJISとUNICODEの変換表(chanさんのFatFSのサンプル実装に入っていた)も組み込

  • main() の前に関数を呼ぶ - bkブログ

    main() の前に関数を呼ぶ C/C++ のプログラムで、main() の前に関数を暗黙的に呼びたいときがあります。ここでは GCC の拡張を使った方法と、C++ のコンストラクタを使った方法を紹介したいと思います。 GCC では main() の前に呼ばれる関数を __attribute__((constructor)) という拡張機能を使って定義できます。たとえば、次のプログラムでは main() の前に foo() が呼び出されます。 #include <stdio.h> __attribute__((constructor)) void foo() { printf("hello, before main\n"); } int main (int argc, char **argv) { printf("hello, world\n"); return 0; } 実行結果は以下の

  • IBM Developer

    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.

    IBM Developer
    iww
    iww 2010/09/05
    カナリアの飼い方
  • gccの-fstack-protectorとか - SYNjuku-ACKihabara

    http://vrt-sourcefire.blogspot.com/2009/07/how-do-i-become-ninja.htmlを読んで http://community.corest.com/~gera/InsecureProgramming/をやってみた WARMING UP on STACKではこんな感じの明らかに脆弱なプログラムが問題になっている /* stack1.c * * specially crafted to feed your brain by gera */ int main() { int cookie; char buf[80]; printf("buf: %08x cookie: %08x\n", &buf, &cookie); gets(buf); if (cookie == 0x41424344) printf("you win!\n"); } W

    gccの-fstack-protectorとか - SYNjuku-ACKihabara
    iww
    iww 2010/08/03
    カナリアの飼い方。gcc4.1以降
  • スタックプロテクターは alloca 割り当てを使うプログラムも守ってくれるか? - IKB: 雑記帳

    先だって同僚からそんな疑問を受け、気になっていたので調べた。結論から言うと、守ってくれる。 そもそもスタックプロテクターは、関数呼び出し時にスタックフレーム内の戻りアドレスの直上にカナリア変数を置き、呼び出し元に返る前にカナリア変数がオーバーフローによって破壊されていないことを確かめるという実装だから(つまりカナリア変数が壊れていたら戻りアドレスも壊されているだろうから、そこへ ret してはいけないと判断する)、スタックが可変長だろうと関係なく守ってくれるっていうわけ。 というわけでサンプルコード。 /* stack-protector.c */ #include <stdlib.h> /* for alloca */ #include <memory.h> /* for memset */ void f() { memset(alloca(1), 0x90, 56); } int ma

    スタックプロテクターは alloca 割り当てを使うプログラムも守ってくれるか? - IKB: 雑記帳
    iww
    iww 2010/08/02
    カナリアの飼い方。
  • IPA ISEC セキュア・プログラミング講座:C/C++言語編 第10章 著名な脆弱性対策:バッファオーバーフロー: #5 運用環境における防御

    第10章 著名な脆弱性対策 バッファオーバーフロー: #5 運用環境における防御 近年、オペレーティングシステムには、バッファオーバーフロー等の攻撃を失敗に終わらせるためのいくつかの防御機能が備わりつつある。それは、主に次の3つである スタック保護 関数リターンアドレス書き変えを検出し、それ以上の実行を止める メモリ空間レイアウトのランダマイズ メモリ上の特定の位置を狙ってのアドレスワードの不正書き変えや、侵害コードへのジャンプといった操作を失敗させる データ実行防止 万一侵害コードへのジャンプが行われたとしてもデータ領域に置かれた機械語コードを実行させない スタック保護 近年Cコンパイラも進歩し、関数をコンパイルして生成される機械語コードの中に、領域あふれによってスタック上の関数リターンアドレスが改変されていることを検知する機械語コードを挿入できるものが登場している。 その主なものが、G

    iww
    iww 2010/08/02
    カナリアの飼い方。-fstack-protector-all
  • Doug Lea の malloc (dlmalloc) - bkブログ

    Doug Lea の malloc (dlmalloc) 小さなオブジェクトを大量に new しまくるプログラムを C++ で書いたところ、処理時間の多くが malloc() に費やされていることがわかりました。このような場合、自前でメモリ管理を行って最適化するという方法がありますが、なかなか大変です。 そこで、安易に高速な malloc に置き換えてみようということで、 Doug Lea の malloc (通称 dlmalloc) の最新版を試してみました。 dlmalloc の使い方 dlmalloc は 1ファイルをダウンロードしてビルドすれば使えます。次のように実行すると共有ライブラリ libdlmalloc.so を作れます。現時点でのバージョンは 2.8.3 でした。 % wget ftp://g.oswego.edu/pub/misc/malloc.c % gcc -O2

    iww
    iww 2009/12/22
    『シングルスレッドで動作するプログラムには不用意に libpthread.so をリンクしないこと、ということが重要なポイント』
  • 1