タグ

binaryに関するhideokiのブックマーク (8)

  • バイナリファイルを解析する

    Perlといえばテキスト処理や正規表現が得意で、バイナリを扱うような話についてはあまり聞かない印象があります。Perlが持つ関数pack/unpack等でもバイナリ処理は可能ですが、今回はData::ParseBinaryを使ってバイナリファイルを気軽に解析してみましょう。 基 ファイルからストリームを作る 解析したいファイルをData::ParseBinaryで扱えるストリームに変換します。 use Data::ParseBinary; my $stream = CreateStreamReader(File => $file_handle); 解析したい構造を定義する Struct関数で解析したい構造を定義します。Struct以下には基データ型やコンテナ型、ビット/バイトパディング型、制御構文型等を使用できます。各型に指定したラベルが解析結果として得られるハッシュのキーとなります。

  • バイナリシリアライズ形式「MessagePack」 - Blog by Sadayuki Furuhashi

    Googleが公開したバイナリエンコード手法であるProtocol Buffersは、クライアントとサーバーの両方でシリアライズ形式を取り決めておき(IDL)、双方がそれに従ってデータをやりとりするようにします。 この方法では高速なデータのやりとりができる反面、IDLを書かなければならない、仕様を変えるたびにIDLを書き直さなければならない(あらかじめしっかりとIDLを設計しておかないとプログラミングを始められない)という面倒さがあります。 ※追記:Protocol BuffersのデシリアライザはIDLに記述されていないデータが来ても無視するので(Updating A Message Type - Protocol Buffers Language Guide)、仕様を拡張していっても問題ないようです。 一方JSONやYAMLなどのシリアライズ形式では、何も考えずにシリアライズしたデータ

    バイナリシリアライズ形式「MessagePack」 - Blog by Sadayuki Furuhashi
  • プログラムはどう動くのか? 〜 ELFの黒魔術をかいまみる

    もう締切日なのにネタがない。というわけで簡単なプログラム "hello, world" がどのように起動され、どのように処理されて動くのかを無意味に詳しく解説してみよう。 #include <stdio.h> int main(int argc, char *argv[]) { printf("hello, world\n"); exit(0); } この hello.c をコンパイルすると次のようなhelloというバイナリができる % cc -g -o hello hello.c この hello というバイナリは % file hello hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs),

  • 浮動小数点演算ではまった話 - bkブログ

    浮動小数点演算ではまった話 浮動小数点演算のありがちな問題ではまりました。 いろいろ調べているうちに x86 特有のちょっとおもしろい 現象に遭遇したので紹介したいと思います。 パーセンテージの計算 簡単な C のプログラムでパーセンテージを計算しようと思い、 次のようなコードを書きました。 int x, y; ... int a = (double)x / y * 100; int a = x * 100 / y としないのは、 x が大きい場合に x * 100 が オーバーフローを起こす (INT_MAX を越える) ためです。 このコードは一見、期待通りに動いていたのですが、 しばらく使っていると、手元の環境では x = 53, y = 100 のときに a は 53 ではなく 52 になることに気づきました。 これは次の理由によります。 式の最初の (double)53 / 10

    hideoki
    hideoki 2007/03/05
    x87の浮動小数点が80bitで計算される問題
  • 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

  • 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

  • statifier で動的リンクの実行ファイルを擬似的に静的リンクにする - bkブログ

    statifier で動的リンクの実行ファイルを擬似的に静的リンクにする statifierは動的リンクされた実行ファイルと共有ライブラリを1つのファイルにまとめるための Linux 用のツールです。動的リンクされた実行ファイルを別のホストにコピーして実行したい、というときなどに使えます。 statifier は現在のところ Debian パッケージになっていないようなので、ソースコードから make && make install します。 % tar zxf statifier-1.6.7.tar.gz % cd statifier-1.6.7 % make % sudo make install 使い方は簡単です。ターゲットの実行ファイルと新しいファイル名をコマンドオプションで指定して statifier を実行するだけで OK です。たとえば /usr/bin/php と共有ライブ

  • objcopy で実行ファイルにデータを埋め込む

    普通のやつらの下を行け: objcopy で実行ファイルにデータを埋め込む プログラムの実行に不可欠なデータをファイルから読み込んで利用することがあります。この方法を用いると、データの更新が手軽にできるという利点がある一方で、単体の実行ファイルで実行できない、データファイルが紛失してしまう、といった問題もあります。 普通のやつらの下を行けの第5回として、今回は objcopy を用いて実行ファイルにデータを埋め込む方法を取り上げたいと思います。 データの埋め込み 小さなデータをソースコードに埋め込むのは簡単です。ソースコード中に埋め込まれている "hello, world" などのメッセージはソースコードに埋め込まれたデータといえます。 一方、画像や辞書などの巨大なデータをソースコードに埋め込むのはそう簡単ではありません。まず、データを文字列などに変換する必要がある上に、変換後の巨大なソー

    hideoki
    hideoki 2005/11/13
    バイナリハックリタイ
  • 1