問題タブ [otool]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - スタティック ライブラリの外部名ディレクトリにシンボルを追加する
otool
特定のスタティック ライブラリによって生成されるシンボル リストとnm
、特定のスタティック ライブラリ用に生成されるシンボル リストの違いに混乱しています。いくつかの静的ライブラリをリンクして最終的な実行可能ファイルを作成しようとしていますが、リンカーはUndefined symbols: "_main", referenced from: _main$non_lazy_ptr in crt1.o
. nm
ライブラリ ( ) の 1 つを実行すると、それが というファイルで定義されているlibext.a
ことがわかります。しかし、同じライブラリで実行すると、アーカイブのセクションに存在しないことがわかります。このセクションに強制的に含まれるようにするにはどうすればよいですか? ライブラリで行うことは役に立ちません。_main
main.o
otool-s
_main
__.SYMDEF
_main
ranlib -c
iphone - otoolの使い方
アップルは、コード内のプライベートAPI(isinf)を検出するために「strings」または「otool」を使用することを提案しました。私は完全に初心者なので、これらのツールの使用方法については助けになります。
xcode - xcode が静的ライブラリを適切に構築していない (関数が含まれていない)
基本的に、xcode4 で静的ライブラリを作成してコンパイルすることはできますが、関数は otool によって読み込まれません。私はそれがうまくいくように一度それを行うことができましたが、それ以来何度も失敗しているので、明らかなステップを逃しているに違いないことを知っています.
私が現在行っていることは、xcode4 で新しいビュー ベースのアプリケーションを作成することです。次に、新しいターゲット (Numbers) を Numbers に追加し、File.c というソース ファイルを追加します。その内容は次のとおりです。
次に、それをコンパイルします (ビルド スキームのドロップダウンで Numbers |iPhone 4.3 Simulator が選択されていることを確認します)。
しかし、libNumbers.a で otool -S を実行すると、結果が得られません。
ranlib 構造体のサイズ: 0 (数値 0) オブジェクト オフセット 文字列インデックス
正しくビルドされた libNumbers.a で otool -S を実行すると、0 の代わりにいくつかの数値が得られるため、そこに何かがあるはずです。
ranlib 構造体のサイズ: 16 (数値 2) オブジェクト オフセット文字列インデックス 136 0 136 7
私が作成した成功したlibコンパイルで行ったことをバックトレースしようとしましたが、関数がそのライブラリでコンパイルされた理由を示すものは何も見つかりませんでした。
iphone - デフォルトのiOSアプリをotoolで分解します
ストックiOSアプリ(アプリストアのものではない)をotoolで分解しようとすると、異なるメソッドに分割されません。それはただ1つの巨大なセクションです。私が使用しているコマンドは次のとおり
otool -tV theApp.app/theApp >~/Desktop/output.txt
です。逆アセンブリをメソッドに分割する方法はありますか?
dyld - XQuartzの動的読み込みエラー
XQuartzを更新しましたが、ロードされません。次のように文句を言います。
しかし、私がotool -L /opt/X11/lib/libfreetype.6.dylib
:
したがって、ライブラリは適切なバージョンです。
このエラーの原因は何ですか?
macos - Mac Os XのMach-Oライブラリにinstall_name_toolとotoolが必要なのはなぜですか?
Xcode 4の最新バージョンを使用してCocoaアプリケーションを開発していますが、ダイナミックライブラリをプロジェクトにリンクしたいと思います(dylibs
)。
プロジェクトにライブラリを追加するだけでは十分ではないことをどこかで読みました。実行install_name_tool
しotool
て、プロジェクトにバンドルされているライブラリをプロジェクトで使用する必要があるためです。
のマニュアルページを読みましたがinstall_name_tool
、なぜこれを行う必要があるのかわかりません。
ライブラリはどのように機能しますか?/usr/local/lib/mylibrary.dylib
実行中のように、アプリケーションとライブラリが私のマシンの特定の場所を指すパスを持っている部分に特に興味がありますotool -L
macos - Mac OS X でお気に入りの逆アセンブラ ツールは何ですか?
およびテキスト エディタを使用しotool
てバイナリを逆アセンブルしています。この時点でのワークフローは非常に簡単です。nm
Fraise
Mach-o
-
1. 既存のシンボルを一覧表示します。
-
2. disasm コードを取得します。
-
3. この出力をテキスト ファイルにコピー アンド ペーストします。
-
4. テキスト エディターでコードを読み、コメントします :)
上の disasm コードの操作を簡素化するツールを探していますMac OS X
。
assembly - EBPに対して非常に正のオフセット
バイナリがi386
あり、実行する機会がありません。otool -tv
言う:
いくつかの機能または方法:
以下のどこかにある指示
がっかりしました!0xe0(%ebp)
ポイントはどこですか?正のオフセットがあるため、これはローカル変数ではないと思います。otool
私はすべての出力の中でそのようなアクセスを見ることができます。それをどのように解釈しますか?
linker - dyld インポートされたシンボルを解決するにはどうすればよいですか?
私は dyld が行うことのいくつかの部分を実装しようとしていますが、スタブ トランポリンで少し立ち往生しています。
次の ARM 命令を考えてみましょう。
0x2fecへのリンク(サブプロシージャコール)で分岐します。0x2fd8 で始まる __TEXT セグメントにセクション __symbolstub1 があることを認識しているため、__symbolstub1 内の 20 バイトにジャンプします。
今、シンボルがあります
LC_SYMTAB ロード コマンドで解決しました。提供された既知のアドレスはありません。実際、0x2fec アドレスが _objc_autoreleasePoolPush のトランポリンであることはわかっていますが、それを証明することはできません。
私は LC_DYLD_INFO_ONLY コマンドをチェックしましたが、私が見つけた lazy_bind シンボルで、そこにわずかなヒントがありました:
ここで、名前とオフセットは私が持っているものと正確に一致し、ライブラリ #6 は「/usr/lib/libobjc.A.dylib」であり、これも完璧です。ここでの問題は、セグメント #2 が __TEXT であるということですが、__TEXT は 0x1000 から始まり、__symbolstub1 は 0x2fd8 のはるか下にあります。そのため、セクションへの参照が欠落しています。
0x2fec 仮想アドレスを _objc_autoreleasePoolPush にマップする方法についてのアイデアはありますか?
macos - Xcode 4、dylib&install_name_tool
OSXプロジェクトでdylibを動作させようとしています。
私はいくつかのサンプルを読んでいます、これは具体的には: Xcode4がdylibを追加しています
しかし、私はまだそれを機能させることができません。
これが私が実行したステップです:
- tests.1.dylibをXcodeプロジェクトフォルダーにコピーしました。
- 走った
sudo install_name_tool -id @executable_path/../Frameworks/testing.1.dylib testing.1.dylib
ラン:
otool -L testing.1.dylib
そして以下を受け取りました:tests.1.dylib :
@ executeable_path /../ Frameworks / tests.1.dylib(互換性バージョン2.0.0、現在のバージョン2.0.0)
/usr/lib/libSystem.B.dylib(互換性バージョン1.0.0、現在バージョン159.1.0)プロジェクトにフレームワークとしてを追加しました
testing.1.dylib
。(ライブラリオプション付きのリンクバンドルを使用)。- この時点で、testing1.dylibをコンパイルすると、期待どおりに.App / Frameworkにコピーされないため、手動でフレームワークパスを作成し、testing.1.dylibをそれにコピーします。a)mkdir -p tests.app /Contents/Frameworksb)cptesting.1.dylibtesting.app/Contents/Frameworks
- Xcodeで
Runtime Search Paths
、ターゲットとプロジェクトの両方のを@ executeable_path/../Frameworksに更新します。
次に、testing.appを別の新しくインストールしたマシンにコピーして、実行しようとします。次のエラーが発生します。
dyld:ライブラリがロードされていません:/user/local/lib/testing1.dylib参照元:/Users/me/testing.app/MacOS/./testing理由:画像が見つかりません
私は何が欠けていますか?
注:install_name_toolを実行する場合、sudoを使用する必要があります。そうしないと、次のエラーが発生します。
install_name_tool:入力ファイルを開くことができません:testing.1.dylib for write(許可が拒否されました)install_name_tool:オフセットを探すことができません:0 in file:testing.1.dylib for write(不正なファイル記述子)install_name_tool:できませんファイルに新しいヘッダーを書き込む:testing.1.dylib(不正なファイル記述子)install_name_tool:入力ファイルに書き込まれたものを閉じることができません:testing.1.dylib(不正なファイル記述子)