タグ

binaryに関するtotonのブックマーク (26)

  • objcopyでCのシンボル置換 - みずぴー日記

    http://q.hatena.ne.jp/1227069551 ボクも昔、同じようなことがやりたかったことがあります。 で、そのときはよくよく考えるとソースコードのシンボルを置換しなくても、最終的な成果物のシンボルが置換されていればいいことに気がついてので、objcopyの--redefine-symsを使いました。 http://www.geocities.jp/fut_nis/html/binutils-ja/objcopy.html

    objcopyでCのシンボル置換 - みずぴー日記
    toton
    toton 2011/01/10
    「objcopy の --redefine-syms」
  • はじめてのひき - PortableBinaryHacks

    Binary Hacks は GNU/Linux & x86 メインですが、 それ以外だとどんな感じだろうってことを書くところです。 私が個人的にいじってるものですが、 他の人にいじってもらっても問題ありません、 というか知らないことだらけなのでありがたいです。 1. イントロダクション Binary Hack入門 Binary Hack用語の基礎知識 file でファイルの種類をチェックする od でバイナリファイルをダンプする 2. オブジェクトファイルHack ELF 入門 静的ライブラリと共有ライブラリ ldd で共有ライブラリの依存関係をチェックする readelf で ELF ファイルの情報を表示する objdump でオブジェクトファイルをダンプする objdump でオブジェクトファイルを逆アセンブルする objcopy で実行ファイルにデータを埋め込む nm でオブジェク

    toton
    toton 2010/10/19
    "Binary Hacks は GNU/Linux & x86 メインですが、 それ以外だとどんな感じだろうってことを書くところです"
  • セクションとか.textとか

    キーワード セクション, オブジェクトファイルフォーマット, .text, プログラムローダ, ELF(Executable and Linkable Format) これだけは覚えよう プログラムは複数のセクションという単位に分割されている 原因と原理 私たちが日ごろ作っているプログラムは、ノイマン型コンピュータ上で動きます。ノイマン型コンピュータというのは、プログラムをメモリに蓄えているタイプのコンピュータ(Program stored computer)を指し、プロセッサとメモリを持ったものは大体ノイマン型です。当然私たちのプログラムもメモリにロードされて動いています。 プログラムが動くとき、さまざまな用途でメモリが使用されます。その用途は、機械語をおくためや、変数として値を格納しておくため、またC言語などでは関数呼び出しを行うためのスタックとして使用するため、mallocなどで動的

    toton
    toton 2010/10/13
    ELF「.text:機械語, .bss:初期値有変数, .data:初期値無変数, .stack:定数」
  • Resource Hacker

    Resource HackerTM ... a freeware resource compiler & decompiler for Windows® applications Version 5.2.7 Last updated: 19 November 2023 Copyright © 1999-2023 Angus Johnson awj1958@gmail.com Freeware - no nags, no ads and fully functional. Download Overview: Resource HackerTM is a resource editor for 32bit and 64bit Windows® applications. It's both a resource compiler (for *.rc files), and a decompi

  • いやなブログ: 普通のやつらの下を行け: ptrace で実行中のプロセスにちょっかいを出す

    普通のやつらの下を行け: ptrace で実行中のプロセスにちょっかいを出す Linux などの多くの Unix 的なOS には ptrace というシステムコールがあります。 ptrace を使うと実行中のプロセスに対して、レジスタの書き換えやメモリ上のデータの書き換えといったさまざまな操作を行うことができます。 普通のやつらの下を行けの第6回として、今回は ptrace を使って実行中のプロセスにちょっかいを出す方法を取り上げたいと思います。 ptrace とは デバッガの理論と実装 に次のような記述があります。 Unix の ptrace() は物のデバッガ API (アプリケーションプログラムインターフェイス) の一例であり、商品に相応しい品質を持ったデバッガをサポートするために設計された、最初の専用 API の1つである。 ptrace はデバッガ用に作られた API のようで

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

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

  • プログラムはどう動くのか? 〜 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),

    toton
    toton 2009/09/07
  • GNU Binary Utilities

    This domain may be for sale!

    toton
    toton 2009/09/07
  • 汚いなさすがPerlきたない - firewood's diary

    Shibuya.pm #11「no Perl; use x86;」鑑賞してきた。 常々PerlはLLじゃないんじゃないかと思っていたのだが、LLの皮をかぶったアセンブラであることを再確認したのであった。 1. catcher in the int 80h; inside lleval FreeBSD::i386::Ptraceの実装について。 pt_to_sce()でsystemcallを実行直前にフックできる。スタックに積まれた引数を書き換えることができるので、実行したくないオペレーションであればSEGVで死ぬような引数に書き換えることでsandboxを実現。 forkは引数がないのだが、EIPを0に変更することはできるので、それで殺す。アドレス0にmmapされるとSEGVで死ななくなってしまうのでそれも抑止する。 2. Perl sandbox for Linux fork() sys

    汚いなさすがPerlきたない - firewood's diary
    toton
    toton 2009/04/23
  • J (2006-08-08)堕落したCプログラマのレベル10

    「偽札対応済み」って書いてある両替機。 川口市立中央図書館屋の上にある図書館。に行ってきた。特に何もないけど。あと、マイコンショップ川口つぶれてた。 ある程度能力を持ってるなら、成果を残せるか残せないかは自信を持ってるか持ってないかの違いだけかもしれないというような話。 最近思うのだけど、使えない奴(例えば、僕のような)の特徴として、「どうせ自分が何をどうやっても、何もどうにもならない」的な思考があると思う。 例えば、上の一行で言うと、「使えない奴(例えば僕」とか、そういったような思考。 こういった思考は、いったん根付いてしまうと、循環するので、なかなかやめられない。「どうせ自分は何もできないんだ→何もできないから何もやらない→何も成果を残せない→どうせ自分は何もできないんだ」とかいった感じで。 矯正しようと思っても、「いや、こういう性格だから、矯正は無理だし。」と、いう思考になってし

    J (2006-08-08)堕落したCプログラマのレベル10
    toton
    toton 2009/02/19
    GCC拡張を使えばCもクロージャが使える。__attribute__
  • UPX 圧縮するとメモリ使用量が増える事例 - NyaRuRuが地球にいたころ

    UPX 圧縮や .NETJava の JIT メカニズムは,実行イメージを実行時に展開するという共通点を持っています.これは必ずしもメリットばかりではありません.特にメモリについては,次のような影響が現れます. 同じ実行ファイルから複数のプロセスを生成するとき,ファイルイメージの共有によるメモリ使用量の削減効果が得にくい 実行時生成された実行イメージは,元のファイルとは異なるため,ページファイルに待避し直す必要がある 順に見ていきましょう. exe ファイルや dll ファイルは,メモリマップによってプロセス空間にマップされます.このとき,読み取り専用なセグメントや,まだ一度も書き換えられていないページは,実メモリ上に1つだけ実体を起き,アドレス変換によってプロセス間で共有することができます. Process Explorer を使用すると,プロセス中の DLL がどれぐらいワーキングセ

    UPX 圧縮するとメモリ使用量が増える事例 - NyaRuRuが地球にいたころ
    toton
    toton 2009/02/13
  • リバースエンジニアリング

    はじめに 最初に断っておきますが、私はKrackerではありませんし、またリバースエンジニアリングについてさほど詳しいわけでもありません。そんな人が「リバースエンジニアリング」などと銘打って文章を書くこと自体がそもそもおかしいですが、今回は、私がリバースエンジニアリングについていろいろと調べた結果をテキストとしてまとめてみようということでこの文章を書き上げました。よって、この文章は私がここ1ヶ月くらいで学んだ過程を書き綴っています。ただ、まとめたといっても、デバッガの使い方といった初歩の部分から書いているわけではないので、少なくともアセンブリ言語を理解していることが前提となります。また場合によっては、WindowsやDLLの仕組み、そして暗号アルゴリズムに関してもある程度の知識が必要かもしれません。 実験を行った私の環境はWinXP、コンパイラはVC++.NET、デバッガはOllyDbgで

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

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

    toton
    toton 2009/01/09
    「データがアラインされていないとメモリアクセス回数が増える」
  • フリーソフトウェア徹底活用講座 - GCC - 岸哲夫 - Interfaceコラム目次

    ◆移り気な情報工学 第62回  地震をきっかけにリアルタイム・システム再考 第61回  海を渡って卵を産む北京の「海亀族」 第60回  超遠距離通信とソフトウェア無線 第59回  IT先進国フィンランドの計画性 第58回  物理的に正しいITの環境対応 第57回  年金,e-チケットに見るディジタル時代の情報原 第56回  「着るコンピュータ」から「進化した布地」へ 第55回  技術を楽しむネットの文化 第54回  情報爆発2.0 第53回  プログラミングの現場感覚 第52回  GPS+LBS(Location Based Service)がおもしろい 第51回  技術の格差社会 第50回  フィンランドに見る,高齢化社会を支える技術 第49回  たかが技術倫理,されど技術倫理 第48回  若者の理科離れ,2007年問題から「浮遊」せよ 第47回  機械のためのWWW――Google

    toton
    toton 2009/01/09
    Interface誌のgcc連載
  • S.S'S HOMEPAGE 逆アセのスス乂 目次 MicrosoftのCOFFフォーマット解説 日本語訳

    目次 1. 基概念 2. 概要 3. ファイル ヘッダ 3.1 MS-DOSのスタブ(イメージのみ) 3.2 シグネチャ(イメージのみ) 3.3 COFFファイル ヘッダ(オブジェクトとイメージ) 3.3.1 マシン タイプ 3.3.2 特性 3.4 オプション ヘッダ(通常はイメージのみ) 3.4.1 オプション ヘッダの標準フィールド(イメージのみ) 3.4.2 オプション ヘッダのWindows NT固有フィールド(イメージのみ) 3.4.3 オプション ヘッダのデータ ディクショナリ(イメージのみ) 4. セクション テーブル(セクション ヘッダ) 4.1 セクション フラグ 4.2 Grouped Sections(オブジェクトのみ) 5. 他のファイル内容 5.1 セクション データ 5.2 COFFの再配置(オブジェクトのみ) 5.2.1 タイプ インジケータ 5.3 CO

    toton
    toton 2009/01/08
    PEフォーマット詳説
  • 初めて読むMASMはとっても良い本。 - big-eyed-hamster’s diary

    私の所属する研究室内では、Linuxカーネル読書会なるものをやっている。教材は詳解Linuxカーネルの第3版。このは-読んでみると分かるが-x86依存の話が非常に多い。スケジューラの話のあたりになると、Gnu Assemblerなどという暗号(!)でガシガシ書いてあるので、もう訳がわからない。この辺のソースコードの様子は、id:naoya さんのLinux カーネルのコンテキストスイッチ処理を読み解くを見ていただければ分かると思う。そうなってくると、必然的にx86の副読を買わねばならぬ、となるわけだが、x86を知らない人がいきなりはじめて読む486―32ビットコンピュータをやさしく語るを読むと、多分多くの人が挫折してしまうだろう。というか、私がした。確かに良い(だと思われる)んだけれど、前提知識が足りないと、所々でつまってしまって、読むスピードが落ちて、あああ、、、僕はダメな子だ、、

    初めて読むMASMはとっても良い本。 - big-eyed-hamster’s diary
    toton
    toton 2009/01/08
    これからマシン語やCPUの構造を勉強する人は、「はじめて読むPentium」「はじめて読む8086」「はじめて読むMASM」「はじめて読む486」の順で読むのが良いだろう
  • バイナリファイルを解析する

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

    toton
    toton 2008/12/25
    Data::ParseBinary
  • gdb tips - bkブログ

    gdb tips gdb を使う上で便利な tips を紹介します。基的な使い方をマスターしている人向けです。 .gdbinit の設定 ホームディレクトリに .gdbinit を置いておくと、gdb の起動の際に読み込まれます。私の場合は次のような設定をしています。 set history save on set history size 10000 set history filename ~/.gdb_history set print pretty on set print static-members off set charset ASCII set history から始まる最初の 3行は履歴に関する設定です。それぞれ、 gdb のコマンドラインの履歴をファイルに保存する、保存する行は最大 10000 行、ファイル名は ~/.gdb_history 、という意味になります。

  • memcpy 最適化 - kazuhoのメモ置き場

    バイト単位でコピーするアホなコードの方が、勝手にベクトル化される分、gcc 内蔵のヤツより最大3倍高速なんだってwww memcpy() compiled with vectorizing compilers All current compilers for linux should support SSE2 auto-vectorization with #include <string.h> void *(memcpy)(void *restrict b, const void *restrict a, size_t n){ char *s1 = b; const char *s2 = a; for(; 0<n; --n)*s1++ = *s2++; return b; }(中略) x86-64 gcc memcpy() (中略) Linking in a user-compiled

    memcpy 最適化 - kazuhoのメモ置き場
    toton
    toton 2008/09/25
    "バイト単位でコピーするアホなコードの方が、勝手にベクトル化される分、gcc 内蔵のヤツより最大3倍高速なんだってwww"
  • はてなリング - Binary2.0

    Binary2.0 低レベルプログラミングに興味があるBinary2.0なギークの集まるリングです。 掲示板も活発になるといいな。 このリングに参加する

    toton
    toton 2008/03/29