AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Zydis - X86/X86-64 Disassembler Library

Zydis - X86/X86-64 Disassembler Library

Ein Thema von Zacherl · begonnen am 23. Feb 2018 · letzter Beitrag vom 10. Apr 2018
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Zacherl
Zacherl
Registriert seit: 3. Sep 2004
Hallo zusammen,

Was ist Zydis?
Die Zyan Disassembler Library (Zydis) ist eine plattformunabhängige X86/X86-64 Disassembler Library geschrieben in C. Bei der Entwicklung wurde neben Korrektheit (des Disassemblys) auch insbesondere auf Performance und eine kleine Codegröße Wert gelegt. Die Bibliothek unterstützt hierbei alle zum heutigen Tage existierenden ISA-Extensions. Der gesamte Code beinhaltet eine umfassende Doxygen Dokumentation.

Detailierte Informationen über das Zydis Projekt und die dazugehörigen C-Sourcen (MIT Lizenz) gibt es auf GitHub (Englisch):
https://github.com/zyantific/zydis

Zydis Pascal:
Hierbei handelt es sich um die Pascal-Bindings (Low-Level Übersetzung und Top Level Wrapper Klassen) für Zydis. Ein Kompilat der .DLL und die .OBJ-Dateien für statisches Linken (32- und 64-Bit), sowie ein paar Beispiele liegen dem Archiv ebenfalls bei.

Die aktuellste Version der Bindings und die dazugehörigen Binaries (.DLLs und .OBJ Dateien), finden sich auch immer in unserem GitHub Repository (Englisch):
https://github.com/zyantific/zydis-pascal

Readme:
Die Pascal Bindings unterstützen sowohl dynamisches, als auch statisches Linken:
  • Dynamisch
    • Zydis32.dll bzw. Zydis64.dll aus Bin32 bzw. Bin64 in das Verzeichnis der eigenen Anwendung, oder nach C:\Windows\System32\ (64-Bit) bzw. C:\Windows\SysWOW64\ (32-Bit) kopieren
    • Die Compilerdirektive {$DEFINE ZYDIS_DYNAMIC_LINK} in der Zydis.pas aktivieren (standardmäßig an)
  • Statisch
    • Die Verzeichnisse Bin32 bzw. Bin64 in den Root-Ordner der Pascal Bindings kopieren (bereits erledigt, wenn ihr das Archiv hier aus dem Thread herunterladet)
    • Die Compilerdirektive {$DEFINE ZYDIS_DYNAMIC_LINK} in der Zydis.pas deaktivieren
    • Wenn statisch gelinkt wird, sollte die Bibliothek neben Windows auch auf allen Unixoiden bzw. mobilen Systemen vollständig lauffähig sein, da keine Plattformspezifischen Funktionen importiert werden

Roadmap:
  • Doxygen Dokumentation für die Bindings
  • Unterstützung für ältere Delphi Versionen und FreePascal

Viele Grüße
Zacherl
Miniaturansicht angehängter Grafiken
logo.png   zydisinfo.png  
Angehängte Dateien
Dateityp: rar zydis-pascal.rar (671,2 KB, 11x aufgerufen)
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (10. Apr 2018 um 19:15 Uhr)
 
Benutzerbild von Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#11
  Alt 10. Apr 2018, 19:16
Ahh, habe das Problem endlich finden und beheben können. Delphi übergibt Structs, welche mit const gekennzeichnet sind standardmäßig als Zeiger. FPC pusht unter 32-Bit anscheinend lieber den kompletten Inhalt auf den Stack Habe das Interface manuell auf Zeigertypen geändert. Ist so im Grunde eh näher am C-Original.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 10.4 Sydney
 
#12
  Alt 10. Apr 2018, 21:54
Ja, CONST ist wie VAR, nur halt "schreibgeschützt" ... das gilt für Typen über 32 Bit. (bis 32 Bit wird meistens optimiert und dann doch der Wert, anstatt einem Zeiger übergeben)

Und gemanagte Typen, ala String, Interface usw. sind eh immer bissl anders.



Mit einer anderen Aufrufkonvention könnte sich das Verhalten eventuell auch ändern.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#13
  Alt 10. Apr 2018, 22:29
Ja, CONST ist wie VAR, nur halt "schreibgeschützt" ... das gilt für Typen über 32 Bit. (bis 32 Bit wird meistens optimiert und dann doch der Wert, anstatt einem Zeiger übergeben)
Genau, das gillt für Delphi. FPC hat da scheinbar aber andere Regeln. Musste das Interface so ändern, dass statt const TType jetzt explizit PType verwendet wird.

Edit:
Wobei scheinbar const auch bei Delphi keine Garantie für "pass by reference" ist. In neueren Versionen gibt es hierfür wohl den [Ref] Decorator. Für FreePascal kann man constref verwenden. Um einheitlich zu bleiben habe ich mich jetzt aber für die expliziten Zeigertypen entschieden.

Geändert von Zacherl (10. Apr 2018 um 22:32 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf