mirror of
https://github.com/frida/frida-python
synced 2026-06-08 14:16:17 +00:00
Add frida-ls-devices CLI tool for listing devices
This commit is contained in:
@@ -17,28 +17,29 @@ mkdir $(OutDir)frida || exit 1
|
||||
copy /B /Y "$(ProjectDir)src\frida\*.py" $(OutDir)frida || exit 1
|
||||
echo. > $(IntDir)frida-package.stamp</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)frida-package.stamp</Outputs>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)src\frida\core.py;$(ProjectDir)src\frida\application.py;$(ProjectDir)src\frida\ps.py;$(ProjectDir)src\frida\discoverer.py;$(ProjectDir)src\frida\tracer.py;$(ProjectDir)src\frida\repl.py</AdditionalInputs>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)src\frida\core.py;$(ProjectDir)src\frida\application.py;$(ProjectDir)src\frida\lsd.py;$(ProjectDir)src\frida\ps.py;$(ProjectDir)src\frida\discoverer.py;$(ProjectDir)src\frida\tracer.py;$(ProjectDir)src\frida\repl.py</AdditionalInputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">rmdir /S /Q $(OutDir)frida 2>NUL
|
||||
mkdir $(OutDir)frida || exit 1
|
||||
copy /B /Y "$(ProjectDir)src\frida\*.py" $(OutDir)frida || exit 1
|
||||
echo. > $(IntDir)frida-package.stamp</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)frida-package.stamp</Outputs>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)src\frida\core.py;$(ProjectDir)src\frida\application.py;$(ProjectDir)src\frida\ps.py;$(ProjectDir)src\frida\discoverer.py;$(ProjectDir)src\frida\tracer.py;$(ProjectDir)src\frida\repl.py</AdditionalInputs>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)src\frida\core.py;$(ProjectDir)src\frida\application.py;$(ProjectDir)src\frida\lsd.py;$(ProjectDir)src\frida\ps.py;$(ProjectDir)src\frida\discoverer.py;$(ProjectDir)src\frida\tracer.py;$(ProjectDir)src\frida\repl.py</AdditionalInputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">rmdir /S /Q $(OutDir)frida 2>NUL
|
||||
mkdir $(OutDir)frida || exit 1
|
||||
copy /B /Y "$(ProjectDir)src\frida\*.py" $(OutDir)frida || exit 1
|
||||
echo. > $(IntDir)frida-package.stamp</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)frida-package.stamp</Outputs>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)src\frida\core.py;$(ProjectDir)src\frida\application.py;$(ProjectDir)src\frida\ps.py;$(ProjectDir)src\frida\discoverer.py;$(ProjectDir)src\frida\tracer.py;$(ProjectDir)src\frida\repl.py</AdditionalInputs>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)src\frida\core.py;$(ProjectDir)src\frida\application.py;$(ProjectDir)src\frida\lsd.py;$(ProjectDir)src\frida\ps.py;$(ProjectDir)src\frida\discoverer.py;$(ProjectDir)src\frida\tracer.py;$(ProjectDir)src\frida\repl.py</AdditionalInputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">rmdir /S /Q $(OutDir)frida 2>NUL
|
||||
mkdir $(OutDir)frida || exit 1
|
||||
copy /B /Y "$(ProjectDir)src\frida\*.py" $(OutDir)frida || exit 1
|
||||
echo. > $(IntDir)frida-package.stamp</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)frida-package.stamp</Outputs>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)src\frida\core.py;$(ProjectDir)src\frida\application.py;$(ProjectDir)src\frida\ps.py;$(ProjectDir)src\frida\discoverer.py;$(ProjectDir)src\frida\tracer.py;$(ProjectDir)src\frida\repl.py</AdditionalInputs>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)src\frida\core.py;$(ProjectDir)src\frida\application.py;$(ProjectDir)src\frida\lsd.py;$(ProjectDir)src\frida\ps.py;$(ProjectDir)src\frida\discoverer.py;$(ProjectDir)src\frida\tracer.py;$(ProjectDir)src\frida\repl.py</AdditionalInputs>
|
||||
</CustomBuild>
|
||||
<None Include="src\frida\core.py" />
|
||||
<None Include="src\frida\application.py" />
|
||||
<None Include="src\frida\lsd.py" />
|
||||
<None Include="src\frida\ps.py" />
|
||||
<None Include="src\frida\discoverer.py" />
|
||||
<None Include="src\frida\tracer.py" />
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
<None Include="src\frida\application.py">
|
||||
<Filter>Source Files\frida</Filter>
|
||||
</None>
|
||||
<None Include="src\frida\lsd.py">
|
||||
<Filter>Source Files\frida</Filter>
|
||||
</None>
|
||||
<None Include="src\frida\ps.py">
|
||||
<Filter>Source Files\frida</Filter>
|
||||
</None>
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
<None Include="src\frida\application.py">
|
||||
<Filter>Source Files\frida</Filter>
|
||||
</None>
|
||||
<None Include="src\frida\lsd.py">
|
||||
<Filter>Source Files\frida</Filter>
|
||||
</None>
|
||||
<None Include="src\frida\ps.py">
|
||||
<Filter>Source Files\frida</Filter>
|
||||
</None>
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals, print_function
|
||||
|
||||
def main():
|
||||
import frida
|
||||
from frida.application import ConsoleApplication
|
||||
|
||||
class LSDApplication(ConsoleApplication):
|
||||
def _usage(self):
|
||||
return "usage: %prog [options]"
|
||||
|
||||
def _start(self):
|
||||
try:
|
||||
devices = frida.enumerate_devices()
|
||||
except Exception as e:
|
||||
self._update_status("Failed to enumerate devices: %s" % e)
|
||||
self._exit(1)
|
||||
return
|
||||
id_column_width = max(map(lambda device: len(device.id), devices))
|
||||
type_column_width = max(map(lambda device: len(device.type), devices))
|
||||
name_column_width = max(map(lambda device: len(device.name), devices))
|
||||
header_format = "%-" + str(id_column_width) + "s " + \
|
||||
"%-" + str(type_column_width) + "s " + \
|
||||
"%-" + str(name_column_width) + "s"
|
||||
print(header_format % ("Id", "Type", "Name"))
|
||||
print("%s %s %s" % (id_column_width * "-", type_column_width * "-", name_column_width * "-"))
|
||||
line_format = "%-" + str(id_column_width) + "s " + \
|
||||
"%-" + str(type_column_width) + "s " + \
|
||||
"%-" + str(name_column_width) + "s"
|
||||
for device in sorted(devices, key=cmp_to_key(compare_devices)):
|
||||
print(line_format % (device.id, device.type, device.name))
|
||||
self._exit(0)
|
||||
|
||||
def compare_devices(a, b):
|
||||
a_score = score(a)
|
||||
b_score = score(b)
|
||||
if a_score == b_score:
|
||||
if a.name > b.name:
|
||||
return 1
|
||||
elif a.name < b.name:
|
||||
return -1
|
||||
else:
|
||||
return 0
|
||||
else:
|
||||
if a_score > b_score:
|
||||
return -1
|
||||
elif a_score < b_score:
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
def score(device):
|
||||
type = device.type
|
||||
if type == 'local':
|
||||
return 3
|
||||
elif type == 'tether':
|
||||
return 2
|
||||
else:
|
||||
return 1
|
||||
|
||||
def cmp_to_key(mycmp):
|
||||
"Convert a cmp= function into a key= function"
|
||||
class K:
|
||||
def __init__(self, obj, *args):
|
||||
self.obj = obj
|
||||
def __lt__(self, other):
|
||||
return mycmp(self.obj, other.obj) < 0
|
||||
def __gt__(self, other):
|
||||
return mycmp(self.obj, other.obj) > 0
|
||||
def __eq__(self, other):
|
||||
return mycmp(self.obj, other.obj) == 0
|
||||
def __le__(self, other):
|
||||
return mycmp(self.obj, other.obj) <= 0
|
||||
def __ge__(self, other):
|
||||
return mycmp(self.obj, other.obj) >= 0
|
||||
def __ne__(self, other):
|
||||
return mycmp(self.obj, other.obj) != 0
|
||||
return K
|
||||
|
||||
device = LSDApplication()
|
||||
device.run()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -1,12 +1,14 @@
|
||||
bin_SCRIPTS = \
|
||||
frida \
|
||||
frida-discover \
|
||||
frida-ls-devices \
|
||||
frida-ps \
|
||||
frida-trace
|
||||
CLEANFILES = $(bin_SCRIPTS)
|
||||
EXTRA_DIST = \
|
||||
frida.in \
|
||||
frida-discover.in \
|
||||
frida-ls-devices.in \
|
||||
frida-ps.in \
|
||||
frida-trace.in
|
||||
|
||||
@@ -24,6 +26,10 @@ frida-discover: frida-discover.in Makefile
|
||||
$(do_substitution) < $(srcdir)/frida-discover.in > $@
|
||||
chmod +x $@
|
||||
|
||||
frida-ls-devices: frida-ls-devices.in Makefile
|
||||
$(do_substitution) < $(srcdir)/frida-ls-devices.in > $@
|
||||
chmod +x $@
|
||||
|
||||
frida-ps: frida-ps.in Makefile
|
||||
$(do_substitution) < $(srcdir)/frida-ps.in > $@
|
||||
chmod +x $@
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
#!@PYTHON@
|
||||
|
||||
import sys
|
||||
sys.path.insert(1, '@pythondir@')
|
||||
|
||||
import frida.lsd
|
||||
|
||||
if __name__ == '__main__':
|
||||
frida.lsd.main()
|
||||
@@ -111,6 +111,7 @@ setup(
|
||||
'console_scripts': [
|
||||
"frida = frida.repl:main",
|
||||
"frida-discover = frida.discoverer:main",
|
||||
"frida-ls-devices = frida.lsd:main",
|
||||
"frida-ps = frida.ps:main",
|
||||
"frida-trace = frida.tracer:main"
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user