プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

[POSIX] add ffsl() and ffsll() このエントリーをはてなブックマークに追加

Austinにffsl()とffsll()を追加しようという提案がされている

http://austingroupbugs.net/view.php?id=617

glibcはすでに実装しているので現状追認しようということみたい。いままでなかったのがおかしいんだよなあ

関連記事
linux | 【2014-04-04(Fri) 10:29:07】 | Trackback:(0) | Comments:(0)

[備忘録] Rubyでemail送る方法 このエントリーをはてなブックマークに追加

意外と簡単だった

https://gist.github.com/kosaki/9864928

require 'mail'

Mail.defaults do
options = { :address => "smtp.gmail.com",
:port => 587,
:user_name => 'kosaki.motohiro',
:password => 'パスワード',
:authentication => 'plain',
:enable_starttls_auto => true }

delivery_method :smtp, options
end

mail = Mail.new do
from 'kosaki.motohiro@gmail.com'
to 'kosaki.motohiro@gmail.com'
subject 'ruby mail test'
body 'body'
end

#puts mail.to_s #=> "From: mikel@test.lindsaar.net\r\nTo: you@...
mail.deliver




このへん参考にした
stackoverflow: How to send email via smtp with Ruby's mail gem?
http://stackoverflow.com/questions/12884711/how-to-send-email-via-smtp-with-rubys-mail-gem

関連記事
ruby | 【2014-03-29(Sat) 18:49:33】 | Trackback:(0) | Comments:(0)

memstompのライセンス このエントリーをはてなブックマークに追加

ところで、memstompのライセンスは結構ひどい

$ rpm -qi memstomp
Name : memstomp
Version : 0.1.4
Release : 11.el7
Architecture: x86_64
Install Date: Fri 14 Mar 2014 07:18:53 PM EDT
Group : Development/Debuggers
Size : 1157987
License : LGPLv3+ and GPLv2+
Signature : RSA/SHA256, Mon 03 Feb 2014 09:37:00 AM EST, Key ID 938a80caf21541eb
Source RPM : memstomp-0.1.4-11.el7.src.rpm
Build Date : Sun 26 Jan 2014 10:27:02 AM EST
Build Host : x86-017.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager : Red Hat, Inc.
Vendor : Red Hat, Inc.
URL : git://fedorapeople.org/home/fedora/wcohen/public_git/memstomp
Summary : Warns of memory argument overlaps to various functions
Description :
memstomp is a simple program that can be used to identify
places in code which trigger undefined behavior due to
overlapping memory arguments to certain library calls.



License : LGPLv3+ and GPLv2+

というのがよく分からなくてデュアルライセンスかなあと思っていたのだが、README
読むと

LICENSE:
LGPLv3+

Exception:

backtrace-symbols.c is GPLv2+. Which probably means that using
the --debug-info switch for memstomp might not be legally safe
for non-GPL-compatible applications. However, since that
module is independantly built into a seperate .so it should
still be safe using the profilers without this switch on such
software.



と書いてある。
ライセンスは著作権者の解釈が重要な意味を持つことが少なくないので、Author が LD_PREALOD だろうがライセンス的には non-GPL-compatible application では使えないかもーとか書いちゃうと、使っちゃダメな事で確定しちゃうだろ。そうしたいのならパッケージを別にして明確に注意喚起すべきで、誰も読まないような場所にインストールされたREADMEにこっそり書くんじゃない。

一番いいのはbinutilsコミュニティいって、明示的に許可をもらってライセンス変更の許可をもらってくることだが、次善の策は別のところからもってくることかなあ。Rubyのaddr2lineとか。



関連記事
linux | 【2014-03-15(Sat) 10:40:48】 | Trackback:(0) | Comments:(1)

memstomp の -d オプション このエントリーをはてなブックマークに追加

memstompの-d (--debug-info) はちょっとおもしろい。

libmemstomp-backtrace-symbols.so を追加で LD_PRELOADにセットしているのだが、こいつは backtrace_symbols 関数を差し替えるライブラリなのだ。
glibc の backtrace_symbols は機能が非常に貧弱で -rdynamic つけないとバックトレースが見にくくてしかたがないのだが、中でこいつを差し替えて addr2line からカトペしてきたコードが走ってlibbfdつかってDWARF読んでシンボルリストを構築してる。

glibcの関数を差し替えてるだけなので、非常に汎用性が高く、さまざまソフトで使えると思う。おしむらくは addr2lineから持ってきている関係で GPL2+ なのでクローズドソフトの方々には厳しいが。



関連記事
linux | 【2014-03-15(Sat) 10:28:26】 | Trackback:(0) | Comments:(0)

memstompの使い方 このエントリーをはてなブックマークに追加

memstompというライブラリがある。
デバッグ用ライブラリでmemcpyやそれに類する関数で2つの引数が指す領域がオーバーラップしており不定動作になってしまうようなケースを検出して間違っている箇所をバックトレースで教えてくれる。

対象の関数は以下

memcpy(), memccpy(), mempcpy(), strcpy(), stpcpy(), strncpy(), stpncpy(), strcat(), strncat(), wmemcpy(), wmempcpy(), wcscpy(), wcsncpy(), wcscat(), and wcsncat()



使い方は、Red Hat社 による、Red Hat Developer Toolset のドキュメントが一番わかり易い
https://access.redhat.com/site/documentation/en-US/Red_Hat_Developer_Toolset/2/html/User_Guide/sect-memstomp-Use.html

残念なことに Developer Toolsetのsclコマンドの使い方と混ざってしまっていて、Fedora、RHEL7でどうすればいいのか今ひとつ分かりにくいので簡単に解説してみる。
なお元ドキュメントはCC-BY-SAライセンスなので、この記事では遠慮なくサンプルコードを再利用させてもらう事にする。

この手のライブラリの定番ではあるが内部動作としてはLD_PRELOADを使っているが、利便性のためにラッパーコマンドが提供されており普段はこちらを使うことになる

# memstomp [-dk] program [argument...]



-d, --debug-info はバックトレース表示時にdebug infomationを使うという指定。これを指定しないと行番号が取れないので使用を強く推奨。
-k, --kill はオーバーラップ発見時にプログラム実行を停止するオプション

詳しく知りたい人は以下のURLに man を転載しておくのでどうぞ
https://gist.github.com/kosaki/9561104


さて、最初のURLのサンプルに戻る(コピペしやすいように以下のURLにコードを転載しておく https://gist.github.com/kosaki/9560671
見ての通り、strcat(employee, email) の行が間違っており、引数が overlapしてしまっている。

こいつを

# gcc -rdynamic -g -o employee employee.c



とコンパイルし、
※ -rdynamic はデバッグオプション非使用時のバックトレースをリッチにするためだけに必要なので -g があればなくても良い

# memstomp --debug-info ./employee



と実行する。
参考までに私の環境での実行結果を貼っておく https://gist.github.com/kosaki/9561220







関連記事
linux | 【2014-03-14(Fri) 21:59:05】 | Trackback:(0) | Comments:(0)
次のページ
  1. 無料アクセス解析