hilda 2.0.8__tar.gz → 2.0.10__tar.gz

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.
Files changed (77) hide show
  1. {hilda-2.0.8 → hilda-2.0.10}/PKG-INFO +1 -1
  2. {hilda-2.0.8 → hilda-2.0.10}/hilda/_version.py +2 -2
  3. {hilda-2.0.8 → hilda-2.0.10}/hilda/cli.py +1 -1
  4. {hilda-2.0.8 → hilda-2.0.10}/hilda/hilda_client.py +8 -1
  5. {hilda-2.0.8 → hilda-2.0.10}/hilda/ipython_extensions/keybindings.py +1 -0
  6. {hilda-2.0.8 → hilda-2.0.10}/hilda/launch_lldb.py +22 -0
  7. {hilda-2.0.8 → hilda-2.0.10}/hilda/symbols_jar.py +4 -4
  8. {hilda-2.0.8 → hilda-2.0.10}/hilda.egg-info/PKG-INFO +1 -1
  9. {hilda-2.0.8 → hilda-2.0.10}/.github/workflows/python-app.yml +0 -0
  10. {hilda-2.0.8 → hilda-2.0.10}/.github/workflows/python-publish.yml +0 -0
  11. {hilda-2.0.8 → hilda-2.0.10}/.gitignore +0 -0
  12. {hilda-2.0.8 → hilda-2.0.10}/.pre-commit-config.yaml +0 -0
  13. {hilda-2.0.8 → hilda-2.0.10}/LICENSE +0 -0
  14. {hilda-2.0.8 → hilda-2.0.10}/README.md +0 -0
  15. {hilda-2.0.8 → hilda-2.0.10}/gifs/.gitattributes +0 -0
  16. {hilda-2.0.8 → hilda-2.0.10}/gifs/ui.png +0 -0
  17. {hilda-2.0.8 → hilda-2.0.10}/gifs/xpc_print_message.gif +0 -0
  18. {hilda-2.0.8 → hilda-2.0.10}/hilda/__init__.py +0 -0
  19. {hilda-2.0.8 → hilda-2.0.10}/hilda/__main__.py +0 -0
  20. {hilda-2.0.8 → hilda-2.0.10}/hilda/common.py +0 -0
  21. {hilda-2.0.8 → hilda-2.0.10}/hilda/exceptions.py +0 -0
  22. {hilda-2.0.8 → hilda-2.0.10}/hilda/hilda_ascii_art.html +0 -0
  23. {hilda-2.0.8 → hilda-2.0.10}/hilda/ipython_extensions/events.py +0 -0
  24. {hilda-2.0.8 → hilda-2.0.10}/hilda/ipython_extensions/magics.py +0 -0
  25. {hilda-2.0.8 → hilda-2.0.10}/hilda/lldb_entrypoint.py +0 -0
  26. {hilda-2.0.8 → hilda-2.0.10}/hilda/lldb_importer.py +0 -0
  27. {hilda-2.0.8 → hilda-2.0.10}/hilda/objective_c/from_ns_to_json.m +0 -0
  28. {hilda-2.0.8 → hilda-2.0.10}/hilda/objective_c/get_objectivec_class_by_module.m +0 -0
  29. {hilda-2.0.8 → hilda-2.0.10}/hilda/objective_c/get_objectivec_class_description.m +0 -0
  30. {hilda-2.0.8 → hilda-2.0.10}/hilda/objective_c/get_objectivec_symbol_data.m +0 -0
  31. {hilda-2.0.8 → hilda-2.0.10}/hilda/objective_c/lsof.m +0 -0
  32. {hilda-2.0.8 → hilda-2.0.10}/hilda/objective_c/to_ns_from_json.m +0 -0
  33. {hilda-2.0.8 → hilda-2.0.10}/hilda/objective_c_class.py +0 -0
  34. {hilda-2.0.8 → hilda-2.0.10}/hilda/objective_c_symbol.py +0 -0
  35. {hilda-2.0.8 → hilda-2.0.10}/hilda/registers.py +0 -0
  36. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/__init__.py +0 -0
  37. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/boringssl.py +0 -0
  38. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/collections.py +0 -0
  39. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/dyld.py +0 -0
  40. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/fs_utils.py +0 -0
  41. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/mach/CFRunLoopServiceMachPort_hooks.py +0 -0
  42. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/mach/__init__.py +0 -0
  43. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/macho/__init__.py +0 -0
  44. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/macho/all_image_infos.py +0 -0
  45. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/macho/apple_version.py +0 -0
  46. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/macho/image_info.py +0 -0
  47. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/macho/macho.py +0 -0
  48. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/macho/macho_load_commands.py +0 -0
  49. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/remotepairingd.py +0 -0
  50. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/syslog.py +0 -0
  51. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/uuid.py +0 -0
  52. {hilda-2.0.8 → hilda-2.0.10}/hilda/snippets/xpc.py +0 -0
  53. {hilda-2.0.8 → hilda-2.0.10}/hilda/symbol.py +0 -0
  54. {hilda-2.0.8 → hilda-2.0.10}/hilda/ui/colors.json +0 -0
  55. {hilda-2.0.8 → hilda-2.0.10}/hilda/ui/ui_manager.py +0 -0
  56. {hilda-2.0.8 → hilda-2.0.10}/hilda/ui/views.py +0 -0
  57. {hilda-2.0.8 → hilda-2.0.10}/hilda.egg-info/SOURCES.txt +0 -0
  58. {hilda-2.0.8 → hilda-2.0.10}/hilda.egg-info/dependency_links.txt +0 -0
  59. {hilda-2.0.8 → hilda-2.0.10}/hilda.egg-info/entry_points.txt +0 -0
  60. {hilda-2.0.8 → hilda-2.0.10}/hilda.egg-info/requires.txt +0 -0
  61. {hilda-2.0.8 → hilda-2.0.10}/hilda.egg-info/top_level.txt +0 -0
  62. {hilda-2.0.8 → hilda-2.0.10}/pyproject.toml +0 -0
  63. {hilda-2.0.8 → hilda-2.0.10}/requirements.txt +0 -0
  64. {hilda-2.0.8 → hilda-2.0.10}/setup.cfg +0 -0
  65. {hilda-2.0.8 → hilda-2.0.10}/tests/__init__.py +0 -0
  66. {hilda-2.0.8 → hilda-2.0.10}/tests/conftest.py +0 -0
  67. {hilda-2.0.8 → hilda-2.0.10}/tests/test_hilda_client/test_from_ns.py +0 -0
  68. {hilda-2.0.8 → hilda-2.0.10}/tests/test_hilda_client/test_hilda_client.py +0 -0
  69. {hilda-2.0.8 → hilda-2.0.10}/tests/test_hilda_client/test_monitor.py +0 -0
  70. {hilda-2.0.8 → hilda-2.0.10}/tests/test_hilda_client/test_ns.py +0 -0
  71. {hilda-2.0.8 → hilda-2.0.10}/tests/test_hilda_client/test_rebind_symbols.py +0 -0
  72. {hilda-2.0.8 → hilda-2.0.10}/tests/test_hilda_client/test_registers.py +0 -0
  73. {hilda-2.0.8 → hilda-2.0.10}/tests/test_snippets/test_xpc.py +0 -0
  74. {hilda-2.0.8 → hilda-2.0.10}/tests/test_symbols/test_objective_c_class.py +0 -0
  75. {hilda-2.0.8 → hilda-2.0.10}/tests/test_symbols/test_objective_c_symbol.py +0 -0
  76. {hilda-2.0.8 → hilda-2.0.10}/tests/test_symbols/test_symbol.py +0 -0
  77. {hilda-2.0.8 → hilda-2.0.10}/tests/test_symbols/test_symbols_jar.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hilda
3
- Version: 2.0.8
3
+ Version: 2.0.10
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>
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '2.0.8'
16
- __version_tuple__ = version_tuple = (2, 0, 8)
15
+ __version__ = version = '2.0.10'
16
+ __version_tuple__ = version_tuple = (2, 0, 10)
@@ -53,7 +53,7 @@ def attach(name: Optional[str], pid: Optional[int], startup_files: List[str]) ->
53
53
  if name is not None:
54
54
  hilda_client = create_hilda_client_using_attach_by_name(name)
55
55
  elif pid is not None:
56
- hilda_client = create_hilda_client_using_attach_by_pid(name)
56
+ hilda_client = create_hilda_client_using_attach_by_pid(pid)
57
57
  else:
58
58
  raise click.UsageError('You must specify a process name or pid')
59
59
  hilda_client.interact(startup_files=startup_files)
@@ -58,7 +58,8 @@ GREETING = f"""
58
58
  <b>Hilda has been successfully loaded! 😎
59
59
  Usage:
60
60
  <span style="color: magenta">p</span> Global to access all features.
61
- <span style="color: magenta">F1</span> UI Show.
61
+ <span style="color: magenta">F1</span> Show UI.
62
+ <span style="color: magenta">F2</span> Toggle enabling of stdout & stderr.
62
63
  <span style="color: magenta">F7</span> Step Into.
63
64
  <span style="color: magenta">F8</span> Step Over.
64
65
  <span style="color: magenta">F9</span> Continue.
@@ -92,6 +93,8 @@ class Configs:
92
93
  'doc': 'Whether to exclude NSObject during evaluation - reduce ipython autocomplete results.'})
93
94
  objc_verbose_monitor: bool = field(default=False, metadata={
94
95
  'doc': 'When set to True, using monitor() will automatically print objc methods arguments.'})
96
+ enable_stdout_stderr: bool = field(default=True, metadata={
97
+ 'doc': 'When set to True, will enable process stdout and stderr.'})
95
98
 
96
99
  def __repr__(self):
97
100
  return self.__str__()
@@ -1089,6 +1092,10 @@ class HildaClient:
1089
1092
  sys.argv = ['a']
1090
1093
  IPython.start_ipython(config=ipython_config, user_ns=namespace)
1091
1094
 
1095
+ def toggle_enable_stdout_stderr(self, *args) -> None:
1096
+ self.configs.enable_stdout_stderr = not self.configs.enable_stdout_stderr
1097
+ self.logger.info(f'Changed stdout and stderr status to: {self.configs.enable_stdout_stderr}')
1098
+
1092
1099
  def __enter__(self) -> 'HildaClient':
1093
1100
  return self
1094
1101
 
@@ -7,6 +7,7 @@ def load_ipython_extension(ipython):
7
7
  def register_keybindings():
8
8
  hilda = ipython.user_ns['p']
9
9
  keys_mapping = {Keys.F1: hilda.ui_manager.show,
10
+ Keys.F2: hilda.toggle_enable_stdout_stderr,
10
11
  Keys.F7: hilda.step_into,
11
12
  Keys.F8: hilda.step_over,
12
13
  Keys.F9: lambda _: (hilda.log_info('Sending continue'), hilda.cont()),
@@ -1,5 +1,6 @@
1
1
  import logging
2
2
  import os
3
+ import sys
3
4
  from abc import ABC, abstractmethod
4
5
  from threading import Thread
5
6
  from typing import List, Optional
@@ -46,6 +47,20 @@ class LLDBListenerThread(Thread, ABC):
46
47
  return
47
48
  raise LLDBError(self.error.description)
48
49
 
50
+ def _process_stdout(self) -> None:
51
+ stdout = self.process.GetSTDOUT(1024)
52
+ while stdout:
53
+ if lldb.hilda_client is not None and lldb.hilda_client.configs.enable_stdout_stderr:
54
+ sys.stdout.write(stdout)
55
+ stdout = self.process.GetSTDOUT(1024)
56
+
57
+ def _process_stderr(self) -> None:
58
+ stderr = self.process.GetSTDERR(1024)
59
+ while stderr:
60
+ if lldb.hilda_client is not None and lldb.hilda_client.configs.enable_stdout_stderr:
61
+ sys.stderr.write(stderr)
62
+ stderr = self.process.GetSTDERR(1024)
63
+
49
64
  def run(self):
50
65
  event = lldb.SBEvent()
51
66
  last_state = lldb.eStateStopped
@@ -54,6 +69,13 @@ class LLDBListenerThread(Thread, ABC):
54
69
  continue
55
70
  if not lldb.SBProcess.EventIsProcessEvent(event):
56
71
  continue
72
+
73
+ event_type = event.GetType()
74
+ if event_type & lldb.SBProcess.eBroadcastBitSTDOUT:
75
+ self._process_stdout()
76
+ if event_type & lldb.SBProcess.eBroadcastBitSTDERR:
77
+ self._process_stderr()
78
+
57
79
  state = self.process.GetStateFromEvent(event)
58
80
  if state == lldb.eStateDetached:
59
81
  logger.debug('Process Detached')
@@ -139,15 +139,15 @@ class SymbolsJar(dict):
139
139
  :param args: given arguments for monitor command
140
140
  """
141
141
  for name, address in self.items():
142
- args_c = args.copy()
142
+ options = args.copy()
143
143
  if name == '_client':
144
144
  continue
145
145
  if self.__dict__['_client'].configs.objc_verbose_monitor:
146
146
  arg_count = name.count(':')
147
147
  if arg_count > 0:
148
- args_c['regs'] = {f'x{i + 2}': 'po' for i in range(arg_count)}
149
- name = args_c.get('name', name)
150
- address.monitor(name=name, **args_c)
148
+ options['expr'] = {f'$arg{i + 3}': 'po' for i in range(arg_count)}
149
+ name = options.get('name', name)
150
+ address.monitor(name=name, **options)
151
151
 
152
152
  def startswith(self, exp, case_sensitive=True):
153
153
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hilda
3
- Version: 2.0.8
3
+ Version: 2.0.10
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>
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes