From b8a08c60db61245f25a1f338738d03275ca3a0fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A4mes=20M=C3=A9n=C3=A9trey?= Date: Tue, 19 Mar 2019 00:57:27 +0100 Subject: [PATCH] Upgrade the .NET bindings to .NET Standard 2.0. Modify how the bindings locate the native DLL, so it depends on the architecture of the running process. Create a NuGet package with Keystone 0.9.1 and upload it on nuget.org. --- CREDITS.TXT | 2 +- bindings/README | 2 +- bindings/csharp/.gitignore | 2 - bindings/csharp/CHANGELOG.md | 11 +++++ .../Keystone.Net.Tests.csproj | 0 .../csharp/Keystone.Net/Keystone.Net.csproj | 34 ++++++++------ bindings/csharp/Keystone.Net/NativeInterop.cs | 44 ++++++++++-------- bindings/csharp/README.md | 37 ++++++++++++++- bindings/csharp/keystoneengine.csharp.nupkg | Bin 0 -> 3020 bytes bindings/csharp/nuget-package-config.png | Bin 0 -> 45066 bytes 10 files changed, 94 insertions(+), 38 deletions(-) create mode 100755 bindings/csharp/CHANGELOG.md mode change 100644 => 100755 bindings/csharp/Keystone.Net.Tests/Keystone.Net.Tests.csproj mode change 100644 => 100755 bindings/csharp/Keystone.Net/Keystone.Net.csproj mode change 100644 => 100755 bindings/csharp/Keystone.Net/NativeInterop.cs create mode 100755 bindings/csharp/keystoneengine.csharp.nupkg create mode 100755 bindings/csharp/nuget-package-config.png diff --git a/CREDITS.TXT b/CREDITS.TXT index 46f0a968..0840bab5 100644 --- a/CREDITS.TXT +++ b/CREDITS.TXT @@ -49,5 +49,5 @@ Ruben Boonen: PowerShell binding. Marco Fornaro: C# binding. David Zimmer: VB6 binding. Michael Mohr: Debian packaging. -Jämes Ménétrey (ZenLulz): Java binding. +Jämes Ménétrey (ZenLulz): Java and C# bindings. Philippe Antoine (Catena cyber): fuzzing. diff --git a/bindings/README b/bindings/README index db565131..5a996a72 100644 --- a/bindings/README +++ b/bindings/README @@ -10,7 +10,7 @@ Except Python, all other bindings are contributed by community. - Haskell binding: by Adrian Herrera - OCaml binding: by Aziem Chawdhary - PowerShell binding: by Ruben Boonen -- C# binding: by Marco Fornaro +- C# binding: by Marco Fornaro and Jämes Ménétrey (ZenLulz) - VB6 binding: by David Zimmer - Masm binding: by mrfearless - Java binding: by Jämes Ménétrey (ZenLulz) diff --git a/bindings/csharp/.gitignore b/bindings/csharp/.gitignore index dd5d9ca6..3b9d5ec6 100644 --- a/bindings/csharp/.gitignore +++ b/bindings/csharp/.gitignore @@ -146,8 +146,6 @@ publish/ #*.pubxml *.publishproj -# NuGet Packages -*.nupkg # The packages folder can be ignored because of Package Restore **/packages/* # except build/, which is used as an MSBuild target. diff --git a/bindings/csharp/CHANGELOG.md b/bindings/csharp/CHANGELOG.md new file mode 100755 index 00000000..9cd5d757 --- /dev/null +++ b/bindings/csharp/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog of the .NET bindings for Keystone + +**Version 0.9.1.1: May 18th, 2019**: + +- Update to .NET Standard 2.0. +- Load dynamically the dynamic-link library that corresponds to the architecture of the running process (32 or 64-bit). + + +**Version 0.9.1.0: August 2nd, 2018**: + +- Refactor the bindings to target .NET Standard 1.1. \ No newline at end of file diff --git a/bindings/csharp/Keystone.Net.Tests/Keystone.Net.Tests.csproj b/bindings/csharp/Keystone.Net.Tests/Keystone.Net.Tests.csproj old mode 100644 new mode 100755 diff --git a/bindings/csharp/Keystone.Net/Keystone.Net.csproj b/bindings/csharp/Keystone.Net/Keystone.Net.csproj old mode 100644 new mode 100755 index ab55366f..8f5bec3d --- a/bindings/csharp/Keystone.Net/Keystone.Net.csproj +++ b/bindings/csharp/Keystone.Net/Keystone.Net.csproj @@ -1,28 +1,36 @@ - netstandard1.1 + netstandard2.0 Keystone - 1.1.0 - $(Version) - $(Version).0 + 0.9.1.1 + 0.9.1.1 + 0.9.1.1 - .NET bindings to the Keystone Engine. - Grégoire Geis + Keystone is a lightweight multi-platform, multi-architecture assembler framework. This package corresponds to the csharp bindings in the official git repository. + Nguyen Anh Quynh, Marco Fornaro, Grégoire Geis, Jämes Ménétrey - Keystone.Net + keystoneengine.csharp $(Version) - False - - First release. - assembler x86 arm keystone + true + Release notes can be found at: https://github.com/keystone-engine/keystone/blob/0.9.1/ChangeLog + assembler x86 x64 arm keystone llvm - https://github.com/keystone-engine/keystone - $(PackageProjectUrl)/blob/master/COPYING + http://www.keystone-engine.org + https://github.com/keystone-engine/keystone#license http://www.keystone-engine.org/images/keystone.png - $(PackageProjectUrl).git + https://github.com/keystone-engine/keystone git + + Nguyen Anh Quynh + true + Keystone Engine - .NET Bindings + + + + true diff --git a/bindings/csharp/Keystone.Net/NativeInterop.cs b/bindings/csharp/Keystone.Net/NativeInterop.cs old mode 100644 new mode 100755 index b910e2fa..6e76692d --- a/bindings/csharp/Keystone.Net/NativeInterop.cs +++ b/bindings/csharp/Keystone.Net/NativeInterop.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using System.Runtime.InteropServices; namespace Keystone @@ -8,29 +9,34 @@ namespace Keystone /// internal class NativeInterop { - // This shouldn't be needed, even on Windows - // /// - // /// Taken from: http://stackoverflow.com/questions/10852634/using-a-32bit-or-64bit-dll-in-c-sharp-dllimport - // /// - // static NativeInterop() - // { - // var myPath = new Uri(typeof(NativeInterop).Assembly.CodeBase).LocalPath; - // var myFolder = Path.GetDirectoryName(myPath); + /// + /// Load the appropriate dynamic-link library, according the architecture of the running application. + /// + /// + /// Taken from: http://stackoverflow.com/questions/10852634/using-a-32bit-or-64bit-dll-in-c-sharp-dllimport + /// + static NativeInterop() + { + var libPath = Path.GetDirectoryName(new Uri(typeof(NativeInterop).Assembly.CodeBase).LocalPath); + var is64 = IntPtr.Size == 8; + var subfolder = is64 ? "x64" : "x86"; - // var is64 = IntPtr.Size == 8; - // var subfolder = is64 ? "\\win64\\" : "\\win32\\"; + if (!string.IsNullOrEmpty(libPath)) + { + var dllPosition = Path.Combine(libPath, subfolder, "keystone.dll"); - // string dllPosition = myFolder + subfolder + "keystone.dll"; + // If this file exist, load it. + // Otherwise let the marshaller load the appropriate file. + if (File.Exists(dllPosition)) + { + LoadLibrary(dllPosition); + } + } + } - // // If this file exist, load it. - // // Otherwise let the marshaller load the appropriate file. - // if (File.Exists(dllPosition)) - // LoadLibrary(dllPosition); - // } + [DllImport("kernel32.dll")] + private static extern IntPtr LoadLibrary(string dllToLoad); - // [DllImport("kernel32.dll")] - // private static extern IntPtr LoadLibrary(string dllToLoad); - [DllImport("keystone", CallingConvention = CallingConvention.Cdecl, EntryPoint = "ks_version" )] internal static extern uint Version(ref uint major, ref uint minor); diff --git a/bindings/csharp/README.md b/bindings/csharp/README.md index 7e7e7688..8a353a13 100644 --- a/bindings/csharp/README.md +++ b/bindings/csharp/README.md @@ -1,5 +1,5 @@ -# Keystone.Net -.NET Standard bindings for Keystone. +# Keystone.Net +.NET bindings for Keystone (.NET Standard 2.0), written in C#. ## Usage ```csharp @@ -30,3 +30,36 @@ using (Engine keystone = new Engine(Architecture.X86, Mode.X32) { ThrowOnError = For those who already used the bindings before their last update, many things have changed. You can migrate your existing code easily using the [migration guide](./MIGRATON.md). + +## NuGet package +The NuGet package `keystoneengine.csharp` is maintained to reflect the latest version of the bindings and the library. It can either be downloaded using Visual Studio or by [browsing NuGet directly](https://www.nuget.org/packages/keystoneengine.csharp/). The package already embeds the 32/64-bit native dynamic-link libraries of Keystone. + +## Found an issue or bug ? +Feel free to open a GitHub issue on [the official repository of Keystone](https://github.com/keystone-engine/keystone/issues) and ping the contributors. + + +## Contributors +Authors: + +- Grégoire Geis ([https://github.com/71](@71)) +- Jämes Ménétrey ([@ZenLulz](https://github.com/ZenLulz/)) +- Marco Fornaro ([@chaplin89](https://github.com/chaplin89)) + +### Want to contribute ? +Hey you! Your help is more than welcome! Things to keep in mind when working on the .NET bindings for Keystone: + +- Think about the backward compatibility; while code refactoring is a good practice, changing entirely the API *may* result in struggles. +- Elaborate the unit tests that prove your code is working. Test all the paths of the newly added functions/classes. Keep the code coverage high! +- Please; write the required *XML Documentation Comments*, so every developer has the chance to understand your code. +- Update the changelog with a summary of your changes. + +#### Version notation +The version of the .NET bindings for Keystone is indicated in the Visual Studio project file. The major, minor and incremental versions (w.x.y) match the version of the library Keystone that the bindings are developed with. The build number (the .z in w.x.y.z) is incremented for each newer version of the .NET bindings. Please, don't forget to increment this version when you submit a pull request. + +On the last commit for a pull request, please create a tag called `csharp-bindings-w.x.y.z`. + +#### Pull request submission +Ping the contributors of the .NET bindings when submitting a pull request, so your changes can be peer reviewed. + +#### NuGet package update +Once your pull request has been accepted, please contact [@ZenLulz](https://github.com/ZenLulz/) so either he updates the library for you or add you to the project as a contributor on nuget.org. An example of *nupkg* is provided in this folder, as it requires to have a very specific configuration, because it embeds unmanaged libraries. The picture *nuget-package-config.png* details the structure and content of a NuGet package, ready to be deployed. Please reuse and test the package before pushing it onto nuget.org, as there is no possible roll back. \ No newline at end of file diff --git a/bindings/csharp/keystoneengine.csharp.nupkg b/bindings/csharp/keystoneengine.csharp.nupkg new file mode 100755 index 0000000000000000000000000000000000000000..4adfb72c4e45af45afee7d209c0c203bb8166727 GIT binary patch literal 3020 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