有关Tweak不能hook住函数的问题

问题是这样的,我最近对计算器进行了逆向,发现:

CalcValueView - (void)setDisplayValue:(id) userEntered:(char)

这个函数是设置显示值的,以下是IDA对这个函数的反汇编代码:

; CalcValueView - (void)setDisplayValue:(id) userEntered:(char)
; Attributes: bp-based frame

; void __cdecl -[CalcValueView setDisplayValue:userEntered:](struct CalcValueView *self, SEL, id, char)
__CalcValueView_setDisplayValue_userEntered__
PUSH            {R4,R5,R7,LR}
MOV             R5, R0
MOV             R0, #(selRef_copy - 0x10F82)
ADD             R7, SP, #8
ADD             R0, PC ; selRef_copy
MOV             R4, R3
LDR             R1, [R0] ; "copy"
MOV             R0, R2
BLX             _objc_msgSend
MOV             R1, #(_OBJC_IVAR_$_CalcValueView._stringValue - 0x10F96) ; NSString *_stringValue;
ADD             R1, PC  ; NSString *_stringValue;
LDR             R2, [R1] ; NSString *_stringValue;
LDR             R1, [R5,R2]
STR             R0, [R5,R2]
MOV             R0, R1
BLX             _objc_release
MOV             R0, #(_OBJC_IVAR_$_CalcValueView._stringIsUserEntered - 0x10FB0) ; char _stringIsUserEntered;
MOVW            R1, #(:lower16:(selRef__updateValue - 0x10FB6))
ADD             R0, PC  ; char _stringIsUserEntered;
MOVT.W          R1, #(:upper16:(selRef__updateValue - 0x10FB6))
ADD             R1, PC ; selRef__updateValue
LDR             R0, [R0] ; char _stringIsUserEntered;
LDR             R1, [R1] ; "_updateValue"
STRB            R4, [R5,R0]
MOV             R0, R5
POP.W           {R4,R5,R7,LR}
B.W             j__objc_msgSend
; End of function -[CalcValueView setDisplayValue:userEntered:]

同时发现,第一个参数实际上是一个NSString,在cycript中使用用这样的脚本:

cy# choose(CalcValueView)
[#"<CalcValueView: 0x1667ca80; frame = (15 20; 290 88); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1667cc80>>"]
cy# a = [[NSString alloc] initWithFormat:@"1"]
@"1"
cy# [#0x1667ca80 setDisplayValue: a  userEntered: 0]

达到了预期改变显示值的效果,也就验证了之前的推测。后面我写了一段这样的Tweak:

%hook CalcValueView
- (void) setDisplayValue:(id) arg1 userEntered:(BOOL) arg2
{
//      NSString *newString = [[NSString alloc] initWithFormat:@"12345"];
//      %orig(newString, arg2);
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Call me BOSS Z" message:nil delegate:self cancelButtonTitle:@"BOSS Z" otherButtonTitles:nil];
        [alert show];
        [alert release];
}
%end

却发现并没有吧程序挂住,没有任何效果。
这里arg2之所以是BOOL,是因为在class-dump中的头文件是这样写的。

- (void)setDisplayValue:(id)arg1 userEntered:(BOOL)arg2;

我觉得这个函数应该比较长了吧,不至于hook不上吧?所以不知道是怎么回事orz,拜托各位帮我找找问题,麻烦大家了,谢谢~

tweak所对应的plist加包名了么?

我也遇到了这个问题,plist所对应的包名是对的,其他还有什么原因呢?