問題タブ [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 - iOS バイナリを編集して再コンパイルすることはできますか?
私はアプリケーションを持っていて、最近 Cydia に投稿しました。他の誰かによってクラックされ、トレント サイトに投稿されました。内部にバイナリ チェックサム検証メカニズムがあり、バイナリに加えた変更に基づいて新しいチェックサム ファイルを作成することができました。彼らは 2 つの関数を編集して逆コンパイルし、torrent に投稿しました。
関数とクラスの実際の実装を見ることができることがわかりました。しかし、関数を編集するには、その関数のアドレスを見つけて、HEX EDITOR で編集する必要があります。私はそれを「ハッキング不可能」にしたくはありませんが、彼らがどのようにハッキングしたかを知りたいのです。
iOS バイナリの関数を編集して再コンパイルするにはどうすればよいですか? たとえば、クラスの 1 つに次のメソッドがあります。
この関数の戻り値を編集したい。それは可能ですか?
ios - iOSクラッシュダンプのオフセットを分解されたバイナリに一致させる
iOSクラッシュダンプのスタックトレースのオフセットを、otoolによって出力されたバイナリの逆アセンブルのオフセットと一致させるのに問題があります。
原則として私がこれらをどのように一致させるかを誰かが確認できますか?たとえば、クラッシュダンプに行が表示された場合:
バイナリファイル内の問題のある命令のオフセットは、0x5b0a、0x4b0a ....、または他の何かであると思いますか?
ヘッダー情報のデコードで、otoolは、たとえば、この情報も提供します(実際のコードはファイルのオフセット0x0000224cから始まります)。
したがって、これを正しく解釈しているとは100%確信できませんでしたが、ファイル内の+ 0x224cのコードは、メモリ内のオフセット0x124cで終わると言っているようですが、これがどのように行われるのか正確にはわかりませんでした。たとえば、場所0x1000に適合します。
私が抱えている問題は、たとえばオフセット0x5b0aが与えられた場合、そこの命令も0x4b0aも0x6b0aの命令も、問題の実際の命令として意味をなさないことです(たとえば、スタックのさらに下の場所がポイントしないという事実を含みます)分岐命令)。
(少なくともARMの初期の化身では、命令パイプラインのためにPCの値と対応するメモリアドレスの間に不一致があったことを知っています。そのような違いは、報告されたオフセットで考慮されると想定していました。クラッシュダンプで、またはとにかく、そのような違いが考慮されていない場合、問題の分岐命令が、指摘されたもののいずれかの側にあるいくつかの命令を見るでしょう...)
誰かが光を当てることができますか?
macos - otool -lは、フレームワークがOSX 10.6から構築された場合の、OSX 10.5での不明なロードコマンド(0x80000022)を示しています。
OSX 10.6を使用してフレームワークを構築しましたが、すべて問題ありません。BaseSDKとDeploymentSDKを10.5に設定しています。また、i386アーチのみを構築しています。
このフレームワークをOSX10.5に持ち込み、その上でotool -lを実行すると、次の結果が得られます。
「ロードコマンド6cmd?(0x80000022)不明なロードコマンド」
誰かがこれを修正する方法を知っていますか?
前もって感謝します
c - 実行可能ファイルのグローバル変数を一覧表示します
実行可能ファイル内のすべてのグローバル変数とアドレスオフセットをダンプするにはどうすればよいですか?
これは、gccでコンパイルされたxcodeで開発されたアプリであるosxにあります。
ありがとうございました
macos - -bash:otool:コマンドが見つかりません。コマンドを探すためのデフォルトの場所をbashに教えることができますか?
私のファイルシステムのツールコマンドは次の場所にあります。
そのパス全体を指定すると、otoolが機能します。
ただし、参照しているhello.cファイルのフォルダー内にいる必要があるため、入力しただけではbashはotoolを自動的に検出しません。
私は多くのコマンドでこれと同じ問題を抱えています。パス名全体を毎回書き出すことなく、otool(および同様のコマンド)を自動的に検出するようにbashを設定する方法はありますか?ありがとう!
注:重要な場合は、Macを使用しています。
注2:「コマンドが見つかりません」というスレッドをたくさん読みましたが、デフォルトでコマンドを探す場所をbashに教えるという質問に答えている人はいないようです。この質問はどこかで答えられるべきだったと思いますが、まだ出くわしていません。私がすぐに使用するプログラムはiOS/Xcodeに関連するものだけなので、これは価値のあるショートカットです。
file - xcode プロジェクトで非公開 API を検出する際の otool -L のターゲット ファイルは何ですか?
xcode プロジェクトで非公開 API を検出するために otool を使用する方法を探しています。ターミナルで otool を使用する必要があることはわかっています。しかし、otool -L を使用すると、「ファイルをマップできません: appname.app (無効な引数)」と表示されます。
otool の対象ファイルが間違っていると思いますよね?xxx.app ファイルを使用しました。
私を助けてください。ご清聴ありがとうございました。
debugging - gdb バックトレース出力と otx (otool) 出力?
このプログラムの otx (otool) アセンブリ出力に、gdb バックトレース出力のアドレスがまったくないのはなぜですか? 私のotool asm出力のオフセットに対応しているという印象を受けました...これがばかげた質問であれば申し訳ありません。
macos - 実行可能バイナリの完全な逆アセンブリの取得
実行可能ファイルの完全な逆アセンブリ (アセンブラへの入力として機能する) を取得することは可能ですか?
使用するotool -tV a.out
と、テキストセクションのみが表示されます。データなどの他のセクションは表示されません。
を使用するgdb
と、逆アセンブル コマンドに開始アドレスと終了アドレスが必要になります。ただし、バイナリの開始アドレスと終了アドレスを見つける方法がわかりません(a.outなど)。
実行可能ファイルを逆アセンブルし、アセンブリ コードをいじってから再アセンブルしようとしています。それは可能ですか?
バイナリ内のすべてのセクションの名前を見つけることができれば、それも役に立ちます。
iphone - iOS アプリのダウングレードの互換性要件
アプリ ストア (ARM バイナリ) から下位バージョンにアプリをダウングレードできるかどうか疑問に思っていました。たとえば、アプリが iOS 5.0 または 4.3 以降を必要とする場合、iOS 4.2 または 4.0 で実行する必要があります。
新しいバージョンには、新しい iOS プラットフォームでのみ公開される API リンク呼び出しが含まれているため、要件が重要であることを理解しています。ただし、下位バージョンで実行できる多くのアプリが、新しいバージョンの xcode で不必要にコンパイルされています (iOS 4.0 -> iOS 5.0 のように、マイナー アップデートだけで、iOS 対応バージョンでの大幅なジャンプがサポートされます)。
私がやりたいことは、新しいリンクされた関数 API がないことを確認し、それによって plist ファイルを下位バージョンに調整することによって、iOS 5.0 アプリを iOS 4.3 アプリにダウングレードすることですか? otool または class-dump はこれに役立ちますか?
macos - otool エラー: オブジェクト ファイルではありません
Mac OS に 2 つのファイルがあります。1 つの Mach-O 実行可能 i386 と 1 つのデータ (私の Finder の同じ実行アイコン)。
最初に otool -tV コマンドを実行すると、アセンブラ コードが出力されます。しかし、2 番目のファイルに書き込むと、次のメッセージが表示されます。myFile: はオブジェクト ファイルではありません。
データファイルを変換または直接読み取る方法を知っていますか?