我的环境是iphone5s
执行如图,都正常,
操作 ni 很多次也到不了error invalid thread
求指教
为什么要 error invalid thread,我没看懂
第二版517页, 书上的操作步骤得到的结果 我按照步骤走,但是我没得到这个结果
书没在身边。。。得晚上看看了。。。或者你说下上下文。。
// clang -arch armv7 -isysroot `xcrun --sdk iphoneos -- show-
sdk-path` -framework Foundation -o MainBinary main.m #include <stdio.h>
#include <dlfcn.h>
#import <Foundation/Foundation.h>
extern void TestFunction0(void)
{
NSLog(@"iOSRE: %u", arc4random_uniform(0));
}
extern void TestFunction1(void) {
NSLog(@"iOSRE: %u", arc4random_uniform(1));
}
extern void TestFunction2(void) {
NSLog(@"iOSRE: %u", arc4random_uniform(2));
}
extern void TestFunction3(void) {
NSLog(@"iOSRE: %u", arc4random_uniform(3));
}
int main(int argc, char **argv) {
TestFunction3(); return 0;
}
寻找目标函数
把 MainBinary 放到iphone var/temp里 ,寻找nslog是哪个函数调用的
然后命令行的操作如我上面的 截图.
书上说:此时 mainBinary还未启动,我们位于dyld内部,一直执行"ni"命令,直到 "error:invalid thread"出现,但是我ni了 好多次 都没有出现
现在一直ni
貌似不行了,可以先b main
,然后c
,在main
上停下来,再执行im li -o -f
行了,找到目标函数了
但是过程中很多 指令都不懂啥意思
b main意思是 在main函数上加断点? mainBinary是咋启动的…
现在都是64位 汇编 ,很多指令意思不知道从哪能得到解释
ARM64 Manual
TBZ X1,#3 label //若X1[3]==0,则跳转到label
但是我我感觉这个说法是错的
main + 56 MainBinary
main:(lldb) register write w0 1
(lldb) c
Process 2574 resuming
2017-10-18 17:16:33.312 MainBinary[2574:1476885] iOSRE: Suppose I’mcomplicated function
Process 2574 exited with status = 0 (0x00000000)
(lldb)
我好像有点明白了,之前说的问题不存在,自己没仔细看0x1000b3f1c 就是 mov w8, #0x0,而不是ImportantAndComplicatedFunction,