Sie sind nicht angemeldet.

1

Dienstag, 26. Januar 2010, 14:56

[C++] dll erzeugen

Hi,

ich habe mit folgendem Tutorial Dll mit C++ erstellen und in AutoIt nutzen die folgende dll erstellt:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <math.h>
#include <stdio.h>
#include <assert.h>


long qe2(long x, long y, long n)   /* berechne x^y mod n */
{
    long s, t, u;

    s = 1, t = x, u = y;

    while (u) {
        if (u & 1) s = (s * t) % n;
        u >>= 1;
        t = (t * t) % n;
    }

    return s;
}

void extended_euclid(long a, long b, long *x, long *y, long *d)   /* erweiterter Euklid */
{
    long q, r, x1 = 0, x2 = 1, y1 = 1, y2 = 0;

    if (b == 0) {
        *d = a;
        *x = 1;
        *y = 0;
        return;
    }

    while (b > 0) {
        q = a / b;
        r = a - q * b;
        *x = x2 - q * x1;
        *y = y2 - q * y1;
        a = b;
        b = r;
        x2 = x1;
        x1  = *x;
        y2 = y1;
        y1 = *y;
    }

    *d = a;
    *x = x2;
    *y = y2;
}

long inverse(long a, long n)
{
    long d, x, y;

    extended_euclid(a, n, &x, &y, &d);
    if (d == 1) return x;

    return 0;
}

extern "C" long __declspec(dllexport) rsa_genkey(long p, long q, long e)
{
    return inverse(e, (p-1)*(q-1));
}

extern "C" long __declspec(dllexport) rsa_encrypt(long m, long e, long n)
{
    assert(m < n);        /* m muss kleiner als n sein */
    return qe2(m, e, n);
}
               
extern "C" long __declspec(dllexport) rsa_decrypt(long c, long d, long n)
{
    assert(c < n);        /* c muss kleiner als n sein */
    return qe2(c, d, n);
}



Wenn ich nun aber mit:

AutoIt-QuellCode

1
2
3
4
5
6
$p = 11
$q = 13
$e = 23

$result = DllCall("RSAautoit.dll", "long:cdecl", "rsa_genkey", "long", $p, "long", $q, "long", $e)
MsgBox(0, "", @error)


aufrufe gibt mir @error eine 1 aus.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »loron« (26. Januar 2010, 14:57)


Helfen Sie, die Vielfalt des Amazonas zu bewahren

2

Samstag, 30. Januar 2010, 19:57

Zitat von »Autoit Hilfe«

Return Value

Success: @error = 0.
Failure: set @error
@error: 1 unable to use the DLL file,
2 unknown "return type",
3 "function" not found in the DLL file,
4 bad number of parameters.
See remarks.

Es sieht so aus, als würde das Problem die dll nicht finden .. sicher, dass der Name und der Pfad richtig ist? Wenn ja, probier mal dein script im administrator Modus auszuführen ( #RequireAdmin ) :thumbup:
Signatur
Du möchtest Autoit lernen, aber weißt nicht wo du anfangen sollst?! : [ANFÄNGER HIER REIN] Das Erlangen von Autolt Grundwissen

3

Samstag, 30. Januar 2010, 22:13

wenn das dann immer nich nich klappt würde ich ma versuchen die DLL ersma mit DLLOpen zu öffnen und dann den Handle zu übergeben... btw kann man damit noch differenzierter prüfen ob er einfach die DLL nich findet oder ob es an der DLLCall Syntax liegt die du benutzt^^
Signatur

4

Sonntag, 31. Januar 2010, 12:17

Mich würde an dieser Stelle interessieren, ob die Funktion (zum Beispiel)SetCursorPos schneller läuft, als der normale MouseMove Befehl, wenn man explizit auf die Dll zugreift (user32.dll) und die Funktion in AutoIt aufruft.
Signatur

5

Sonntag, 31. Januar 2010, 15:27

Du kannst es ja ausprobieren, doch denke ich nicht, dass es schneller sein wird

Autoit wird mit C++ befehlen interpretiert und so eine direckte interpretation sollte schneller sein, als eine, die noch einen Befehl (den DllCall) zwischen setzt
Signatur
Du möchtest Autoit lernen, aber weißt nicht wo du anfangen sollst?! : [ANFÄNGER HIER REIN] Das Erlangen von Autolt Grundwissen

6

Sonntag, 31. Januar 2010, 17:02

@Understood
Ist mir auch schon aufgefallen, aber ohne user32.dll(Also DllCalls in Autoit) geht ControlSetText schneller als Send:)(Getestet)
Und das is eigentlich auch bei noch ein paar anderen Befehlen so, aber...naja ich editiers gleich

EDIT
:DNix gefunden aber interresant ist eigentlich auch ob AutoitX in C++ langsamer oder genauso schnell läuft wie C++ also z.B MouseMove :whistling:
Signatur :wbb: Meine Tutorials :wbb:

- [Video-Tut]OllyDbg
- [Tut]Code Protection Autoit/C/C++

DirectX9 Wissen: 47%

Autoit: 70%

C++: 60%


Und Weiter geht's!!

Für Fragen bezüglich Hacking im Sinne von Games hacken jeglicher Weise, bin ich per Pn zu erreichen.


Offline da im Urlaub

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Botcoder« (31. Januar 2010, 17:11)


7

Sonntag, 31. Januar 2010, 17:16

sobald beide befehle übersetzt sind, dürften sie etwa gleichschnell sein.. das, was den unterschied macht ist ja das interpreten ..
Signatur
Du möchtest Autoit lernen, aber weißt nicht wo du anfangen sollst?! : [ANFÄNGER HIER REIN] Das Erlangen von Autolt Grundwissen