2016-12-07 5 views
0

xcodeで生成されたリンクマップファイルを解析すると、リンカ合成セクションに "compact unwind info"という名前のデータがあります。リンカ合成時の "compact unwind info"の意味

compact unwind info 858.57KB 858572 Unchecked 

約858kbの領域が必要です。 このスペースの実際のデータを知りたい。 このサイズを減らす方法はありますか?

リンカー合成部の総出力:

compact unwind info 858.57KB 
helper helper 24B 
objc image info 8B 
non-lazy-pointer 8B 
non-lazy-pointer-to-local: dyld_stub_binder 8B 
non-lazy-pointer-to-local: _vm_page_size 8B 
non-lazy-pointer-to-local: _tanh 8B 
non-lazy-pointer-to-local: _tan 8B 
non-lazy-pointer-to-local: _strdup 8B 
non-lazy-pointer-to-local: _strcmp 8B 
non-lazy-pointer-to-local: _sinh 8B 
non-lazy-pointer-to-local: _sin 8B 
non-lazy-pointer-to-local: _realloc 8B 
non-lazy-pointer-to-local: _protocol_getName 8B 
non-lazy-pointer-to-local: _object_getIndexedIvars 8B 
non-lazy-pointer-to-local: _objc_readClassPair 8B 
non-lazy-pointer-to-local: _objc_lookUpClass 8B 
non-lazy-pointer-to-local: _objc_getRequiredClass 8B 
non-lazy-pointer-to-local: _objc_getProtocol 8B 
non-lazy-pointer-to-local: _objc_getMetaClass 8B 
non-lazy-pointer-to-local: _objc_getClass 8B 
non-lazy-pointer-to-local: _objc_copyClassNamesForImage 8B 
non-lazy-pointer-to-local: _objc_allocateClassPair 8B 
non-lazy-pointer-to-local: _malloc 8B 
non-lazy-pointer-to-local: _mach_task_self_ 8B 
..... 

答えて

1

アンワインド情報は、例外がスローされたときに/隆起スタックをアンワインドするために必要な情報です。スタックを巻き戻すには、フレームポインタ、スタックポインタ、リターンアドレス、および保存されたレジスタが格納されている場所を判断し、前のフレームの状態を復元できるようにします。また、C++やObjective-Cなどの言語での例外処理の "catch"と "finally"機能を処理するために、任意のスタックフレームに対してアンワインドハンドラ関数があるかどうかを判断します。

現在のフレームのすべての情報は、命令ポインタから決定されます。各命令が関連するレジスタを変更したり、保存されたレジスタ値をスタックにプッシュまたはポップしたりする可能性があるため、実行がその最初の命令から機能を経るにつれて、詳細が変化する。

アンワインド情報は、命令ポインタからこれらの値のすべてを見つける場所を判断する方法を説明しています。

バイナリに埋め込むことのできる巻き戻し情報には、さまざまな形式があります。 1つの一般的な形式は、DWARFアンワインド情報です。それはかなり空間的に非効率的です。アップルはコンパクトな巻き戻し情報を開発しました。なぜなら、実際にはそれほどスペースを取らないからです。

コンパクトアンワインド情報形式の詳細はhereです。

+0

ありがとうございます! – Hikari