Вы можете прочитать документацию по байт-коду dalvik, так как она более подробная, чем документация, которую вы можете найти о smali. В любом случае, я также изучаю smali, поэтому, возможно, я не могу дать вам лучший ответ, но, возможно, это поможет. Давайте начнем с того, что делает iput:
iput vx,vy, field_id Помещает vx в поле экземпляра. На экземпляр ссылается vy.
источник: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html из коды операций dalvik
То же самое происходит и здесь. Вы влияете на регистр v2 с помощью регистра v0. При этом сделанное вами изменение было ошибочным. Вы изменили «I» на «10», но это не значение. В данном случае I означает целое число. Кроме того, это даже не то место, где вы хотите внести изменения в свой код. Давайте посмотрим:
const-string v0, "get_value_one"
reg v0 теперь имеет значение строки «get_value_one» (значение может быть не лучшим словом для его описания, поскольку это строка, но я думаю, что понял свою точку зрения)
invoke-virtual {p0, v0}, Lorg/json/JSONObject;->getInt(Ljava/lang/String;)I
move-result v0
теперь вы вызвали метод getInt(String) для JSONObject, который вы получаете через параметр. Вы знаете это, так как {p0, v0} означает, что вы передаете v0 методу объекта, на который ссылается p0, который, как вы знаете, является параметром, поскольку он следует правилу p*. (Вы можете прочитать об этом здесь: https://code.google.com/p/smali/wiki/Registers).
К настоящему времени вы, должно быть, начинаете понимать, что вызов этого метода не поможет, если вы хотите присвоить значение cont вашей переменной 'l'.
iput v0, v2, Lcom/breakapp/dd/mymod/Processor;->l:I
Эта последняя инструкция берет ваш регистр v2 и помещает в него значение v0. v0, прежде чем эта строка будет выполнена, имеет значение, полученное из метода JSONObject getInt(String), в то время как v2 ссылается на объект MyProcessor, а «Lcom/breakapp/dd/mymod/Processor;->l» ссылается на переменную 'l ', содержащееся в этом указанном объекте. ' :I ' позволяет узнать тип переменной. Поскольку Java строго типизирована, я уверен, что вы знаете, что для переменной всегда существует связанный тип. Это, конечно, должно быть указано в байт-коде, и именно так это и делается.
Я надеюсь, что это дало некоторую информацию, чтобы иметь возможность вносить нужные изменения, но я попытаюсь помочь немного больше, предложив вам изменить код, который вы показали, на что-то вроде этого:
const/4 v0, 0xA
iput v0, v2, Lcom/breakapp/dd/mymod/Processor;->l:I
Первая строка присваивает константе (0xA шестнадцатеричный = 10 десятичный) значение v0, а затем передает ее, как я упоминал ранее.
Удачи в изучении smali и надеюсь хоть немного помогло
person
XFCC
schedule
20.11.2014