binaryに関するyupo5656のブックマーク (19)

  • hogetrace - 関数コールトレーサ - memologue

    でかいソフトウェアの、大量のソースコードを短時間で読む必要が生じたので、その補助ツールとしてptrace(2)ベースのLinux用関数トレーサを自作しました。こういうツール上でまずソフトウェアを実行してみて、どのファイルのどの関数がどういう順で呼ばれるか把握おけば、いきなりソースコードの山と格闘を始めるより楽かなーと思いまして。せっかく作ったので公開します。 http://binary.nahi.to/hogetrace/ straceはシステムコールだけ、ltraceは共有ライブラリ(DSO)の関数呼び出しだけ*1をトレースしますが、このツールは、実行バイナリ中の自作関数の呼び出しもトレースします。例えば再帰で1から10まで足し算するソースコードを用意して % cat recursion.c #include <stdio.h> int sum(int n) { return n ==

    hogetrace - 関数コールトレーサ - memologue
  • memologue - __attribute__((init_priority(N))) で、C++のグローバル変数の初期化順序を制御する

    g++の __attribute__)((init_priority(N)))( なる機能の日語の解説が見当たらないので、いつものように紹介文を書いてみます。これは、C++のグローバル変数の初期化順序を制御するためのGCCの拡張機能(attribute)です。 ごく短い説明 動的な初期化が必要なC++のグローバル変数の定義に__attribute__)((init_priority(N)))(をくっつけると、.oファイル上で、その変数の初期化関数(コンストラクタ等)のアドレスが.ctorsではなく.ctors.M セクションに入ります。M は左0パディング5桁固定の数値で、M = 65535 - N です。あとは、shinhさんの2005/11の記事を。特に、リンカスクリプトのSORTのとこに注目、これにより初期化順がinit_priorityで指定した通りになります。Nが小さい程先に初

    memologue - __attribute__((init_priority(N))) で、C++のグローバル変数の初期化順序を制御する
  • memologue - C/C++の定数の型の話, C90/C99の差分のびみょーな話

    Cのソースコードに m = 195; とか n = 0xffffffff; とか書いたときの定数(右辺)の型って、なんであるかご存じでしょうか? また、C90(1990年版のISO C言語規格)とC99(1999年版のそれ)ではその型が微妙に異なったりすることがあるんですが、ご存じでしょうか? さらには、お使いのマシンがILP32であるかLP64であるかLLP64であるかによっても、微妙に型が違ってきたりするんですが、それについてはどうでしょうか? えーもちろん、普段は「Uがついてなかったらint, Uがついてたらunsigned intジャネーノ?」くらいの理解でも殆ど不自由しないわけですが、詳細な理解がないとハマるケースも稀にあります。 私はというと、上に書いたような事は、C90/99の差違を除いてはだいたい理解しているつもりだったのですが、C90/99の差異について無頓着だったがため

    memologue - C/C++の定数の型の話, C90/C99の差分のびみょーな話
  • Beginner's Guide to Linkers

    This article is intended to help C & C++ programmers understand the essentials of what the linker does. I've explained this to a number of colleagues over the years, so I decided it was time to write it down so that it's more widely available (and so that I don't have to explain it again). [Updated March 2009 to include more information on the pecularities of linking on Windows, plus some clarific

  • GCC 4.xのSSP (Stack Smashing Protector)をH8で使ってみる

    2007/01/27 はじめに GCC 4.1以降、SSP (Stack Smashing Protector)が入っています。 (それより前は、パッチだった。) 組込みもセキュリティが重要とのことで、H8でSSPを試してみます。 ただし、攻撃の検知ではなく、"off-by-one"のようなバグを検知する例を示します。 (バグ退治にも有効そう。) 環境 ハードとしては、 AKI-H8/3069FフラッシュマイコンLANボード を使います。 ROMモニタとして、 MONIX を使っていますが、他のものでも良いです。 Windows XPにcygwin、および、 KPIT の GCC4.1以降に相当するバージョンの h8300-elf-gcc がインストールしてあることを想定しています。 具体的に、動作確認したバージョンは以下の通りです。 $ h8300-elf-gcc -v Using bu

    yupo5656
    yupo5656 2007/01/29
    おー。最近H8であそんでいながら思いつかなかった私は一体何
  • http://svn.uclibc.org/cgi-bin/viewcvs.cgi/trunk/docs/crt.txt?rev=15718&view=markup

    yupo5656
    yupo5656 2007/01/28
    crt*.o
  • 更新履歴兼雑記Dwarf2FS

    RubyFS が微妙に好評だったみたいですが次は JavaFS とかじゃなくて Dwarf2FS です。デバッグ情報をファイルのように眺めよう。ゆくゆくは ptrace のインターフェースとか備えて DebuggerFS になるのです。 例のごとくデモとか。実行ファイルからソースコードが見えてるかのよう。 http://shinh.skr.jp/ttyplay/dwarf2fs.html 種々の事情 (めんどいとか libdwarf めんどいとか) で実装は Ruby FUSE と readelf です。 http://shinh.skr.jp/koneta/dwarf2fs.rb

    更新履歴兼雑記Dwarf2FS
    yupo5656
    yupo5656 2007/01/28
    見落としてました
  • 革命の日々! hidden symbol が PLT経由してるってホンマかいな?

    とBinary Hacks#29を見ながら、高林さんをdisって見るテスト :-) とゆーわけでテスト 以下のファイルを準備 foo.c extern void bar(void); void foo(void){ printf("foo\n"); bar(); } bar.c void bar(void){ printf("bar\n"); } libfoo.map { global: foo; local: *; }; あ、このバージョンスクリプトはfoo関数以外はライブラリ外から 呼べなくするよん。って意味ね > Binary Hack読んでない人へ んで以下のようにコンパイル gcc -shared foo.c bar.c -o libfoo.so -Wl,--version-script,libfoo.map んで objdump -d して、foo関数を見ると以下 000000

  • デバイスドライバを書かずにIOを読み書きする (UserLandIO) - CAT Wiki

    デバイスドライバを書かずにIOを読み書きする † LinuxではI/Oポートの読み書きにはデバイスドライバを書く必要があります。しかしデバック時や簡易的な治具を作るなど、デバイスドライバの作成を省略したいこともあると思います。 このページでは簡易的なI/Oルーチンとして、デバイスドライバを書かずにI/Oポートを読み書きする方法について解説します。ただしこの手法は簡易的なものであり、格的な開発にはあまりお勧めできません。この手法でアプリケーションを開発、デバックし最終的にはデバイスドライバ化することをお勧めします(理由はページの最後に記述します)。 ただ、今までドライバプログラミングが難しそうだからと、せっかくのLinuxボードでもI/Oプログラミングできずに放置されていた方にとっては、はじめの第一歩として学習、研究に大変おもしろい課題と思いますからこれを機にI/O操作の面白さをしってい

    yupo5656
    yupo5656 2007/01/23
    /dev/mem
  • 64ビットCPU(AMD64+EM64T)でアセンブラ

    【カーネルモードへ移行する方法】 WindowsNT/2000 int 2E(割込みゲート) WindowsXP/2003(x86版) sysenter WindowsXP/2003(x64版) syscall Windows95/98/Me call(コールゲート) int 2E(割込みゲート)とcall(コールゲート)は32ビット世代の最初のCPUである386から利用可能な方法です。(正確にはプロテクトモードが導入された286(16ビットCPU)からですが。) これに対し、sysenterはインテルがPentiumIIで導入した命令、 syscallはAMDが(たしか)K6で導入した命令です。 なおsyscallはEM64Tでも利用可能です。 速度比較 これらの方法で速度にどの程度の差があるのかをテストしてみます。 以下のプログラムを使います。 【syscall.c】 // カーネ

    yupo5656
    yupo5656 2007/01/23
    sysenter / int 0x2e
  • 2006-01-03

    明日は帰る。 続き。 まず、ソフトウェア割り込みを使ったWindowsでのシステムコール呼び出しは、Linux等の方法と大体一緒だ。eaxレジスタにシステムコール番号を入れて、ソフトウェア割り込みをかけてやればよい。割り込み番号は0x2e。引数は全てスタックに積んでおく。 pushl *** # なんか引数 movl $0x***, %eax # *** = システムコール番号 int $0x2eシステムコール番号は、http://www.metasploit.com/users/opcode/syscalls.htmlが参考になる。 で、ここで少し問題になるのが、機能とシステムコールの対応だ。ここらへんは、多分、名前から機能推測、って方法しかないかもしれない。あとは、ReactOSのソース(/ntoskrnl以下)見るとか。 んで、昨日のソース。あれは、「自分自身を終了するプログラム」。

    2006-01-03
    yupo5656
    yupo5656 2007/01/23
    int 0x2e, 参考資料がmetasploit..
  • Mach-O入門 - mteramoto's blog

    Mach-O(Mach object) Mach-OとはMach objectの略で、Mac OS Xでプログラムやライブラリをディスクに格納する際に使用されるファイルフォーマットです。Mach-Oのファイルは、先頭にヘッダがあり、load commandおよびsegmentがその後にあります。segmentは複数のsectionを含んでいて、1から連番が振られています。 これらのヘッダの構造は、mach-o/loader.hに記述されています。 Mach-Oヘッダ Mach-Oファイルは1つのアーキテクチャ向けのコードとデータを格納しています。どのアーキテクチャ向けのファイルかは、Mach-Oヘッダに格納されています。複数のアーキテクチャ向けのMach-Oファイルをまとめたものが、いわゆるユニバーサルバイナリと呼ばれるものです。 Mach-OヘッダはすべてのMach-Oファイルの先頭に必

  • http://homepage1.nifty.com/herumi/soft.html

    yupo5656
    yupo5656 2007/01/14
    IA32(x86)JITアセンブラ Xbyak
  • Web2.0の先にあるC10K問題 ― @IT

    個々のクライアントがサーバに要求する処理量は小さなものでハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする――。これが最近Web開発者の間で話題となっている「C10K問題」(クライアント1万台問題)だ。 プロセス番号が足りなくなる パンクするのは例えばプロセス番号だ。 Ajaxの実装として最近注目されている技術に“Comet”(コメット)と呼ばれるものがある。HTTPのセッションをあえて切断せずに、サーバとクライアント間でつなぎっぱなしにするテクニックだ。Cometを使えばクライアントからのリクエストに応えるだけでなく、サーバ側からも不定期に情報を送り出すことができる。例えば、Web上でチャットサービスを実装するには、通常はクライアント側からサーバに一定間隔でポーリングすることで、ほかのユーザーの発言分をサーバから取得して表示するが、Cometの

    yupo5656
    yupo5656 2007/01/10
    『1万スレッドであれば20GBのメモリが必要になる』は1プロセス内に1万スレッドだと、ということか。「メモリ」という語も誤解を招きそう(VSZの話ね)。1プロセスに与えられたアドレス空間(3GB)では不足する、くらいが妥当。
  • TAKESAKO @ Yet another Cybozu Labs: Web2.0時代のAjax Binary Hacks

    ※公開用にいくつか手を加えてあります 前フリが長いとのツッコミがありましたので、今回の発表内容を少し要約してみたいと思います。 1. GIF Format Hacks (Server side) まずは、任意のpixelサイズ(幅・高さ)を持った画像ファイルを固定長の35byteで出力する方法 #!/usr/bin/perl use strict; use warnings; sub create_gif { my $size = pack "S2", @_; return "GIF89a$size\xf0\x00\x00\x00\x00\x00\xff\xff\xff," . "\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02L\x01\x00;"; } print "Content-Length: 35\n"; print "Content-Ty

    yupo5656
    yupo5656 2006/12/21
    面白かった
  • Article Detail - Nintendo Wii News - QJ.NET

    Posted Dec 17, 2006 at 12:49PM by Kyle M. Listed in: Controller, Mods Tags: Linux, Wiimote, Sony, SIXAXIS Sony may have called the Wiimote a bit of a gimmick, but just a week after this statement from a Sony spokesperson comes a public demonstration of a PS3 running Linux using - you've guessed it: a Wiimote as a mouse. Last week the exact words of Sony were, "We feel very confide

  • バイナリアン御用達マフラー | 秋元@サイボウズラボ・プログラマー・ブログ

    バイナリアンが身に着けるにふさわしいマフラーがこれ。 # 僕自身はバイナリアンの素養はないけど。 ここでも黒地に緑か(笑) 写真のものは全部で122bytes分の情報量を持つということだ。設計書はオープンソースとしてページ下部に記載されているが、それを読むには別途インストラクション一覧を参照する必要がある。 この記事は移転前の古いURLで公開された時のものですブックマークが新旧で分散している場合があります。移転前は現在とは文体が違い「である」調です。(参考)記事の内容が古くて役に立たなくなっている、という場合にはコメントやツイッターでご指摘いただければ幸いです。最新の状況を調べて新しい記事を書くかもしれません

    バイナリアン御用達マフラー | 秋元@サイボウズラボ・プログラマー・ブログ
  • Binary 2.0カンファレンス2006 - bkブログ

    Binary 2.0カンファレンス2006 Binary 2.0 カンファレンス2006 を 2006年12月15日に開催します。 当日はビデオストリーミングによるライブ中継を行う予定です。 主催 - Binary 2.0 カンファレンス実行委員会 (協力 Shibuya.pm)日時 - 2006年12月15日 (金) 18:30-21:00 (18:00 開場)会場 - 神保町三井ビル 17F 株式会社インターネットイニシアティブ (IIJ) 大会議室参加費 - 無料事前登録 - 定員100名 ((定員に達したので締め切りました)ライブ中継: i-revo, Loocプログラム 内容・順番・時間などは予告なく変更する場合があります。昨年の概要 無事に終了しました。当日の模様は発表資料とレポートをどうぞ。 ブログラム概要Inside Binary Hacks - 高林哲Hello, bin

    yupo5656
    yupo5656 2006/12/09
    b2con2006
  • 鵜飼本がコンピュータ書籍ランキングの上位2位を独占 - bkブログ

    鵜飼がコンピュータ書籍ランキングの上位2位を独占 書泉グランデによるコンピュータ書籍ランキングの 2006年12月5日分の上位2位を鵜飼さんのが独占していました。 1位の Binary Hacksはこのブログで何度も紹介しているです。鵜飼さんは著者の1人です。私も執筆に携わっています。正直なところ、著者もオライリーの人も誰もこんなに売れるとは予想していませんでした。2週連続で1位とのこと、ありがたいかぎりです。 2位の Write Great Code (Vol.2) は以前に紹介した Write Great Code の続編です。鵜飼さんは監訳者の1人です。今回はコンパイラがどんなマシン語コードを生成するかがメインのテーマとのことで、非常に楽しみです。正月にでも読もうと思っています。監訳者の1人の八重樫さんによる紹介が参考になります。 上位2冊が低レベルのプログラミングであるとこ

  • 1