3 votes

Quels sont les désassembleurs Python utilisés pour?

J'ai remarqué qu'il y a un degré significatif d'intérêt pour les désassembleurs Python comme le module dis.

Cependant, il est étonnamment difficile de trouver à quoi ces désassembleurs sont généralement utilisés dans l'industrie/l'académie. En dehors de satisfaire la curiosité (un effort parfaitement légitime!) ou d'écrire des implémentations Python, ont-ils des utilisations communes ?

4voto

Armin Rigo Points 4754

Le désassembleur de bytecode Python n'a pas d'utilisation commune en dehors de la curiosité ou de l'investigation des détails des implémentations Python. C'est similaire à la façon dont la plupart des programmeurs C n'ont jamais besoin de regarder l'assembleur, même s'ils compilent du code C en assembleur et utilisent des débogueurs comme gdb. Dans le cas de Python, pdb (mais aussi les traçages, etc.) cachent tous joliment le bytecode aux yeux du programmeur régulier.

Bien sûr, il peut être amusant de l'apprendre de toute façon. C'est une façon d'avoir une bonne idée de comment Python fonctionne vraiment :-)

2voto

flornquake Points 1593

Il y a une utilisation pratique pour les désassembleurs, bien que ce soit un cas très rare que je mentionne simplement pour des raisons de complétude : lorsque vous optimisez du code et que vous voulez vérifier si écrire votre code différemment peut le rendre plus rapide. Cela n'est pertinent que pour du code où la vitesse est d'une grande importance. Vous n'avez normalement pas besoin de vous préoccuper de ce type d'optimisations de bas niveau.

Par exemple, le compilateur CPython optimise les expressions contenant uniquement des littéraux, transformant quelque chose comme 'foo' + 'bar' en 'foobar' au moment de la compilation. Cela peut ne pas être le cas pour d'autres implémentations de Python, donc la meilleure façon de vérifier si le compilateur optimise ceci est d'utiliser un désassembleur :

>>> import dis
>>> def f():
...     return 'foo'+'bar', 3*100, 'spam'*2
...
>>> dis.dis(f)
  2           0 LOAD_CONST               9 (('foobar', 300, 'spamspam'))
              3 RETURN_VALUE

0voto

Tony Russell Points 1

Si vous voulez rechercher une ligne de code dans un programme en langage machine, tel qu'un pop-up ennuyeux ou un morceau de logiciel malveillant, un désassembleur pourrait vous aider à trouver le morceau de code toxique.

De plus, comme le dit Flornquake, les programmes assemblés par des langages de haut niveau comme Python ne sont parfois pas efficaces. Si vous avez besoin d'un programme à haute vitesse, par exemple pour lire rapidement des données provenant d'un appareil externe, vous devrez probablement vous plonger dans le code assemblé et l'ajuster pour une vitesse maximale. Un exemple pourrait être la numérisation d'un signal musical de 20 kHz.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X