Giter Site home page Giter Site logo

derekselander / lldb Goto Github PK

View Code? Open in Web Editor NEW
1.7K 57.0 193.0 22.87 MB

A collection of LLDB aliases/regexes and Python scripts to aid in your debugging sessions

License: GNU General Public License v2.0

Python 100.00%
lldb ios debugging xcode python

lldb's Introduction

LLDB

img

A collection of LLDB aliases/regexes and Python scripts to aid in my debugging sessions. These scripts are built only for my own amusement, but some of them might be helpful in your own work. If you want to gain a better understanding of how to build these LLDB scripts, or gain a better understanding of LLDB in general, check out Advanced Apple Debugging and Reverse Engineering.

Installation

  1. To Install, copy/clone the lldb_commands folder to a dir of your choosing.
  2. Open up (or create) ~/.lldbinit
  3. Add the following command to your ~/.lldbinit file: command script import /path/to/lldb_commands/dslldb.py

Boom! You're good to go!

You can test to make sure everything worked successfully by just trying one of the commands in the debugger... i.e. (lldb) help methods

I'd recommend cloning. That way when I announce some new script/fix, you can just git pull instead of repeating this whole process.

LLDB Scripts

For all commands below, you can view the documentation via help {command}. If you want to see what options a command has, type {command} -h.

TLDR: search, lookup, and dclass are good GOTOs irregardless if you're a dev or exploring without source.

If you like ObjC swizzling, check out sclass. If you like DTrace, check out pmodule and snoopie.

search

Searchs the heap for all alive instances of a certain class. This class must by dynamic (aka inherit from a NSObject/SwiftObject class). Currently doesn't work with NSString or NSNumber (tagged pointer objects).

Example:

  # Find all instances and subclasses of UIView
  (lldb)  search UIView

  # Find all instances of UIView that are UIViews. Ignore subclasses.
  (lldb) search UIView -e

  #Find all instances of UIView whose tag is equal to 5. Objective-C syntax only. Can reference object by 'obj'
  (lldb) search UIView -c "(int)[obj tag]==5"

  # Find all instances of a UIView subclass whose class is implemented in the SpringBoardUI module
  (lldb) search UIView -m SpringBoardUI

  # Find all UIView subclasses created in the "Woot" module and hide them
  (lldb) search UIView -m Woot -p "[obj setHidden:YES]"

  # Search for UIViews but just print the class, don't print object description (ideal for Swift where they hide the pointer)
  (lldb) search UIView -b

  # Remember, Swift includes the module in a class name, so if you have a Swift UIView called TestView in module WOOT...
  (lldb) search WOOT.TestView -b

  # Search for all classes that contain a reference to the pointer 0xfeedfacf
  (lldb) search -r 0xfeedfacf

dclass

Dumps all the NSObject/SwiftObject inherited classes in the process. If you give it a module, it will dump only the classes within that module. You can also filter out classes to only a certain type and can also generate a header file for a specific class.

Example:

  # Dump ALL the classes (Swift and Objective-C) found within the process
  (lldb) dclass

  # Dump ObjC/Swift info (if applicable) about the class "Hello.SomeClass" (same as dclass -i Hello.SomeClass)
  (lldb) dclass Hello.SomeClass

  # Dump all the classes that are a UIViewController within the process
  (lldb) dclass -f UIViewController

  # Dump all the classes with the regex case insensitive search "viewcontroller" in the class name
  (lldb) dclass -r (?i)viewCoNtrolLer

  # Dump all the classes within the UIKit module
  (lldb) dclass -m UIKit

  # Dump all classes in CKConfettiEffect NSBundle that are UIView subclasses
  (lldb) dclass /System/Library/Messages/iMessageEffects/CKConfettiEffect.bundle/CKConfettiEffect -f UIView

  # Generate a header file for the class specified:
  (lldb) dclass -g UIView

  # Generate a protocol that you can cast an object to. Ideal when working with private classes at dev time
  (lldb) dclass -P UIView

  # Dump all classes and methods for a particular module, ideal for viewing changes in frameworks over time
  (lldb) dclass -o UIKit

  # Only dump classes whose superclass is of type NSObjecr and in the UIKit module. Ideal for going after specific classes like a datasource where it will likely inherit from NSObject
  (lldb) dclass -s NSObject -m UIKit

  # Dump only Swift classes
  (lldb) dclass -t swift

  # Dump only Objective-C classes
  (lldb) dclass -t objc

  # Get a simplified "class-dump" of the UIView class
  (lldb) dclass -i UIView

  # Get more information than you ever wanted to know about UIView
  (lldb) dclass -I UIView

section

Displays data in the Mach-O segments/sections of the executable or frameworks loaded into the proc

  # Dump the Mach-O segments to the main executable
  (lldb) section

  # Dump the Mach-O segments to UIKit
  (lldb) section UIKit

  # Dump the Mach-O sections of the __TEXT segment of UIKit
  (lldb) section UIKit __TEXT

  # Get the load address of all the hard-coded uint8_t * strings in the UIKit binary
  (lldb) section UIKit __TEXT.__cstring -l

  # Get the entitlements for the executable (simulator only, entitlements for actual app in __LINKEDIT)
  (lldb) section  __TEXT.__entitlements

  # Get all the load address to the lazy symbol stubs in the main executable
  (lldb) section  __DATA.__la_symbol_ptr -l

dd

Alternative to LLDB's disassemble command. Uses colors. Terminal only and designed for x86)64. ARM64 support will come one day... yoink example

sbt

  Symbolicate backtrace. Will symbolicate a stripped backtrace from an executable if the backtrace is using Objective-C
  code. Currently doesn't work on aarch64 stripped executables but works great on x64 :]

  You learn how to make this command in the book :]

sbt example

msl

  msl 0xadd7e55
  msl or malloc stack logging will take an address and try and obtain the stack trace to
  when it was created. 

  You will need to set the env var to MallocStackLogging, or `execute turn_on_stack_logging(1)`
  while the process is active

  You learn how to make this command in the book :]

msl example

lookup

Perform a regular expression search for stuff in an executable

Example:

  # Find all methods that contain the phrase viewDidLoad
  (lldb) lookup viewDidLoad

  # Find a summary of all the modules that have a (known) function containing the phrase viewDidLoad
  (lldb) lookup viewDidLoad -s

  # Search for Objective-C code in a stripped module (i.e. in SpringBoard)
  (lldb) loo -x StocksFramework .

  # Search for Objective-C code containing the case insensitive phrase init inside a stripped main bundle
  (lldb) lookup -X (?i)init

  # Search for all hardcoded, embeded `char *` inside an executable containing the phrase *http* inside UIKit
  (lldb) lookup -S http -m UIKit

  # Dump all the md5'd base64 keys in libMobileGestalt along w/ the address in memory
  (lldb) loo -S ^[a-zA-Z0-9\+]{22,22}$ -m libMobileGestalt.dylib -l

  # Dump all the global bss code referenced by DWARF. Ideal for accessing `static` variables when not in scope
  (lldb) lookup . -g HonoluluArt -l
  
  # Look for phrase "nominal" (Swift's nominal type descriptors) in module "SwiftTest" and get address, don't evaluate symbol
  (lldb) lookup -G SwiftTest nominal -l 

biof

Break if on func. Syntax: biof regex1 [OptionalModuleName] ||| regex2 RequiredModuleName
Regex breakpoint that takes two regex inputs. The first regex creates a breakpoint on all matched functions.
The second regex will make a breakpoint condition to stop only if the second regex breakpoint is in the stack trace

For example, to only stop if code in the "TestApp" module resulted in executing the setTintColor: method being called
biof setTintColor: ||| . Test

As a tip, it would be wise to have a limited regex1 that matches a small amount of functions, while keeping regex2 at any size

yoink

Takes a path on a iOS/tvOS/watchOS and writes to the /tmp/ dir on your computer. If it can be read by -[NSData dataWithContentsOfFile:], it can be written to disk

Example (on iOS 10 device):

  (lldb) yoink /System/Library/Messages/iMessageEffects/CKConfettiEffect.bundle/CKConfettiEffect

yoink example

pmodule

Creates a custom dtrace script that profiles modules in an executable based upon its memory layout and ASLR. Provide no arguments w/ '-a' if you want a count of all the modules firing. Provide a module if you want to dump all the methods as they occur. The location of the script is copied to your computer so you can paste the soon to be executed dtrace script in the Terminal.

WARNING: YOU MUST DISABLE ROOTLESS TO USE DTRACE

  # Trace all Objective-C code in UIKit 
  (lldb) pmodule UIKit

  # Trace all non-Objective-C code in libsystem_kernel.dylib (i.e. pid$target:libsystem_kernel.dylib::entry)
  (lldb) pmodule -n libsystem_kernel.dylib

  # Dump errrything. Only displays count of function calls from modules after you end the script. Warning slow
  (lldb) pmodule -a

pmodule example

snoopie

Generates a DTrace script that will only profile classes implemented
in the main executable irregardless if binary is stripped or not. This is done via
profiling objc_msgSend. The creation of this command is discussed in the book.

WARNING: YOU MUST DISABLE ROOTLESS TO USE DTRACE

LLDB Commands

ls

List a directory from the process's perspective. Useful when working on an actual device.

  # List the root dir's contents on an actual iOS device
  (lldb) ls /

  # List contents for /System/Library on an actual iOS device
  (lldb) ls /System/Library

reload_lldbinit

Reloads all the contents in your ~/.lldbinit file. Useful for seeing if your python script(s) broke or want to do incremental updates to a python script

# Reload/Refresh your LLDB scripts
(lldb) reload_lldbinit

tv

Toggle view. Hides/Shows a view depending on it's current state. You don't need to resume LLDB to see changes. ObjC only

# Toggle a view on or off
(lldb) tv [UIView new]

pprotocol

Dumps all the required and optional methods for specific protocol (Objective-C only)

# Dump the protocol for UITableViewDataSource
(lldb) pprotocol UITableViewDataSource

pexecutable

Prints the location (on disk) of the filepath to the executable

(lldb) pexecutable

pframework

Prints the location (on disk) of a framework

(lldb) pframework UIKit

sys

Drops into the shell to execute commands. Note you can execute LLDB commands via the $() syntax

# ls the directory LLDB is running in
(lldb) sys ls

# Use otool -l on the UIKit framework
(lldb) sys otool -l $(pframework UIKit)

# Open the main executable in another program
(lldb) sys open -a "Hopper" $(pexecutable)

methods

Dumps all methods inplemented by the NSObject subclass (iOS, NSObject subclass only)

# Get all the methods of UIView
(lldb) methods UIView

ivars

Dumps all ivars for an instance of a particular class which inherits from NSObject (iOS, NSObject subclass only)

# Get all the ivars on a newly created instance of UIView
(lldb) ivars [UIView new]

dumpenv

Dumps the environment variables found in the process

(lldb) dumpenv

TESTMANAGERD_SIM_SOCK=/private/tmp/com.apple.launchd.9BmpbuRgyE/com.apple.testmanagerd.unix-domain.socket

MallocNanoZone=0
...

keychain

Dumps the keychain database relevant to the process

(lldb) keychain
<__NSArrayM 0x600001fb1590>(
{
acct = "localdevice-AuthToken";
agrp = apple;
"v_Data (str)" = "A8CD94D2-13E3-40B...

info

Determine what the hey the address is. Determines if it's a heap, MachO or stack address

(lldb) info 0x00007ffee39fd540
0x00007ffee39fd540, stack address (SP: 0x7ffee39fd4e8, FP: 0x7ffee39fd540) mach_msg_trap 

(lldb) info 0x7ff15e866800
0x7ff15e866800, 0x7ff15e866800 heap pointer, (0x600 bytes) 

(lldb) info 0x1279232a6
0x1279232a6,   -[MKPlaceInfoViewController viewDidLoad]     <+0> `MapKit`__TEXT.__text + 0x1813d6 

lsof

List open file descriptors in process. (No args)

(lldb) lsof 
0 /dev/null
1 /dev/null
2 /dev/null
4 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/KeyboardLayouts/USBKeyboardLayouts.bundle/uchrs/US.uchr

gg

Suspend the process (good game, AKA game over, weird one, I know). (No args)

dump_app_contents

Dumps contents of application bundle. (No args)

mload

dlopen convenience method

pbpaste

Paste selected text from your mac to your iOS device. (No args, but make sure you have something in the clipboard)

bdel

Delete breakpoint by address

data

Dump the bytes of a NSData object

pexecutable

Dumps the fullpath to the executable. (No args)

plocalmodulelist

Dumps the local modules specific for the application. (No args)

overlaydbg

Displays the UIDebuggingInformationOverlay on iOS in 11. Check out http://ryanipete.com/blog/ios/swift/objective-c/uidebugginginformationoverlay/ for instructions

# Display UIDebuggingInformationOverlay
(lldb) overlaydbg

You read all the way to here!? Here's a video highlighting some of these scripts

lldb's People

Contributors

aaronash avatar chrissimpkins avatar crsantos avatar derekselander avatar gettoset avatar lanza avatar rderik avatar zcutlip avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lldb's Issues

error when `ex -l swift -- import Foundation`

Hey,

I've just started this book and got an error while trying to import Foundation into lldb.

(lldb) ex -l swift -- import Foundation

Cannot create Swift scratch context (couldn't load the Swift stdlib)Cannot create Swift scratch context (couldn't load the Swift stdlib)Shared Swift state for Xcode could not be initialized.
The REPL and expressions are unavailable.

What is going on here?

Command line tools are set in Xcode preferences:
Screenshot 2019-10-26 at 13 49 58

Regards,
Tom

Running sys echo "$(dclass -t swift)" outputs "command not found"

I just started reading Advanced Apple Debugging & Reverse Engineering, and I am in chapter 1 where it says to execute:

(lldb) sys echo "$(dclass -t swift)" | grep -v _ | grep "\." | cut -d. -f1 | uniq | wc -l

When attached to Xcode 10.2, upon running this command, I receive over 1000 lines of output ending with this:

/bin/sh: line 1422: _TtGCs23_ContiguousArrayStorageGVs5RangeSi__$: command not found
/bin/sh: line 1423: _TtGCs23_ContiguousArrayStorageGSaGVs5RangeSi___$: command not found
/bin/sh: line 1424: _TtGCs23_ContiguousArrayStorageV12SourceEditor26SourceEditorLineIdentifier_$: command not found
/bin/sh: line 1425: _TtGCs23_ContiguousArrayStorageCSo18NSAttributedString_$: command not found
/bin/sh: line 1426: _TtGCs23_ContiguousArrayStorageCSo9NSTextTab_$: command not found
/bin/sh: line 1427: _TtGCs23_ContiguousArrayStorageTSSP___$: command not found
/bin/sh: line 1428: _TtGCs23_ContiguousArrayStorageGSqP12SourceEditor30SourceEditorDataSourceObserver___$: command not found
/bin/sh: line 1429: _TtGCs23_ContiguousArrayStorageTVs11AnyHashableP___$: command not found
/bin/sh: line 1430: _TtGCs23_ContiguousArrayStorageTaSo21NSAttributedStringKeyP___$: command not found
/bin/sh: line 1431: _TtGCs23_ContiguousArrayStorageP12SourceEditor29SourceEditorFeatureController__$: command not found
/bin/sh: line 1432: _TtGCs23_ContiguousArrayStorageVs9Character_$: command not found
/bin/sh: line 1433: _TtGCs23_ContiguousArrayStorageP12SourceEditor33EditAssistantPostProcessOperation__$: command not found
/bin/sh: line 1434: _TtGCs23_ContiguousArrayStorageP12SourceEditor32EditAssistantPreProcessOperation__$: command not found
/bin/sh: line 1435: _TtGCs23_ContiguousArrayStorageaSo16NSPasteboardType_$: command not found
/bin/sh: line 1436: _TtGCs23_ContiguousArrayStorageVSo21NSTrackingAreaOptions_$: command not found
/bin/sh: line 1437: _TtGCs23_ContiguousArrayStorageP12SourceEditor30LineLayerRangeOverrideProvider__$: command not found
/bin/sh: line 1438: _TtGCs23_ContiguousArrayStorageP12SourceEditor27ColumnShiftOverrideProvider__$: command not found
/bin/sh: line 1439: _TtGCs23_ContiguousArrayStorageGSaVC12SourceEditor25SourceEditorDelimiterDataP1020db24a09Delimiter__$: command not found
/bin/sh: line 1440: _TtGCs23_ContiguousArrayStorageP12SourceEditor35HiddenGutterContentOverrideProvider__$: command not found
/bin/sh: line 1441: _TtGCs23_ContiguousArrayStorageP12SourceEditor29LineHighlightOverrideProvider__$: command not found
/bin/sh: line 1442: _TtGCs23_ContiguousArrayStorageP12SourceEditor27SourceEditorMarginAccessory__$: command not found
/bin/sh: line 1443: _TtGCs23_ContiguousArrayStorageP12SourceEditor28LineNumberAttributesProvider__$: command not found
/bin/sh: line 1444: _TtGCs23_ContiguousArrayStorageP12SourceEditor29SourceEditorViewEventConsumer__$: command not found
/bin/sh: line 1445: _TtGCs23_ContiguousArrayStorageP12SourceEditor29TextAttributeOverrideProvider__$: command not found
/bin/sh: line 1446: _TtGCs23_ContiguousArrayStorageP12SourceEditor22LayoutOverrideProvider__$: command not found
/bin/sh: line 1447: _TtGCs23_ContiguousArrayStorageP12SourceEditor19LayoutVisualization__$: command not found
/bin/sh: line 1448: _TtGCs23_ContiguousArrayStorageCSo18NSLayoutConstraint_$: command not found
/bin/sh: line 1449: _TtGCs23_ContiguousArrayStorageV12SourceEditorP1020db875035SourceEditorDataSourceObserverToken_$: command not found
/bin/sh: line 1450: _TtGCs23_ContiguousArrayStorageVSo8_NSRange_$: command not found
/bin/sh: line 1451: _TtGCs23_ContiguousArrayStorageC12SourceEditor20SourceEditorLineData_$: command not found
/bin/sh: line 1452: _TtGCs23_ContiguousArrayStorageVSo26NSStringEnumerationOptions_$: command not found
/bin/sh: line 1453: _TtGCs23_ContiguousArrayStorageVSo18CAAutoresizingMask_$: command not found
/bin/sh: line 1454: _TtGCs23_ContiguousArrayStorageV12SourceEditor30SourceEditorFontRenderingStyle_$: command not found
/bin/sh: line 1455: _TtGCs23_ContiguousArrayStoragePMP12SourceEditor29SourceEditorFeatureController__$: command not found
/bin/sh: line 1456: _TtGCs23_ContiguousArrayStorageCSo13IDEAlertEvent_$: command not found
/bin/sh: line 1457: _TtGCs23_ContiguousArrayStorageSi_$: command not found
/bin/sh: line 1458: _TtGCs23_ContiguousArrayStorageVs5UInt8_$: command not found
/bin/sh: line 1459: _TtGCs23_ContiguousArrayStorageGSaVs5UInt8__$: command not found
/bin/sh: line 1460: _TtGCs23_ContiguousArrayStorageO21DNTDocumentationModel14SourceLanguage_$: command not found
/bin/sh: line 1461: _TtGCs23_ContiguousArrayStorageV21DNTDocumentationModel24AllCollectionsIdentifier_$: command not found
/bin/sh: line 1462: _TtGCs23_ContiguousArrayStoragePs9CodingKey__$: command not found
/bin/sh: line 1463: _TtGCs23_ContiguousArrayStorageP23DNTDocumentationSupport8SQLValue__$: command not found
/bin/sh: line 1464: _TtGCs23_ContiguousArrayStorageGVs10DictionarySSP23DNTDocumentationSupport8SQLValue___$: command not found
/bin/sh: line 1465: _TtGCs23_ContiguousArrayStorageCSo32DVTSourceControlRemoteRepository_$: command not found
/bin/sh: line 1466: _TtGCs23_ContiguousArrayStorageP__$: command not found
/bin/sh: line 1467: _TtGCs23_ContiguousArrayStorageCSo9NSControl_$: command not found
/bin/sh: line 1468: _TtGCs23_ContiguousArrayStorageGSqCSo9NSControl__$: command not found
/bin/sh: line 1469: _TtGCs23_ContiguousArrayStorageSS_$: command not found
/bin/sh: line 1470: _TtGCs23_ContiguousArrayStorageVs4Int8_$: command not found
/bin/sh: line 1471: Swift.__EmptyArrayStorage: command not found
Dumping classes
       0

I attempted to break it down to find the problem, but quickly realized that even if I use (lldb) sys echo "$(dclass -t swift)", I get the same output (minus the "0" at the end).

If I just run dclass -t swift, I get the desired output.
If I just run sys echo "hello world". I also get the desired output.

I would like to be able to follow along with this part of the book, but I can not seem to get this command to work as desired. Any help would be appreciated.

Couldn't load top-level module Foundation

A lot of the methods in the plugin don't seem to be working for me. They all seem to revolve around giving me this "Couldn't load top-level module Foundation". Sorry if this is a dumb question, I'm very new to reverse engineering binaries.

(lldb) dclass
Dumping classes
error: error: while importing modules:
error: Couldn't load top-level module Foundation


(lldb) search UIView
error: 
**************************************
error: error: error: unknown type name 'CFMutableSetRef'
error: unknown type name 'CFMutableSetRef'
error: unknown type name 'CFMutableArrayRef'
error: unknown type name 'CFMutableSetRef'
error: use of undeclared identifier 'CFMutableSetRef'
error: use of undeclared identifier 'CFMutableSetRef'
error: use of undeclared identifier 'CFMutableArrayRef'
error: 'NSClassFromString' has unknown return type; cast the call to its declared return type
error: unknown type name 'CFMutableSetRef'
error: unknown type name 'CFMutableSetRef'
error: unknown type name 'CFMutableArrayRef'
error: use of undeclared identifier 'CFIndex'
error: assigning to 'uint32_t' (aka 'unsigned int') from incompatible type 'char *(const char *, int)'
error: while importing modules:
error: Couldn't load top-level module Foundation

I tried following along with your "Reverse Engineering the iOS Simulator’s SpringBoard" but dumping the SpringBoard classes returned zero results. Any ideas what could be wrong?

(lldb) dclass -m SpringBoard
Dumping classes
error: error: while importing modules:
error: Couldn't load top-level module Foundation

sbt command not working

Thank you for providing wondering python scripts. However, I cannot get sbt command to work!
I followed the installation instruction to the tee, but I get following error:
___lldb_unnamed_symbol33766$$... unresolved womp womp
image

Please help!

Any suggestion on integrate theos into XCode

I've just watched your lldb workshop video, it's awesome, I love it.

Now I'm interested in jailbreak development. I've written serval tweaks using theos with sublime text. I'm wondering is there any way to integrate theos into Xcode, so that I can benefit from it's syntax highlighted and code completion.

I don't like IOSOpenDev, it's outdated and need many fixes.

Thanks.

New feature

Adding in the option to have all the registers print on each step/breakpoint would be great. Is this something that could be added in future revisions?

Python3 support

Could you confirm or consider to add support of python3 with lldb?

dd command failed

Env:
Symulator iOS 11.2 iPhone X

Usage:
(lldb) dd 0x10af2df62

Result:
Traceback (most recent call last):
File "/some/path/lldb/lldb_commands/disassemble.py", line 42, in handle_command
output += generateAssemblyFromSymbol(sym, options, exe_ctx)
File "/some/path/lldb/lldb_commands/disassemble.py", line 74, in generateAssemblyFromSymbol
pc = ds.attrStr('-> ', 'red') if frame.addr == inst.addr else ' '
NameError: global name 'frame' is not defined

command alias p/x

hi,i see the command alias like
command alias reload_lldbinit command source ~/.lldbinit.

now I'd like to
command alias 1 p/x $x1
.....

but it note:
error: invalid command given to 'command alias'. 'p/x $x1' does not begin with a valid command. No alias created.

can you help me?

dd command issue

dd isn't working for me on Version 8.3.3 (8E3004b) of Xcode

@DerekSelander Thanks for all your hard work and enjoying your book!

(lldb) dd
Traceback (most recent call last):
File "/usr/local/bin/lldb_commands/disassemble.py", line 37, in handle_command
output += generateAssemblyFromSymbol(sym, options)
File "/usr/local/bin/lldb_commands/disassemble.py", line 66, in generateAssemblyFromSymbol
mnemonic = ds.attrStr(inst.mnemonic.ljust(5), 'red')
File "/Applications/Xcode8.app/Contents/SharedFrameworks/LLDB.framework/Resources/Python/lldb/init.py", line 5220, in mnemonic_property
return self.GetMnemonic (target)
File "/Applications/Xcode8.app/Contents/SharedFrameworks/LLDB.framework/Resources/Python/lldb/init.py", line 5173, in GetMnemonic
return _lldb.SBInstruction_GetMnemonic(self, *args)
ValueError: invalid null reference in method 'SBInstruction_GetMnemonic', argument 2 of type 'lldb::SBTarget'
(lldb)

symbol import in lldb

I would like to ask you how to solve the problem of symbol import in lldb, when I use it, I get an error like this "use of undeclared identifier 'Method'", and it seems to be very time consuming to import the required system headers one by one, because one system header file may depend on another system header file.

CFStringCreateWithBytes needed!

sbt-script-output.txt
Keep getting this when I run a variety of commands:

Error [IRForTarget]: Rewriting an Objective-C constant string requires CFStringCreateWithBytes

(this particular one comes from using sbt)

Wouldn't expect it to be a python 3-ism.

Sorry, was on a browser that didn't allow me to attach the text file. The file attached contains the obj-c code that's trying to run and the context of the sbt use.

xcode13 search command not work

(lldb) search WCAccountLoginControlLogic
error:


error: error: error: error: Multiple internal symbols found for 'count'
id = {0x000019f8}, range = [0x00000001f6ad6798-0x00000001f6ad67a0), name="count"
id = {0x00000faf}, range = [0x00000001f5f309b0-0x00000001f5f309b8), name="count"

Chapter 1: No LLDB prompt after Xcode launch

Hi, perhaps I am missing something but following the book Ch 1,
after launching Xcode there is no longer lldb prompt which would allow
entering subsequent commands. It just prints out Xcode has been launched
and never getting back to prompt: (lldb). Where I might be wrong?

Scanning over lldb docs didn't yield too much.

methods command

I just updated to the latest scripts (from first week of May 2019).

When connected to a real or simulator iOS device, if I run...

(lldb) methods UIView
error: expression value didn't result in a scalar value for the expression 'UIView'

If I find a pointer to the Class, it works..

(lldb) search UIView
<UIImageView: 0x7fd81bd08450; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <CALayer: 0x60000290f020>>

(lldb) methods 0x7fd81bd08450
...happily lists class and instance methods here....
(lldb) help methods
     Dumps all methods implemented by the NSObject subclass (iOS, NSObject
     subclass only)  Expects 'raw' input (see 'help raw-input'.)

Syntax: methods UIView

Enumerating NoneType

So there's a bug that seems pretty endemic with respect to enumerating a NoneType. You can see it in search at line 110 (I think i may be a python3 issue?):

Currently in search.py:110: if 'nil' in res.GetOutput():

Fixed with?
ro = res.GetOutput()
if ro is None or 'nil' in res.GetOutput():

Not sure if this is correct though.

msl not working in Xcode 12.4

Hi, I've enabled malloc stack logging in the scheme editor for my current target (Simulator x86_64), and when I take an ObjC object address and pass to msl, I'm not getting any output.

Is there something I might be missing, or otherwise how can I provide more information here for effective debugging?
I am using the latest version of this repo, as of this morning.

(lldb) p inObject
(ClassNameRedactedHere *) $5 = 0x00007f8beaab8e40
(lldb) msl 0x00007f8beaab8e40

Lookup not printing anything..

Hi Derek,

Is something broken in lookup or is this a base class / subclass thing?
I am debugging a largely ObjC release app that stripped but it set to debuggable (get-task-allow).

(lldb) lookup MYBaseView
(lldb) lookup MYBaseView -s
(lldb) lookup -x MYBaseView
// nothing printed to stdout

Search...

(lldb) search MYBaseView
// works perfect. prints the pointer references to the Heap objects. 

Strangely, even this fails [ despite the fact I can po the information:

image lookup -n "-[MyClass foobar]"
// nothing printed to stdout

I was using your scripts from the latest Master ( Jan 27, 2020 ) commit. Also:

(lldb) version
lldb-1100.0.30.6
Apple Swift version 5.1.2 (swiftlang-1100.0.278 clang-1100.0.33.9)

Change command names

Would you be opposed to changing some of the command names? I have some name collisions I'd like to avoid. I can make the change and submit a pull request if you're cool with it.

dclass is broken in Xcode 11.4 (11E146)/lldb-1103.0.22.4/Swift v5.2/swiftlang-1103.0.32.1/clang-1103.0.32.29)

Output of "dclass UNUserNotificationCenter":

(lldb) dclass UNUserNotificationCenter error: error: warning: <user expression 5>:406:92: format specifies type 'int' but the argument has type 'unsigned long' [returnString appendString:(NSString*)[[NSString alloc] initWithFormat:@"\t\t%d\t%p\n", bprot ? bprot->count : 0, bprot ? &bprot->first : 0]]; ~~ ^~~~~~~~~~~~~~~~~~~~~~~~ %lu error: <user expression 5>:558:110: no known method '-UTF8String'; cast the message send to the method's return type [returnString appendString:(NSString*)[[NSString alloc] initWithFormat:@" %s%40s %p\n", [methodType UTF8String], mt[i].name, mt[i].imp]]; ~~~~~~~~~~~~^~~~~~~~~~~ error: <user expression 5>:568:114: no known method '-UTF8String'; cast the message send to the method's return type [returnString appendString:(NSString*)[[NSString alloc] initWithFormat:@" %s%40s %p\n", [methodType UTF8String], mt[i].name, mt[i].imp]]; ~~~~~~~~~~~~^~~~~~~~~~~ warning: <user expression 5>:596:93: format specifies type 'void *' but the argument has type 'uintptr_t' (aka 'unsigned long') [returnString appendString:(NSString*)[[NSString alloc] initWithFormat:@"(%p) %s\n", ptr[i], dsinfo.dli_sname]]; ~~ ^~~~~~ %lu

Xcode 11 / iOS 13 support

Upon launching a project in Xcode 11 with iOS 13, a bunch of warnings related to this project are dumped:

error: module importing failed: Missing parentheses in call to 'print'. Did you mean print(data.sint64[0])? (ds.py, line 229)
  File "temp.py", line 1, in <module>
  File "/Users/ash/iOS/source/LLDB/lldb_commands/xref.py", line 4, in <module>
    import ds

error: module importing failed: Missing parentheses in call to 'print'. Did you mean print(data.sint64[0])? (ds.py, line 229)
  File "temp.py", line 1, in <module>
  File "/Users/ash/iOS/source/LLDB/lldb_commands/lookup.py", line 25, in <module>
    import ds

error: module importing failed: Missing parentheses in call to 'print'. Did you mean print(data.sint64[0])? (ds.py, line 229)
  File "temp.py", line 1, in <module>
  File "/Users/ash/iOS/source/LLDB/lldb_commands/section.py", line 7, in <module>
    import ds

error: module importing failed: Missing parentheses in call to 'print'. Did you mean print(data.sint64[0])? (ds.py, line 229)
  File "temp.py", line 1, in <module>
  File "/Users/ash/iOS/source/LLDB/lldb_commands/disassemble.py", line 7, in <module>
    import ds

error: module importing failed: Missing parentheses in call to 'print'. Did you mean print(data.sint64[0])? (ds.py, line 229)
  File "temp.py", line 1, in <module>
  File "/Users/ash/iOS/source/LLDB/lldb_commands/msl.py", line 5, in <module>
    import ds

error: module importing failed: Missing parentheses in call to 'print'. Did you mean print(data.sint64[0])? (ds.py, line 229)
  File "temp.py", line 1, in <module>
  File "/Users/ash/iOS/source/LLDB/lldb_commands/dclass.py", line 24, in <module>
    import ds

error: module importing failed: inconsistent use of tabs and spaces in indentation (search.py, line 383)
  File "temp.py", line 1, in <module>

error: module importing failed: Missing parentheses in call to 'print'. Did you mean print(data.sint64[0])? (ds.py, line 229)
  File "temp.py", line 1, in <module>

error: module importing failed: Missing parentheses in call to 'print'. Did you mean print(frame)? (breakifonfunc.py, line 84)
  File "temp.py", line 1, in <module>

error: module importing failed: Missing parentheses in call to 'print'. Did you mean print(data.sint64[0])? (ds.py, line 229)
  File "temp.py", line 1, in <module>
  File "/Users/ash/iOS/source/LLDB/lldb_commands/sbt.py", line 26, in <module>
    import ds

error: module importing failed: Missing parentheses in call to 'print'. Did you mean print('Whoops! You are missing the <' + arg.argName + '> argument.')? (fblldb.py, line 96)
  File "temp.py", line 1, in <module>

It looks like the commands are generally broken as well (dclass specifically, for example).
This is an awesome project, would love to see iOS 13 support. Thank you for all the work you've contributed on this project already!

ios 14.2 xcode 12.2 keychain error

(lldb) keychain
error: warning: <user expression 31>:15:5: collection expression type 'NSArray *' may not respond to 'countByEnumeratingWithState:objects:count:'
for (id secItemClass in secItemClasses) {
^ ~~~~~~~~~~~~~~
error: <user expression 31>:18:9: unknown type name 'CFTypeRef'
CFTypeRef result = NULL;
^
error: <user expression 31>:19:39: use of undeclared identifier 'CFDictionaryRef'
SecItemCopyMatching((__bridge CFDictionaryRef)query, &result);
^
warning: <user expression 31>:60:13: collection expression type 'NSArray *' may not respond to 'countByEnumeratingWithState:objects:count:'
for (id dsitem in keychainArray) {
^ ~~~~~~~~~~~~~

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.