hilda 3.0.1__py3-none-any.whl → 3.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
hilda/watchpoints.py CHANGED
@@ -10,7 +10,7 @@ class HildaWatchpoint:
10
10
 
11
11
  def __init__(self, hilda, lldb_watchpoint: lldb.SBWatchpoint, where: Optional[int] = None) -> None:
12
12
  """
13
- Initialize a watchpoint list.
13
+ Initialize a watchpoint.
14
14
 
15
15
  :param hilda.hilda_client.HildaClient hilda: Hilda client
16
16
  """
@@ -27,6 +27,9 @@ class HildaWatchpoint:
27
27
  A value identifying where the watchpoint was set (when it was created).
28
28
 
29
29
  It could be either an address (int) or a Hilda symbol object (Symbol, that inherits from int).
30
+ Note that self.address is similar, but self.where is where the watchpoint was set when it was
31
+ created (using Hilda API), and self.address is the actual address. They should have the same
32
+ value, although self.where may be a Hilda Symbol.
30
33
  """
31
34
  return self._where
32
35
 
@@ -60,11 +63,43 @@ class HildaWatchpoint:
60
63
  def condition(self, condition: Optional[str]) -> None:
61
64
  self.lldb_watchpoint.SetCondition(condition)
62
65
 
66
+ @property
67
+ def address(self) -> int:
68
+ """
69
+ Get the address this watchpoint watches (also see self.where).
70
+ """
71
+ return self.lldb_watchpoint.GetWatchAddress()
72
+
73
+ @property
74
+ def size(self) -> int:
75
+ """
76
+ Get the size this watchpoint watches.
77
+ """
78
+ return self.lldb_watchpoint.GetWatchSize()
79
+
80
+ @property
81
+ def enabled(self) -> bool:
82
+ """
83
+ Configures whether this watchpoint is enabled or not.
84
+ """
85
+ return self.lldb_watchpoint.IsEnabled()
86
+
87
+ @enabled.setter
88
+ def enabled(self, value: bool) -> None:
89
+ self.lldb_watchpoint.SetEnabled(value)
90
+
63
91
  def __repr__(self) -> str:
64
92
  return f'<{self.__class__.__name__} LLDB:{self.lldb_watchpoint} CALLBACK:{self.callback}>'
65
93
 
66
94
  def __str__(self) -> str:
67
- return repr(self)
95
+ emoji = '🚨' if self.enabled else '🔕'
96
+ enabled_str = 'enabled' if self.enabled else 'disabled'
97
+ result = f'{emoji} Watchpoint #{self.id} ({enabled_str})\n'
98
+
99
+ if self.where is not None:
100
+ result += f'\tWhere: {self.where}\n'
101
+
102
+ return result.strip('\n')
68
103
 
69
104
  def remove(self) -> None:
70
105
  """
@@ -128,7 +163,7 @@ class WatchpointList:
128
163
  Get a watchpoint by ID or the watchpoint itself.
129
164
 
130
165
  :param id_or_wp: Watchpoint's ID (or the watchpoint itself)
131
- :return: `HildaWatchpoint` is one exists, or `None` otherwise
166
+ :return: `HildaWatchpoint` if one exists, or `None` otherwise
132
167
  """
133
168
 
134
169
  if isinstance(id_or_wp, int):
@@ -198,13 +233,10 @@ class WatchpointList:
198
233
 
199
234
  def show(self) -> None:
200
235
  """ Show existing watchpoints. """
236
+ if len(self) == 0:
237
+ self._hilda.log_info('No watchpoints')
201
238
  for wp in self:
202
- message = f'🚨 Watchpoint #{wp.id}'
203
-
204
- if wp.where is not None:
205
- message += f'\n\tWhere: {wp.where}'
206
-
207
- self._hilda.log_info(message)
239
+ self._hilda.log_info(wp)
208
240
 
209
241
  def items(self) -> Generator[tuple[int, HildaWatchpoint], None, None]:
210
242
  """
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: hilda
3
- Version: 3.0.1
3
+ Version: 3.2.1
4
4
  Summary: LLDB wrapped and empowered by iPython's features
5
5
  Author-email: doronz88 <doron88@gmail.com>, matan <matan1008@gmail.com>, netanel cohen <netanelc305@protonmail.com>
6
6
  Maintainer-email: doronz88 <doron88@gmail.com>, matan <matan1008@gmail.com>, netanel cohen <netanelc305@protonmail.com>
@@ -55,6 +55,7 @@ Requires-Dist: inquirer3
55
55
  Requires-Dist: traitlets
56
56
  Provides-Extra: test
57
57
  Requires-Dist: pytest; extra == "test"
58
+ Dynamic: license-file
58
59
 
59
60
  # Hilda
60
61
 
@@ -128,7 +129,7 @@ You can may start a Hilda interactive shell by invoking any of the subcommand:
128
129
  - `hilda attach [-p pid] [-n process-name]`
129
130
  - Attach to an already running process on current host (specified by either `pid` or `process-name`)
130
131
  - `hilda remote HOSTNAME PORT`
131
- - Attach to an already running process on a target host (sepcified by `HOSTNAME PORT`)
132
+ - Attach to an already running process on a target host (specified by `HOSTNAME PORT`)
132
133
  - `hilda bare`
133
134
  - Only start an LLDB shell and load Hilda as a plugin.
134
135
  - Please refer to the following help page if you require help on the command available to you within the lldb shell:
@@ -144,173 +145,101 @@ You can may start a Hilda interactive shell by invoking any of the subcommand:
144
145
  ... and attaching to a local process:
145
146
 
146
147
  ```shell
147
- process attach -n proccess_name
148
- process attach -p proccess_pid
148
+ process attach -n process_name
149
+ process attach -p process_pid
149
150
  ```
150
151
 
151
152
  When you are ready, just execute `hilda` to move to Hilda's iPython shell.
152
153
 
153
154
  ### Inside a Hilda shell
154
155
 
155
- Upon starting Hilda shell, you are greeted with:
156
-
157
- ```
158
- Hilda has been successfully loaded! 😎
159
- Use the p global to access all features.
160
- Have a nice flight ✈️! Starting an IPython shell...
161
- ```
162
-
163
- Here is a gist of methods you can access from `p`:
164
-
165
- - `hd`
166
- - Print a hexdump of given buffer
167
- - `lsof`
168
- - Get dictionary of all open FDs
169
- - `bt`
170
- - Print an improved backtrace.
171
- - `disable_jetsam_memory_checks`
172
- - Disable jetsam memory checks, prevent raising:
173
- `error: Execution was interrupted, reason: EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=15 MB, unused=0x0).`
174
- when evaluating expression.
175
- - `symbol`
176
- - Get symbol object for a given address
177
- - `objc_symbol`
178
- - Get objc symbol wrapper for given address
179
- - `inject`
180
- - Inject a single library into currently running process
181
- - `rebind_symbols`
182
- - Reparse all loaded images symbols
183
- - `poke`
184
- - Write data at given address
185
- - `peek`
186
- - Read data at given address
187
- - `peek_str`
188
- - Peek a buffer till null termination
189
- - `peek_std_str`
190
- - Peek a `std::string`
191
- - `stop`
192
- - Stop process.
193
- - `cont`
194
- - Continue process.
195
- - `run_for`
196
- - Run the process for given interval.
197
- - `detach`
198
- - Detach from process.
199
- Useful in order to exit gracefully so process doesn't get killed
200
- while you exit
201
- - `disass`
202
- - Print disassembly from a given address
203
- - `file_symbol`
204
- - Calculate symbol address without ASLR
205
- - `get_register`
206
- - Get value for register by its name
207
- - `set_register`
208
- - Set value for register by its name
209
- - `objc_call`
210
- - Simulate a call to an objc selector
211
- - `call`
212
- - Call function at given address with given parameters
213
- - `monitor` or `breakpoints.add_monitor`
214
- - Monitor every time a given address is called
215
-
216
- The following options are available:
217
-
218
- ```
219
- regs={reg1: format}
220
- will print register values
221
-
222
- Available formats:
223
- x: hex
224
- s: string
225
- cf: use CFCopyDescription() to get more informative description of the object
226
- po: use LLDB po command
227
- User defined function, will be called like `format_function(hilda_client, value)`.
228
-
229
- For example:
230
- regs={'x0': 'x'} -> x0 will be printed in HEX format
231
- expr={lldb_expression: format}
232
- lldb_expression can be for example '$x0' or '$arg1'
233
- format behaves just like 'regs' option
234
- retval=format
235
- Print function's return value. The format is the same as regs format.
236
- stop=True
237
- force a stop at every hit
238
- bt=True
239
- print backtrace
240
- cmd=[cmd1, cmd2]
241
- run several LLDB commands, one by another
242
- force_return=value
243
- force a return from function with the specified value
244
- name=some_value
245
- use `some_name` instead of the symbol name automatically extracted from the calling frame
246
- override=True
247
- override previous break point at same location
248
- ```
249
-
250
- - `show_current_source`
251
- - print current source code if possible
252
- - `finish`
253
- - Run current frame till its end.
254
- - `step_into`
255
- - Step into current instruction.
256
- - `step_over`
257
- - Step over current instruction.
258
- - `breakpoints.clear`
259
- - Remove all breakpoints
260
- - `breakpoints.remove`
261
- - Remove a single breakpoint
262
- - `force_return`
263
- - Prematurely return from a stack frame, short-circuiting exection of newer frames and optionally
264
- yielding a specified value.
265
- - `proc_info`
266
- - Print information about currently running mapped process.
267
- - `print_proc_entitlements`
268
- - Get the plist embedded inside the process' __LINKEDIT section.
269
- - `bp` or `breakpoints.add`
270
- - Add a breakpoint
271
- - `breakpoints.show`
272
- - Show existing breakpoints
273
- - `po`
274
- - Print given object using LLDB's po command
275
- Can also run big chunks of native code:
276
-
277
- po('NSMutableString *s = [NSMutableString string]; [s appendString:@"abc"]; [s description]')
278
- - `globalize_symbols`
279
- - Make all symbols in python's global scope
280
- - `jump`
281
- - jump to given symbol
282
- - `lldb_handle_command`
283
- - Execute an LLDB command
284
- For example:
285
- lldb_handle_command('register read')
286
- - `objc_get_class`
287
- - Get ObjC class object
288
- - `CFSTR`
289
- - Create CFStringRef object from given string
290
- - `ns`
291
- - Create NSObject from given data
292
- - `from_ns`
293
- - Create python object from NS object.
294
- - `evaluate_expression`
295
- - Wrapper for LLDB's EvaluateExpression.
296
- Used for quick code snippets.
297
-
298
- Feel free to use local variables inside the expression using format string.
299
- For example:
300
- currentDevice = objc_get_class('UIDevice').currentDevice
301
- evaluate_expression(f'[[{currentDevice} systemName] hasPrefix:@"2"]')
302
- - `import_module`
303
- - Import & reload given python module (intended mainly for external snippets)
304
- - `unwind`
305
- - Unwind the stack (useful when get_evaluation_unwind() == False)
306
- - `set_selected_thread`
307
- - sets the currently selected thread, which is used in other parts of the program, such as displaying disassembly or
308
- checking registers.
309
- This ensures the application focuses on the specified thread for these operations.
310
- - `wait_for_module`
311
- - Wait for a module to be loaded (`dlopen`) by checking if given expression is contained within its filename
312
-
313
- All these methods are available from the global `p` within the newly created IPython shell. In addition, you may invoke any of the exported APIs described in the [Python API](#python-api)
156
+ Upon starting Hilda, you are welcomed into an IPython shell.
157
+ You can access following methods via the variable `p`.
158
+
159
+ Basic flow control:
160
+
161
+ - `stop` - Stop process
162
+ - `cont` - Continue process
163
+ - `finish` - Run current function until return
164
+ - `step_into` - Step into current instruction
165
+ - `step_over` - Step over current instruction.
166
+ - `run_for` - Run the process for given interval
167
+ - `force_return` - Prematurely return from a stack frame, short-circuiting execution of inner
168
+ frames and optionally yielding a specified value.
169
+ - `jump` - Jump to given symbol
170
+ - `wait_for_module` - Wait for a module to be loaded (`dlopen`) by checking if given expression is contained within its filename
171
+ - `detach` - Detach from process (useful for exiting gracefully so the
172
+ process doesn't get killed when you exit)
173
+
174
+ Breakpoints:
175
+ - `bp` or `breakpoints.add` - Add a breakpoint
176
+ - `breakpoints.show` - Show existing breakpoints
177
+ - `breakpoints.remove` - Remove a single breakpoint
178
+ - `breakpoints.clear` - Remove all breakpoints
179
+ - `monitor` or `breakpoints.add_monitor` - Creates a breakpoint whose callback implements the requested features (print register values, execute commands, mock return value, etc.)
180
+
181
+ Basic read/write:
182
+
183
+ - `get_register` - Get register value
184
+ - `set_register` - Set register value
185
+ - `poke` - Write data at address
186
+ - `peek[_str,_std_str]` - Read buffer/C-string/`std::string` at address
187
+ - `po` - Print object using LLDB's `po` command
188
+ Can also run arbitrary native code:
189
+
190
+ ```python
191
+ p.po('NSMutableString *s = [NSMutableString string]; [s appendString:@"abc"]; [s description]')
192
+ ```
193
+ - `disass` - Print disassembly at address
194
+ - `show_current_source` - Print current source code (if possible)
195
+ - `bt` - Get backtrace
196
+ - `lsof` - Get all open FDs
197
+ - `hd` - Hexdump a buffer
198
+ - `proc_info` - Print information about currently running mapped process
199
+ - `print_proc_entitlements` - Get the plist embedded inside the process' __LINKEDIT section.
200
+
201
+ Execute code:
202
+
203
+ - `call` - Call function at given address with given parameters
204
+ - `objc_call` - Simulate a call to an objc selector
205
+ - `inject` - Inject a single library into currently running process
206
+ - `disable_jetsam_memory_checks` -
207
+ Disable jetsam memory checks (to prevent raising
208
+ `error: Execution was interrupted, reason: EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=15 MB, unused=0x0).`
209
+ when evaluating expressions).
210
+
211
+ Hilda symbols:
212
+
213
+ - `symbol` - Get symbol object for a given address
214
+ - `objc_symbol` - Get objc symbol wrapper for given address
215
+ - `file_symbol` - Calculate symbol address without ASLR
216
+ - `save` - Save loaded symbols map (for loading later using the load() command)
217
+ - `load` - Load an existing symbols map (previously saved by the save() command)
218
+ - `globalize_symbols` - Make all symbols in python's global scope
219
+
220
+ Advanced:
221
+
222
+ - `lldb_handle_command` - Execute an LLDB command (e.g., `p.lldb_handle_command('register read')`)
223
+ - `evaluate_expression` - Use for quick code snippets (wrapper for LLDB's `EvaluateExpression`)
224
+
225
+ Take advantage of local variables inside the expression using format string, e.g.,
226
+
227
+ ```python
228
+ currentDevice = p.objc_get_class('UIDevice').currentDevice
229
+ p.evaluate_expression(f'[[{currentDevice} systemName] hasPrefix:@"2"]')
230
+ ```
231
+ - `import_module` - Import & reload given python module (intended mainly for external snippets)
232
+ - `unwind` - Unwind the stack (useful when get_evaluation_unwind() == False)
233
+ - `set_selected_thread` - sets the currently selected thread, which is used in other parts of the program, such as displaying disassembly or
234
+ checking registers.
235
+ This ensures the application focuses on the specified thread for these operations.
236
+
237
+ Objective-C related:
238
+
239
+ - `objc_get_class` - Get ObjC class object
240
+ - `CFSTR` - Create CFStringRef object from given string
241
+ - `ns` - Create NSObject from given data
242
+ - `from_ns` - Create python object from NS object.
314
243
 
315
244
  #### Magic functions
316
245
 
@@ -363,7 +292,7 @@ ui.show()
363
292
  ```
364
293
 
365
294
  By default `step_into` and `step_over` will show this UI automatically.
366
- You may disable this behaviour by executing:
295
+ You may disable this behavior by executing:
367
296
 
368
297
  ```python
369
298
  ui.active = False
@@ -487,7 +416,7 @@ s[0] = 1
487
416
  s[0] = p.symbol(0x11223344)() # calling symbols also returns symbols
488
417
 
489
418
  # attempt to resolve symbol's name
490
- print(p.symbol(0x11223344).lldb_symbol)
419
+ print(p.symbol(0x11223344).lldb_address)
491
420
 
492
421
  # monitor each time a symbol is called into console and print its backtrace (`bt` option)
493
422
  # this will create a scripted breakpoint which prints your desired data and continue
@@ -537,8 +466,8 @@ p.bp(('symbol_name', 'ModuleName'))
537
466
  #### Globalized symbols
538
467
 
539
468
  Usually you would want/need to use the symbols already mapped into the currently running process. To do so, you can
540
- access them using `symbols.<symbol-name>`. The `symbols` global object is of type `SymbolsJar`, which is a wrapper
541
- to `dict` for accessing all exported symbols. For example, the following will generate a call to the exported
469
+ access them using `symbols.<symbol-name>`. The `symbols` global object is of type `SymbolList`, which acts like
470
+ `dict` for accessing all exported symbols. For example, the following will generate a call to the exported
542
471
  `malloc` function with `20` as its only argument:
543
472
 
544
473
  ```python
@@ -561,22 +490,17 @@ x = malloc(20)
561
490
  Sometimes you don't really know where to start your research. All you have is just theories of how your desired exported
562
491
  symbol should be called (if any).
563
492
 
564
- For that reason alone, we have the `rebind_symbols()`
565
- command - to help you find the symbol you are looking for.
566
-
567
493
  ```python
568
- p.rebind_symbols() # this might take some time
569
-
570
494
  # find all symbols prefixed as `mem*` AND don't have `cpy`
571
495
  # in their name
572
- jar = p.symbols.startswith('mem') - p.symbols.find('cpy')
496
+ l = p.symbols.filter_startswith('mem') - p.symbols.filter_name_contains('cpy')
573
497
 
574
498
  # filter only symbols of type "code" (removing data global for example)
575
- jar = jar.code()
499
+ l = l.filter_code_symbols()
576
500
 
577
501
  # monitor every time each one is called, print its `x0` in HEX
578
502
  # form and show the backtrace
579
- jar.monitor(regs={'x0': 'x'}, bt=True)
503
+ l.monitor(regs={'x0': 'x'}, bt=True)
580
504
  ```
581
505
 
582
506
  #### Objective-C Classes
@@ -608,21 +532,21 @@ print(NSDictionary.ivars)
608
532
  # show the class' methods
609
533
  print(NSDictionary.methods)
610
534
 
611
- # show the class' proprties
535
+ # show the class' properties
612
536
  print(NSDictionary.properties)
613
537
 
614
538
  # view class' selectors which are prefixed with 'init'
615
- print(NSDictionary.symbols_jar.startswith('-[NSDictionary init'))
539
+ print(NSDictionary.methods.filter_startswith('init'))
616
540
 
617
- # you can of course use any of `SymbolsJar` over them, for example:
541
+ # you can of course use any of `SymbolList` over them, for example:
618
542
  # this will `po` (print object) all those selectors returned value
619
- NSDictionary.symbols_jar.startswith('-[NSDictionary init').monitior(retval='po')
543
+ NSDictionary.methods.filter_startswith('init').monitor(retval='po')
620
544
 
621
545
  # monitor each time any selector in NSDictionary is called
622
546
  NSDictionary.monitor()
623
547
 
624
548
  # `force_return` for some specific selector with a hard-coded value (4)
625
- NSDictionary.get_method('valueForKey:').address.monitor(force_return=4)
549
+ NSDictionary.methods.get('valueForKey:').address.monitor(force_return=4)
626
550
 
627
551
  # capture the `self` object at the first hit of any selector
628
552
  # `True` for busy-wait for object to be captured
@@ -672,7 +596,7 @@ commands so you are able to use complicated types when parsing values and passin
672
596
  import datetime
673
597
 
674
598
  # using the `ns` command we can just pass a python-native dictionary
675
- function_requiring_a_specfic_dictionary(ns({
599
+ function_requiring_a_specfic_dictionary(p.cf({
676
600
  'key1': 'string', # will convert to NSString
677
601
  'key2': True, # will convert to NSNumber
678
602
  'key3': b'1234', # will convert to NSData
@@ -707,7 +631,7 @@ They all use the following concept to use:
707
631
  ```python
708
632
  from hilda.snippets import snippet_name
709
633
 
710
- snippet_name.do_domething()
634
+ snippet_name.do_something()
711
635
  ```
712
636
 
713
637
  For example, XPC sniffing can be done using:
@@ -3,23 +3,23 @@ gifs/ui.png,sha256=iaRwNZ9qVWUkUe2TJb_6VPsTu--7HrElA2duWiyZ-Oc,131
3
3
  gifs/xpc_print_message.gif,sha256=i5S8Y9bJm9n-NtOipFTAC8_jUR4uZCM4sOap_ccJX0k,939935
4
4
  hilda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  hilda/__main__.py,sha256=KWRqvukK4wraxCMtvH5nO25mFXLO5aWXa7z_VfAtbO8,90
6
- hilda/_version.py,sha256=LoHm4tYT8EC9S2qaIOxZkFh7b3UUZ5jNAQr7bVyLo6Q,511
7
- hilda/breakpoints.py,sha256=ZVszQf4WtRgjM2JAn8E-b-Ve6kzVg5VwvTHv5_wGjwQ,19198
6
+ hilda/_version.py,sha256=UPa3_-Tw81awaTO5j8rRzIJSyV7jsphYUC5vS3Aaufk,704
7
+ hilda/breakpoints.py,sha256=EVeY589ZIz1DwW3kGn-MpvjVrma1ANAjWz4DdRW8T4c,20025
8
8
  hilda/cli.py,sha256=PCjrI7GrERIrZCODJYmPt6eyl-nPYZviTS8fBG3oIjM,3618
9
9
  hilda/common.py,sha256=El-ih7cvCv9PJ5OWb1jkCbh4GuaRD6gqlrFC5gyY-TE,498
10
- hilda/exceptions.py,sha256=8L1OvOqns4O4ieiH4YlrMbZkk_PvuyCq4UyqFAodkF8,2042
11
- hilda/hilda_ascii_art.html,sha256=-9YCjAKdGbjtdd6uoKrxkkcJq7j16r4dGka2bZ27b4o,120119
12
- hilda/hilda_client.py,sha256=phSwiI3XfuLzMXlUw7-irbZbEgi7sEpDz2w7EGUUhf0,38897
10
+ hilda/decorators.py,sha256=uD8amDLgOpNLF90KhRVd1OkssYqh1UR7e0zemyIKcqc,963
11
+ hilda/exceptions.py,sha256=GMJVc_zbzqVyieL45GJNJ-SutoTJefvNX2UInM8OgqE,1882
12
+ hilda/hilda_client.py,sha256=TZCUGCATh8x8yDROke2Yr3Xx7OqfzsyWrDH6EkmLyfk,37169
13
13
  hilda/launch_lldb.py,sha256=-lmxif-w53oeTCea6ZHLiYHChkMpdDDO_zgTFWpAU6E,8597
14
14
  hilda/lldb_entrypoint.py,sha256=vTiClzfiTtjorlxEfIsI-W657KEGobx74qDhaZ8nPhM,1007
15
15
  hilda/lldb_importer.py,sha256=TCGpAWwiBuyNRsbgcYawiqm35t8XQLCJwoOfEqyBeik,526
16
- hilda/objective_c_class.py,sha256=AFGXFDkYUoHf_LVS6GJSyvMsIIYIviLx0PCa-f4pCT8,11561
17
- hilda/objective_c_symbol.py,sha256=lIZHef5iZe3AeUsK0uIsDtFnzSM-Ad6i2wfdj9DwLUM,8269
16
+ hilda/objective_c_class.py,sha256=RCxvLSE8lzj94EYjGCd1gZsy8d23w7rT1RH-Kw4ftGc,13363
17
+ hilda/objective_c_symbol.py,sha256=vPzRP8pucjsgJIj39CaM5ybf10nOqHV2E9hFMDTb6pc,8030
18
18
  hilda/registers.py,sha256=-9kk1MuKnWlJ0Z8zZ2RPV9nGRDtX1GXhCSkEvfnCktA,848
19
- hilda/symbol.py,sha256=UIDmnNq1tx1uORqgRNaO_gfW2y17mhyy4cz83UVFhcc,7623
20
- hilda/symbols_jar.py,sha256=Vqdv6iH92P6aSfcz5XiR0FbNRqKuUu48mi-GxvPr32w,6504
21
- hilda/watchpoints.py,sha256=j5wLEORXUkxeamjI2F61QXRrSXcGsbs4XTmN1UEa_A4,7895
22
- hilda/ipython_extensions/events.py,sha256=w_4V8FoJJMarWArEE8uzb2UXk1mqfslmI7XCyVb_XuE,1976
19
+ hilda/symbol.py,sha256=QZilOrnc7TdexrZKZamY-9PKxt_G2dKEEFtQTBrUjMs,8859
20
+ hilda/symbols.py,sha256=c5CrL8PYT1HNcTvVX-JhsGTpwlOeRn-cpNAytn6W3G4,23381
21
+ hilda/watchpoints.py,sha256=aYa0zpz8N718sOsTS4FFoSRcsHdjkzIqo5flej96R24,9009
22
+ hilda/ipython_extensions/events.py,sha256=zJvPsdFT3th4BwG9xm0u7GRnDOXpVbF6n9IC2ixv86k,1682
23
23
  hilda/ipython_extensions/keybindings.py,sha256=W_Cnh8lG5yVdK5x0A-4UeyBsoJBufbYl54Mqrbo8OwM,1922
24
24
  hilda/ipython_extensions/magics.py,sha256=ULb63-OyIaWwvSfwRvEG_65ibaI2RTxeX8yPJK8pbc0,1300
25
25
  hilda/objective_c/from_ns_to_json.m,sha256=5Ddl0UJLQXlDYwR_yjE4yZk1aOsJGxoy1oRnhZHPrTw,2847
@@ -33,7 +33,7 @@ hilda/snippets/boringssl.py,sha256=0mby7PRhmrfbEKc5nCTWALG5O7VoPk4473UiZOdnpdA,7
33
33
  hilda/snippets/collections.py,sha256=8UlJKKLV9ba1IUe9G6qAGZzweeHVVgj_HDf0QUYOTWs,417
34
34
  hilda/snippets/dyld.py,sha256=cTasVlew2doJGI10XwOFBSEXf-RpVRok-ngFTfMy6QA,2186
35
35
  hilda/snippets/fs_utils.py,sha256=lxznKJiV_60RZmGORqHm18-ACCf4VOpNC5rveh0kemc,422
36
- hilda/snippets/libmalloc.py,sha256=2HL7GESDRjV9R3Hz1Yafu5bJ87_kYNi64MPpHr8wW_g,11674
36
+ hilda/snippets/libmalloc.py,sha256=RBUuiyJvxxlIxhbriaHzfzJX9azeitlD1tUsUjIe_xQ,11661
37
37
  hilda/snippets/remotepairingd.py,sha256=w7SYctpKw3B56ZP26n4Ap5_hz6VmZiUbe8CrTmZ1JWI,5849
38
38
  hilda/snippets/syslog.py,sha256=8qhYHKTElzWifqYAwt72iQ57wf1n0F_au2Vl2L8NPOc,294
39
39
  hilda/snippets/uuid.py,sha256=ttw-rq2Wshm7UMZXd5uYP37bi8G_ZE4XcXJbsYIgp1c,273
@@ -49,9 +49,9 @@ hilda/snippets/macho/macho_load_commands.py,sha256=vUWfFM2H6o8dMglXV7rHgh-EMTzS0
49
49
  hilda/ui/colors.json,sha256=f-ITquY3IInQreviTy23JfmxfJrGM1_MivACf1GKGqM,262
50
50
  hilda/ui/ui_manager.py,sha256=BmzI1sBx0PYCQDlB9Al7wsTEAMJxaJ7NW0DS4C7g5-0,2265
51
51
  hilda/ui/views.py,sha256=bzClOgKirKYs6nhsNRXpkGNIg3oIOmFb659GLWrlTdo,7792
52
- hilda-3.0.1.dist-info/LICENSE,sha256=M-LVJ0AFAYB82eueyl8brh-QLPe-iLNVgbCi79-3TDo,1078
53
- hilda-3.0.1.dist-info/METADATA,sha256=S0GZw7zb-oTZXZGaW_zD_eBq0ba3EaA6Zs3OSZAI3qI,23354
54
- hilda-3.0.1.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
55
- hilda-3.0.1.dist-info/entry_points.txt,sha256=9n3O3j6V3XnVR_GcFqCWNgRAbalfukTSW2WvghsLVmA,46
56
- hilda-3.0.1.dist-info/top_level.txt,sha256=TVD7l1WkE1noT866YqPFhiQnjYCYZM5Xz54v_3EYpnI,11
57
- hilda-3.0.1.dist-info/RECORD,,
52
+ hilda-3.2.1.dist-info/licenses/LICENSE,sha256=M-LVJ0AFAYB82eueyl8brh-QLPe-iLNVgbCi79-3TDo,1078
53
+ hilda-3.2.1.dist-info/METADATA,sha256=vCGGjxN-Vkj96qebcOyAdaqfVCkHxndUH6LcBweVC2w,21695
54
+ hilda-3.2.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
55
+ hilda-3.2.1.dist-info/entry_points.txt,sha256=9n3O3j6V3XnVR_GcFqCWNgRAbalfukTSW2WvghsLVmA,46
56
+ hilda-3.2.1.dist-info/top_level.txt,sha256=TVD7l1WkE1noT866YqPFhiQnjYCYZM5Xz54v_3EYpnI,11
57
+ hilda-3.2.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5