MainBinary调试问题

我的环境是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是咋启动的…

https://lldb.llvm.org/tutorial.html

现在都是64位 汇编 ,很多指令意思不知道从哪能得到解释

ARM64 Manual

:grinning:

TBZ X1,#3 label //若X1[3]==0,则跳转到label
但是我我感觉这个说法是错的

  • thread #1, queue = ‘com.apple.main-thread’, stop reason = breakpoint 2.1
    frame #0: 0x00000001000b3f14 MainBinarymain + 56 MainBinarymain:
    → 0x1000b3f14 <+56>: tbz w0, #0x0, 0x1000b3f1c ; <+64>
    0x1000b3f18 <+60>: bl 0x1000b3ec0 ; ImportantAndComplicatedFunction
    0x1000b3f1c <+64>: mov w8, #0x0
    0x1000b3f20 <+68>: mov x0, x8
    (lldb) p $w0

(unsigned int) $0 = 0 (这儿本来就是0,但是把他改成1才能执行ImportantAndComplicatedFunction 函数)

(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)

http://infocenter.arm.com/help/index.jsp

我好像有点明白了,之前说的问题不存在,自己没仔细看0x1000b3f1c 就是 mov w8, #0x0,而不是ImportantAndComplicatedFunction,:pensive: