タグ

ブックマーク / inaz2.hatenablog.com (9)

  • ARMアセンブリについてのメモ - ももいろテクノロジー

    ARM EABI(armel)についてのメモ。 RealView Compilation Tools アセンブラガイド バージョン 4.0 ARMレジスタ r0からr15までのレジスタとcpsrレジスタがあり、r11はフレームポインタ(fp)、r12はプロシージャ内呼び出しスクラッチレジスタ(ip; intra-procedure call scratch register)、r13はスタックレジスタ(sp)、r14はリンクレジスタ(lr)、r15はプログラムカウンタ(pc)として使われる。 cpsrレジスタは主にフラグレジスタの役割を持つ。 x86との比較でいえば、fpはebp、spはesp、lrはリターンアドレス、pcはeip、cpsrはeflagsにそれぞれ対応する。 ただし、 pcは演算の際、現在実行している命令のアドレス+8として評価される ことに注意。 また、objdumpコマ

    ARMアセンブリについてのメモ - ももいろテクノロジー
  • GNU Emacs入門 - ももいろテクノロジー

    Emacsの使い方についてまとめてみる。 CtrlとCapsLockの位置を入れ替える EmacsはCtrlキーの同時押しを頻繁に行うため、左Ctrlと左CapsLockの位置を入れ替えておくとよい。 Windowsであれば、Sysinternals Ctrl2capやChange Keyが使える。 インストール ここでは基的にターミナルでの利用を想定し、GUI版はインストールしないこととする。 UbuntuやDebianの場合 $ sudo apt-get install emacs24-nox emacs24-el CentOSやFedora、RHELの場合 $ sudo yum install emacs-nox emacs-el noxはwithout X supportを意味し、GUI版が必要とするパッケージを含まないものとなっている。 Emacs Clientを使う Emac

    GNU Emacs入門 - ももいろテクノロジー
  • 各種アーキテクチャのクロスコンパイラ環境を構築する - ももいろテクノロジー

    Docker上に作成したDebian 8環境にてbinutils、gcc、glibcをソースコードからビルドし、さまざまなアーキテクチャのクロスコンパイラ環境を構築してみる。 なお、構築した環境は次のDocker imageとして公開してある(イメージサイズが2.8GBと大きいことに注意)。 inaz2/debian-crossbuild 環境 Ubuntu 14.04.3 LTS 64bit版、Docker 1.9.1 $ uname -a Linux vm-ubuntu64 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributo

    各種アーキテクチャのクロスコンパイラ環境を構築する - ももいろテクノロジー
  • gdbを使っていい感じにプロセスツリーを手元の端末に繋ぎ変えるシェルスクリプト - ももいろテクノロジー

    次のエントリにあるように、gdbを使うとプロセスの標準入出力を別の端末(tty)に繋ぎ変えることができる。 コンソールから切れたプロセスを標準出力につなげなおす - 絶品ゆどうふのタレ しかし実際にはあるプロセスからサブプロセスが複数呼ばれている状況もあり、そのような場合にはそれぞれのプロセスについてgdbでアタッチして端末を繋ぎ変える必要がある。 そこで、この操作を楽に行うためのシェルスクリプトを書いた。 #!/bin/bash # grabtty.sh rootpid="$1" newtty=$(tty) if [[ $(whoami) != "root" ]]; then echo "must be root." exit 1 fi if [[ -z "$rootpid" ]]; then echo "Usage: $0 PID" exit 1 fi grabpid() { loca

    gdbを使っていい感じにプロセスツリーを手元の端末に繋ぎ変えるシェルスクリプト - ももいろテクノロジー
  • ELF実行ファイルのメモリ配置はどのように決まるのか - ももいろテクノロジー

    Linux x64環境において、ELF実行ファイル、共有ライブラリ、スタック領域、ヒープ領域のアドレスがどのように決まるのかについてのメモ。 環境 Ubuntu 12.04 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17:39:31 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.04.4 LTS Release: 12.04 Codename: precise $ gcc --version gcc (Ubuntu/Linaro 4

    ELF実行ファイルのメモリ配置はどのように決まるのか - ももいろテクノロジー
  • GNU Screenでscreenの中のscreenを操作しやすくする - ももいろテクノロジー

    たとえば、ローカルで起動したscreenの中でSSH接続を行い、接続先のサーバで起動したscreenを操作したいとする。 前者のscreenを外側、後者のscreenを内側としたとき、内側のscreenで新しいウィンドウを開くには、一旦C-a a (meta) で内側のscreenにC-aを送った後cを押す必要がある。 他の操作についても同様に、あらゆる操作の前にC-a aをつけなければならず、非常に操作しづらい。 これを簡単にするために内側のscreenで異なるキーをエスケープに用いる方法が知られているが、接続するたびにエスケープキーを変更、あるいは接続先のサーバで異なるscreenrcを用意する必要があり、この方法もやや煩雑である。 そこで、metaを実行した後echoするコマンドをC-a Spaceにバインドし、renditionでメッセージの表示色を変えるようにしてみる。 具体的に

    GNU Screenでscreenの中のscreenを操作しやすくする - ももいろテクノロジー
  • 名前や用途が似ているLinuxコマンドの整理 - ももいろテクノロジー

    いろいろあるLinuxコマンドを区別するためのメモ。 w系 wログイン中のユーザについて、実行中のコマンド名も含め表示する whoログイン中のユーザについて、ログイン時刻を表示する usersログイン中のユーザのみを表示する id自分の実ユーザ名、実効ユーザ名、所属グループを表示する whoami自分の実効ユーザ名のみを表示する last成功したログイン履歴を表示する lastb失敗したログイン履歴を表示する(要root権限) lastlog各ユーザの最終ログイン時刻を表示する $ w 22:44:42 up 12:19, 3 users, load average: 0.03, 0.02, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT user pts/2 192.168.56.1 21:16 2.00s 0.77s 0.00s w $ wh

    名前や用途が似ているLinuxコマンドの整理 - ももいろテクノロジー
  • gdbに構造体定義を読み込ませて使う - ももいろテクノロジー

    ヘッダファイルなどから構造体の定義などがわかっているとき、gdbにこれを読み込ませることでメモリ内容を構造体定義に合わせて表示させることができる。 これを行うには、gccでデバッグ情報付きのオブジェクトを作った後、gdbのadd-symbol-fileコマンドで読み込ませればよい。 ここでは、link.hおよび内部でインクルードされるelf.hを使って、実行時のELFセクションの内容をたどってみる。 まずはヘッダファイルをC言語ソースとみなして、デバッグ情報付きでオブジェクトファイルにする。 ここでは、コンパイルまでを行いリンクは行わないので、-cオプションをつける。 さらに、-fno-eliminate-unused-debug-typesオプションを使い、変数宣言されていない型もデバッグ情報に含めるようにする。 $ gcc -g -fno-eliminate-unused-debug-

    gdbに構造体定義を読み込ませて使う - ももいろテクノロジー
  • gdbの使い方のメモ - ももいろテクノロジー

    よく使いそうなものの覚書。 実行ファイルを指定して起動する $ gdb a.out 次のようにオプションを指定すると、 ライセンス表示を出さない アセンブリコードをIntel形式で表示する 停止するたびに直後の命令を表示する ようにできる。 $ gdb -q -ex 'set disassembly-flavor intel' -ex 'disp/i $pc' a.out 起動中のプロセスにアタッチする $ gdb -p [PID] ヘルプ、コマンド検索 (gdb) help break (gdb) apropos breakpoint 実行する main関数で止める場合。引数にはシェルの構文がそのまま使える。 (gdb) start AAAA main関数で止めない場合。 (gdb) run AAAA (gdb) r AAAA 引数を別途セットすることもできる。 (gdb) set ar

    gdbの使い方のメモ - ももいろテクノロジー
  • 1