teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記その2

2018/06/21 05:56

投稿

m_yoko
m_yoko

スコア156

answer CHANGED
@@ -6,6 +6,7 @@
6
6
 
7
7
  [ASLR](http://yukisakamoto.hatenablog.com/entry/20121021/1350786929)
8
8
 
9
+ 追記:
9
10
  addr2lineがないのであればportでaddr2line相当のgaddr2lineがbinutilsで入れられるそうですが、入れたあとエイリアス等でaddr2lineと置き換えられませんか?
10
11
  homebrewが使えるならそちらでも。
11
12
 
@@ -25,4 +26,15 @@
25
26
 
26
27
  addr2lineはPIEもしくはPICでコンパイルしても駄目らしいのでどちらにしろコンパイルし直さないと正しい情報が得られないと思います。
27
28
  ASLRは対象のプログラムだけ無効といった形でも駄目でしょうか?
28
- コンパイル時に[こんな感じ](https://gist.github.com/YukiSakamoto/3776193)で無効化できるかもしれません。
29
+ コンパイル時に[こんな感じ](https://gist.github.com/YukiSakamoto/3776193)で無効化できるかもしれません。
30
+
31
+ 追記:
32
+ > atmic.oをnmでみてみました。全く何も出てきませんでしたので空です。ちょっと気になってリンク・エラーになるシンボル _backtrace_create_state を探してみたところ、state.cにあり、state.oをnmでみると入ってました。
33
+
34
+ .libsにlibbacktrace.soができると思うのですが、こちらに_backtrace_create_stateはありませんか?
35
+ libbacktrace.la自体はテキストファイルでlibtoolが見るやつなので無視していいです。
36
+ こちらにあるならlibbacktraceのビルドは正常にできており、リンクが間違っているかaddr2lineが正常にデータを拾えてないことになります。
37
+
38
+ addr2lineが正常に動いているかどうかは確認いたしましたでしょうか?
39
+ 該当のファイルにgccなら-no-pieをつけてコンパイルしないとaddr2lineに相対アドレスを渡すことになり、計算する必要がございます。
40
+ boostの内部の実装がどうなってるかわかりませんが、PIEで実行すると正常にデータが得られないのではないでしょうか?

1

追記

2018/06/21 05:56

投稿

m_yoko
m_yoko

スコア156

answer CHANGED
@@ -4,4 +4,25 @@
4
4
  ロードされるアドレスが変わるのはASLRが有効になってるんだと思います。
5
5
  以下のサイトをもとにASLRを無効にしたプログラムを作成できませんか?
6
6
 
7
- [ASLR](http://yukisakamoto.hatenablog.com/entry/20121021/1350786929)
7
+ [ASLR](http://yukisakamoto.hatenablog.com/entry/20121021/1350786929)
8
+
9
+ addr2lineがないのであればportでaddr2line相当のgaddr2lineがbinutilsで入れられるそうですが、入れたあとエイリアス等でaddr2lineと置き換えられませんか?
10
+ homebrewが使えるならそちらでも。
11
+
12
+ > /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .libs/libbacktrace.a(atomic.o) has no symbols
13
+
14
+ これは多分、
15
+ > →#if !defined (HAVE_ATOMIC_FUNCTIONS) && defined (HAVE_SYNC_FUNCTIONS)
16
+
17
+ これによってatmic.oの中身がないんだと思います。
18
+ nmでシンボルが全く存在しないのか確認できますでしょうか。
19
+ 多分途中抜けてる感じでも中身はあると思うのですが。
20
+
21
+ エラーで落ちるのであればリリースビルドとしてではなくデバッグビルドとして検証したほうがよろしい気がしますが・・・。
22
+ addr2lineはコンパイル時の最適化オプションはどうだか知りませんがデバッグ情報はどちらにしろ付加しないといけないみたいなので、ただ単にリリースビルドとしてビルドしただけ(デバッグ情報を付加していないのであれば)では使えないそうですが、デバッグビルドとしてビルドすることを再考したほうがよろしいかと。。。
23
+ リリースビルドで起きるエラーなのでしょうか?
24
+ 最適化かかっていたらどちらにしろエラー時の情報の有用性(スタックトレースが読みにくい気がします)が低くなってしまいますが、リリースビルドじゃないとだめでしょうか・・・。
25
+
26
+ addr2lineはPIEもしくはPICでコンパイルしても駄目らしいのでどちらにしろコンパイルし直さないと正しい情報が得られないと思います。
27
+ ASLRは対象のプログラムだけ無効といった形でも駄目でしょうか?
28
+ コンパイル時に[こんな感じ](https://gist.github.com/YukiSakamoto/3776193)で無効化できるかもしれません。