书上210修改寄存器的值后运行,程序退出了,但是并没有打印相应的结果


#1

鉴于论坛大量涌入新人且提问缺乏必要信息导致问题无法解决,目前暂行提问模版机制。试运行期间内新帖没有按照这个模版发帖将导致 锁帖/删帖/封号
(除非有原因,某些问题无法分类进下面的分支。这一点完全靠管理员唯一指定,大多数普通问题请老实按照下面的分类)

标**的为可选项

需求: (请勿使用 “我的需求是a但是我认为b可以解决a所以我来问问b” 这种提问模式,会造成误导)
**日志: (例如iOS系统的日志,OS X上相关操作的日志,etc)
**代码: (如果项目本身代码不方便发布请提供最小问题重现代码)
操作步骤: (请详细描述自己每步做了什么操作)
** 任何其他描述: (描述问题的现象,等等)
** 环境: (系统版本,安装的相关工具,等操作)
需求:书上210页,修改寄存器的值后,打印出修改后的相应结果
日志:
Process 18398 stopped

  • thread #1: tid = 0x13a170, 0x000000010007bf10 MainBinarymain + 36, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 frame #0: 0x000000010007bf10 MainBinarymain + 36
    MainBinary`main:
    -> 0x10007bf10 <+36>: tbz w8, #0, 0x10007bf1c ; <+48>
    0x10007bf14 <+40>: bl 0x10007bed0 ; ImportantAndComplidatedFunction
    0x10007bf18 <+44>: b 0x10007bf28 ; <+60>
    0x10007bf1c <+48>: adrp x0, 1
    (lldb) p $w8
    (unsigned int) $1 = 1
    (lldb) register write $w8 0
    (lldb) p $w8
    (unsigned int) $2 = 0
    (lldb) c
    Process 18398 resuming
    Process 18398 exited with status = 0 (0x00000000)
    (lldb)

代码:
#include stdio.h>
#include dlfcn.h>
#import Foundation/Foundation.h>
#import UIKit/UIKit.h>

extern void ImportantAndComplidatedFunction()
{
NSLog(@“iOSRE: Suppose I’m a very important and complicated function”);
}

int main(int argc, char **argv)
{
BOOL isIOS10 = YES;
if (isIOS10) {
ImportantAndComplidatedFunction();
}
else
{
NSLog(@“不是iOS10”);
}
return 0;
}
描述:修改w8的值为0后,再c,并没有打印文字"不是iOS10"
环境:iOS10.0.2 iPhone5s


#2

你贴出的汇编里没看到w8啊。
然后你这种代码编译器可能会优化掉的


#3

断点的哪一行就有w8啊,被编译器优化掉是什么意思?有办法不被优化掉吗


#4

为什么要带着这些呢


#5

如果可以的话请把编译好的可执行文件发给我看下


#6

照着这个模板写的,当时正好下班,发布的时候忘记删掉了:sweat:


#7

MainBinary (48.8 KB)
这是在手机上运行正常后,复制下来的. 麻烦了!