Ja, daher sollte man es eben nicht machen. Um die Übersicht zu bewahren.sechsrad hat geschrieben:aha, bei "from ctypes import *" wird dieses "ctypes" automatisch angenommen und es kommt dann die fehlermeldung wenn ich es davor setze und bei "import ctypes" muss ich es jedesmal davorschreiben.
einbinden vom c und c++
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Den Artikel habe ich auch zuletzt gelesen, wirklich schön, wie die Jungs dort das Ganze auseinandergenommen haben.Lies mal den Artikel "Mifare-Funkchip geknackt" in c't 8/2008 (das ist die aktuelle) auf S. 80 durch (kann ich übrigens auch allen anderen empfehlen). Der ist super gemacht und zeigt wie sie Hardware-Reverse-Engineering gemacht haben. Natürlich, das war sicherlich mehr Aufwand als wie das im Artikel klingt, aber trotzdem - mit genügend Motivation (und die kann durchaus gegeben sein, wenn man sieht, wo die Mifare Classic überall eigesetzt wird) ist so etwas durchaus zu schaffen. Klar dass das schon einiges an Vorwissen benötigt, aber das ist nun mal mit allem so
@sechsrad
Sorry, aber Deine ganzen Begriffe sind einfach nur zusammengewürfelt, ich habe auch danach gegoogelt und nichts sinnvolles dazu gefunden.
Des weiteren würde mich mal interessieren, wie Du die Leistung deines Pythoncodes analysiert hast und wie Du feststellst, dass Dein Pythoncode langsamer ist als Deine C-Implementierung ?
Wo genau macht Python denn bei Deinem Projekt schlapp? Hast Du NumPy und andere Möglichkeiten eingesetzt, die auch schon hier gepostet wurden?
Hast Du schon versucht, Deinen Pythoncode zu optimieren?
ne0h
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Richtig. Du kannst dem zwar einen Alias geben, aber mir fällt kein brauchenares Kürzel ein. Alternativ kannst du auch die Namen die du benötigst einzeln importieren, das ist im Fall von ctypes wohl auch ein brauchbarer Ansatz. Also mit ``from ctypes import pointer, cdll`` usw.sechsrad hat geschrieben:also mit "import ctypes"Ja, daher sollte man es eben nicht machen. Um die Übersicht zu bewahren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Was anderes habe ich ja auch gar nicht gesagt Allerdings sind Vorwissen und Motivation für viele ausreichend große Hürden, vor allem, wenn das benötigte Vorwissen sehr umfangreich ist, und die Motivation lang anhalten muss Beides ist beim Reverse Engineering eher Regel denn Ausnahme... insofern kann man schon davon sprechen, dass Reverse Engineering von Binärkompilaten wesentlich aufwendiger ist als das von Byte-Code. Nichts anderes wollte ich sagenLeonidas hat geschrieben:Lies mal den Artikel "Mifare-Funkchip geknackt" in c't 8/2008 (das ist die aktuelle) auf S. 80 durch (kann ich übrigens auch allen anderen empfehlen). Der ist super gemacht und zeigt wie sie Hardware-Reverse-Engineering gemacht haben. Natürlich, das war sicherlich mehr Aufwand als wie das im Artikel klingt, aber trotzdem - mit genügend Motivation (und die kann durchaus gegeben sein, wenn man sieht, wo die Mifare Classic überall eigesetzt wird) ist so etwas durchaus zu schaffen. Klar dass das schon einiges an Vorwissen benötigt, aber das ist nun mal mit allem solunar hat geschrieben:Ich bestreite ja nicht, dass Reverse Engineering möglich ist, aber ich bestreite, dass es einfach ist und "recht gut" funktioniert In solche Keygeneratoren und Cracks steckt nämlich verdammt viel Arbeit, und oft braucht es ein paar Monate intensiver Arbeit, bis solche Algorithmen gebrochen sind.
Also lassen wir das jetzt, dass ist eh OT
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
Das Python Tutorial schadet nie.sechsrad hat geschrieben:wie kann ich die namen von ctypes oder auch anderen modulen zb auflisten um sie mal kennenzulernen?ctypes
mfg
( http://docs.python.org/tut/tut.html )
Aber ich verrate es dir ausnahmsweise mal direkt:
Code: Alles auswählen
>>> dir(ctypes)
['ARRAY', 'ArgumentError', 'Array', 'BigEndianStructure', 'CDLL', 'CFUNCTYPE', 'DEFAULT_MODE', 'DllCanUnloadNow', 'DllGetClassObject', 'FormatError', 'GetLastError', 'HRESULT', 'LibraryLoader', 'LittleEndianStructure', 'OleDLL', 'POINTER', 'PYFUNCTYPE', 'PyDLL', 'RTLD_GLOBAL', 'RTLD_LOCAL', 'SetPointerType', 'Structure', 'Union', 'WINFUNCTYPE', 'WinDLL', 'WinError', '_CFuncPtr', '_FUNCFLAG_CDECL', '_FUNCFLAG_PYTHONAPI', '_FUNCFLAG_STDCALL', '_Pointer', '_SimpleCData', '__builtins__', '__doc__', '__file__', '__name__', '__path__', '__version__', '_c_functype_cache', '_calcsize', '_cast', '_cast_addr', '_check_HRESULT', '_check_size', '_ctypes_version', '_dlopen', ........]
>>> x = "lol"
>>> dir(x)
[ ..... 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', ..... ]
>>>
also ich progge mit dem editor "drpython"
wenn ich den befehl dort eingebe und mit "run" starten möchte, passiert nichts.
wie kann ich es dort auflisten?
mfg
wenn ich den befehl dort eingebe und mit "run" starten möchte, passiert nichts.
wie kann ich es dort auflisten?
mfg
Zuletzt geändert von sechsrad am Montag 7. April 2008, 20:00, insgesamt 1-mal geändert.
also geht auch nicht.
wenn ich dir() eingebe werden 3 namen aufgelistet.
bei dir(ctypes) kommt "NameError: name 'ctypes' is not defined"
obwohl ich ja eben mit der "ctypes" gearbeitet habe.
bei "dir(math)" kommt die gleiche fehlermeldung, obwohl ich eben gerade sinus getestet hatte mit import math.
hmmm.
mfg
wenn ich dir() eingebe werden 3 namen aufgelistet.
bei dir(ctypes) kommt "NameError: name 'ctypes' is not defined"
obwohl ich ja eben mit der "ctypes" gearbeitet habe.
bei "dir(math)" kommt die gleiche fehlermeldung, obwohl ich eben gerade sinus getestet hatte mit import math.
hmmm.
mfg
Du musst die Module auch erstmal importieren, damit sie bekannt sind.
Also zuerst: und dann
ne0h
Also zuerst:
Code: Alles auswählen
import math
Code: Alles auswählen
dir(irgendwas)
ne0h
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Man muss ``ctypes`` vorher importieren, bevor man es mit ``dir`` analysieren kann.sechsrad hat geschrieben:bei dir(ctypes) kommt "NameError: name 'ctypes' is not defined"
EDIT:
Und du glaubst, du bist langsam?ne0h hat geschrieben:Warum bin ich immer zu langsam...
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Eine andere, meines Erachtens einfachere Variante, da die C-Funktionen nicht umständlich angepasst werden müssen, wäre mit restype:Masaru hat geschrieben:So wie du das da versuchst sechsrad, funktioniert es bei mir auch nicht ...
Code: Alles auswählen
import ctypes
f = ctypes.cdll.LoadLibrary('test.dll')
f.mult.restype = ctypes.c_float
print f.mult(ctypes.c_float(34.3))
print 3.7 * 34.3
Code: Alles auswählen
#include <math.h>
float mult(float n) {
float a;
a = n * 3.7;
return a;
}
MfG
HWK