問題タブ [smali]
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.
android - スマリ編集中。問題 : 下位 16 ビットをゼロにする必要があります。16 進数の ID が間違っていますか?
おはよう/午後/夕方、私はスマリ語の初心者で静かですが、コンパイル中に解決できない問題があります。この質問が以前に聞かれたことがないことを願っていますが、Google と stackoverflow のいくつかのスレッドをチェックアウトしましたが、解決策が見つからなかったので、解決していないと思います。それで、何が起こるか:
アプリの C1.smali ファイルを変更しようとしています。配列の間違った ID を変更したいだけです。だから私はIDを置き換えただけで、他には何も触れていません。
変更後のsmali ファイル:
もちろん、public.xml ファイル (res\values 内) をチェックして、id が正しいことを確認しました。私はあなたに自分で見てもらいました:
今、再コンパイルしたいとき、apktoolは私が理解できない問題をスローします:
C:\apktool>apktool b CC
I: Using Apktool 2.0.0-RC4
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
CC\smali\com\one\aplication\C1.smali[58,4] Invalid literal value: 2131099649.
Low 16 bits must be zeroed out.
Exception in thread "main" brut.androlib.AndrolibException: Could not smali file
: com/one/aplication/C1.smali
at brut.androlib.src.SmaliBuilder.buildFile(SmaliBuilder.java:71)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:55)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:41)
at brut.androlib.Androlib.buildSourcesSmali(Androlib.java:354)
at brut.androlib.Androlib.buildSources(Androlib.java:294)
at brut.androlib.Androlib.build(Androlib.java:280)
at brut.androlib.Androlib.build(Androlib.java:255)
at brut.apktool.Main.cmdBuild(Main.java:225)
at brut.apktool.Main.main(Main.java:84)
誰かがこの問題の原因について何か知っていますか? apktool の問題は、私が修正した行 [58] を指しています。本当にどうなるかわからない!私を助けてくれる人に感謝し、私の下手な英語を許してください。良い一日を過ごしてください!:)
android - apktools を使用して snapchat をコンパイルするとインストールに失敗する
よし、apktoolsでapkを逆コンパイルするのに問題がある。現在、root なしでキャプションの長さを無制限にできるように、現在のバージョンの snapchat を編集しようとしています。これを行うために、apktools で apk を逆コンパイルし、必要な smali ファイルを編集してから再コンパイルしましたが、何らかの理由で電話にインストールされません。
次に、編集せずにapkを逆コンパイルして再コンパイルしようとしましたが、それも機能しませんでした。
アプリを適切にビルドしてインストールするために必要な特別な署名はありますか? それとも、apktools に欠けているものでしょうか? 私は他の多くのapkを逆コンパイルしましたが、それらは正常に機能しましたが、snapchatにはそれがありません. どんな助けでも大歓迎です、ありがとう。
android - アプリでフォルダーの名前を自動的に変更する方法
アプリを持っています... そのアプリに機能を追加したいです。機能は、sdcard 内のフォルダーの名前を自動的に変更します。
こうしている。ファイルをダウンロードします。その後、自動的にSDカードに抽出します。とにかく、名前を自動的に変更する方法はありますか? smali のコードはありますか?
java - Android smali 版 : jpeg の品質を設定しますか?
開発者の皆様、こんにちは。
最近、自分のデバイス (Xiaomi Mi4) で動作するように ColorOS カメラのポートを変更しました。実際、このアプリは XML 版のみで十分に機能します。しかし、整理することは、このアプリがデフォルトのAndroid jpeg圧縮を使用することです(私の場合、jpeg品質= 85%)
これを変更するために、smali ファイルを変更することにしました。100% の品質で jpeg をキャプチャするようにバースト モードを既に変更しました (値 0x4B を 0x64 に変更して、バースト モードで 75% の代わりに 100% の品質を取得し、それが機能しました) 他の行を編集して jpeg の品質 = 100% を取得しようとすると、問題が発生します。通常の撮影モードで。
誰かが私を助けて説明してくれますか? (私は初心者であり、編集に多くの時間を費やしたことを忘れないでください)
これがsmaliコードです(CameraProcessManager.smaliから)
対応するJavaコードは次のとおりです(残念ながら、smaliから作成されたJavaコードを編集できないことはわかっていますが、その方が簡単です) dex2jar から:
そして、Virtuous Ten Studio からの別の視点は次のとおりです。
jpegorentation の設定は維持したいが、jpegquality は常に 100% になるように変更する
誰かが私を助け、いくつかの説明をすることができれば、事前に感謝します=)
android - スマリコードAndroidとは
Dalvik VM、dex、Smali について少し学習します。
私は smali について読んだことがありますが、コンパイラのチェーンのどこに位置するのかまだ明確に理解できません。そして、その目的は何ですか。
ここでいくつかの質問:
- 私が知っているように、他の仮想マシンと同様に dalvik はバイトコードを実行しますが、Android の場合は dex バイト コードです。
- スマリとは?Android OS または Dalvik Vm は直接動作しますか、それとも同じ dex バイトコードですが、人間にとってより読みやすいですか?
- Windows用の逆アセンブラ(OllyDbgなど)プログラムの実行可能ファイルは、さまざまなマシンコード( D3 、 5F など)で構成され、各マシンコードに適切なアセンブリコマンドがありますが、Dalvik Vmもソフトウェアであるため、smaliはバイトコードの読み取り可能な表現です
- 新しいART環境があります。まだバイトコードを使用していますか、それともネイティブ コードを直接実行しますか?
前もって感謝します。
android - コードを挿入するのに最適な場所
logcat でランタイム メソッド呼び出しを取得できるように、各メソッドにトレースを追加する Python スクリプトを作成しています。
私のアプリケーションはいつもクラッシュします。エラー ログをコピーするように頼まないでください。それは私の質問のポイントではないからです。実際には、レジスタ宣言の直後にコードを挿入しようとしています。.locals
初めて.registers
ディレクティブを使用しましたが、ローカル レジスタとパラメータ レジスタのエイリアシングが原因でエラーが発生しました。
.locals
代わりにディレクティブを使用できると思いましたが、まったく同じです。
私が行った別のテストは次のとおりです。
- ローカル レジスタとパラメータ レジスタの差が 2 より大きい場合は、 と を使用
v0
しv1
ます。 - それ以外の場合は、
.locals
ディレクティブを 2 増やし、 and を使用v0
しv1
ました。
しかし、VFY エラーが発生し続けます。
なぜ.locals
0になることがありますがp0
、たとえば次のようなパラメーターがあります。
p0
でエイリアス化する必要がありますv0
が.locals
、0 であるのに、これを.locals
2 だけ変更してそのまま使用v0
しv1
ても VFY が発生するのはなぜですか?
return ディレクティブの直前にコードを追加することを考えています。少なくとも、戻り変数でない限り、ローカル変数を変更しても問題ありません。
編集: @JesusFreke 良いコメントをありがとう。
私は現在、あなたの提案で私の python スクリプトを改善しようとしています。そのため、ルート フォルダーにコピーする CustomClass を作成しましたが、実際には、ルート フォルダー内のすべてのメソッドをループし、変数に格納するクラスとメソッド名を取得してから、このパラメーターの値を変更します。関数であり、各メソッド内で呼び出します。
しかし、実際には、新しいメソッドを入力するたびに静的関数のパラメーターの値が変化し、最後に入力した最後のメソッドの値のみが保持されるため、機能しません。
この場合、約 40.000 の smali フォルダーにあるメソッドと同じ数の静的関数を生成する必要があります...
これは私のコードの一部です:
そして私の CustomClass コンテンツ:
android - smali でトレースを追加する方法
logcat
これまでのところ、任意のメソッドにトレースを追加するために、メソッドを 1 つだけ使用して smali クラスを作成しました。アプリをコンパイルして起動できますが、メソッドは何も出力しません。
このローカル パラメータの単純tag
なローカル パラメータが 1 つあり、トレースを追加するメソッドから取得します。何か問題があると思いますが、dalvik デバッガーは何も問題を出力しないため、自分の間違いがどこにあるのかわかりません。logcat
v0
p0
以下は私のコードです。
メソッドを呼び出す方法の例を次に示します。
さらに先に進むために、メソッドの返されたレジスタの値も出力する方法があるかどうかを知りたいです。
Java のすべてのタイプの変数は Object から継承され、Object にはメソッドがあるtoString()
ため、理論的にはメソッドをカスタマイズadd_trace()
して実行時に返されたレジスタの値を取得できることを認識しています。誰かがそれを手伝ってくれますか?
ありがとう。