llvm调试命令

转载 2016年06月01日 10:21:20

转载自:https://everettjf.github.io/2016/05/25/my-ios-debug-cheatsheet

common
查找进程:

ps aux | grep /App
ps -e | grep /Applications
查找文件:

grep -r ToBeFind /System/Library/
分离fat binary

lipo -thin armv7 WeChat.decrypted -output WeChat_armv7.decrypted
lipo -thin armv64 xxx.decrypted -output xxx_arm64.decrypted
class dump

class-dump –list-arches AlipayWallet.decrypted

class-dump -S -s -H WeChat_armv7.decrypted -o dumparmv7
class-dump -s -S -H –arch armv7 AlipayWallet.decrypted -o dumpAlipay
lldb
参考

https://github.com/iosre/iOSAppReverseEngineering
http://objccn.io/issue-19-2/
帮助

help frame
打印UI结构

po [[[UIWindow keyWindow] rootViewController] _printHierarchy] (iOS 8)
po [[UIWindow keyWindow] recursiveDescription]
栈信息

bt (backtrace)
bt all (all threads)
objc_msgSend 参数打印

po r0p(char)r1
p (SEL)$r1
返回地址

p/x $lr
断点

br s -a 0x0023234f
breakpoint set -F “-[NSArray objectAtIndex:]”

br s -a 0x02107730+0x000ab000 -c ‘(BOOL)[(NSString *)$r2 isEqualToString:@”snakeninny”]’

b ptrace
列举模块

image -o -f
lldb基础命令

c
n
s
frame info
expr

thread return
breakpoint command add 1
远程调试

debugserver *:1234 -a AlipayWallet
debugserver -x backboard *:1234 /var/mobile/Containers/Bundle/Application/9DB7CE45-3B4C-42A3-9D4D-49A3A5122903/AlipayWallet.app/AlipayWallet
lldb连接远程调试

(lldb) process connect connect://192.168.199.164:1234
lldb expr例子

(lldb) expr char $str = (char )malloc(8)
(lldb) expr (void)strcpy(str,munkeys)(lldb)exprstr[1] = ‘o’
(char) 0=o(lldb)pstr
(char *) $str = 0x00007fd04a900040 “monkeys”

(lldb) x/4c $str
(lldb) x/1w $str + 3
(lldb) expr (void)free($str)

(lldb) expr id myView=(id)0x7f82b1d01fd0(lldb)expr(void)[myView setBackgroundColor:[UIColor blueColor]]
(lldb) expr (void)[CATransaction flush]

(lldb) po [$myButton allTargets]

(lldb) p (ptrdiff_t)ivar_getOffset((struct Ivar *)class_getInstanceVariable([MyView class], “_layer”))

观察点

(lldb) watchpoint set expression – (int *)$myView + 8

arm64

param1 x0param2x1

po x0p(char)x1
cycript
参考: http://www.cycript.org/manual/

开始

cycript -p BinaryName
打印UI结构

[[UIWindow keyWindow] recursiveDescription].toString()
[[[UIWindow keyWindow] rootViewController] _printHierarchy].toString()
打印沙盒Documents路径

[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]
基本使用

cy# [#0xb226710 url]
@”ww4fd1rfRDShBo_4K6rqfwAAACMAAQED”

cy# c = #0x1752d8c0
cy#”

llvm tools 中命令的简单使用

基本命令的介绍:opt:在中间语言(IR)层优化代码。输入文件必须是LLVM中间语言(LLVM IR),并且输出文件的类型必须与输入文件的类型相同。llc:通过特定的后端讲LLVM二进制代码转换为目标...

llvm 学习笔记 2 : 添加 Pass 与调试

在BackendUtil.cpp 的 void EmitAssemblyHelper::EmitAssembly 函数中, if (PerFunctionPasses)  条件后 new 了自带的 H...

LLVM的源代码调试

原文地址:http://llvm.org/docs/SourceLevelDebugging.html#llvm-dbg-declare 引子 本文是与LLVM调试信息相关的所有信息的集大成者。它...

LLVM implementing a language

  • 2015年11月25日 09:53
  • 580KB
  • 下载

LLVM 和 LLDB 调试器

XCode4.0以后,编译器换成了LLVM 编译器 2.0 与以前相比,更加强大: 1.LLVM 编译器是下一带开源的编译技术.完全支持C, Objective-C, 和 C++. 2.LLVM...

llvm写编译后端

  • 2015年10月10日 15:32
  • 881KB
  • 下载

Getting Started with LLVM Core Libraries.2014

  • 2016年11月13日 22:32
  • 3.08MB
  • 下载

基于LLVM的编译原理简明教程 (1) - 写编译器越来越容易了

跟学院派的厚书给大家的印象不同,其实用LLVM写个简单的编译器是件容易的事情,因为大部分事情LLVM都替我们做了。...
  • lusing
  • lusing
  • 2016年09月02日 19:28
  • 2484
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:llvm调试命令
举报原因:
原因补充:

(最多只允许输入30个字)