RegSetValueEx Schleife



  • Hallo,
    ich habe folgendes Problem.Meine Anwendung soll etwas schneller laufen und kleiner werden.Nun habe ich mal meine alten Assemblerkenntnisse ausgepackt die etwas eingestaubt sind wenn ich ehrlich bin.Also ich habe folgendes Problem.
    Ich muss unzählige werde in der Registry setzen und hab das ganze mal so angelegt:

    invoke RegCreateKeyEx, HKEY_CURRENT_USER, ADDR szKeyName1, NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, ADDR pKey, ADDR Disp
            invoke RegSetValueEx, pKey, ADDR szDWValue1, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR DubWord, DW_SIZE
            invoke RegSetValueEx, pKey, ADDR szDWValue2, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR DubWord, DW_SIZE
            invoke RegSetValueEx, pKey, ADDR szDWValue3, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR DubWord, DW_SIZE
            invoke RegSetValueEx, pKey, ADDR szDWValue4, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR DubWord, DW_SIZE
            invoke RegSetValueEx, pKey, ADDR szDWValue5, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR DubWord, DW_SIZE
            invoke RegSetValueEx, pKey, ADDR szDWValue6, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR DubWord, DW_SIZE
            invoke RegSetValueEx, pKey, ADDR szDWValue7, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR DubWord, DW_SIZE
            invoke RegSetValueEx, pKey, ADDR szDWValue8, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR DubWord, DW_SIZE
            invoke RegSetValueEx, pKey, ADDR szDWValue9, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR DubWord, DW_SIZE
            invoke RegSetValueEx, pKey, ADDR szDWValue10, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR DubWord, DW_SIZE
            invoke RegSetValueEx, pKey, ADDR szDWValue11, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR DubWord, DW_SIZE
            invoke RegCloseKey, pKey
    

    Außerdem ist das nicht der einzige Block den ich habe.Deswegen wollte ich das ganze in eine Schleife verpacken da ich denke das das ganze erstmal platz spart...naja..und das wars auch schon.Wie realisiere ich das am besten?



  • Am besten? In C++ oder einer anderen Hochsprache... 🙄



  • ja daran hatte ich auch schon gedacht..aber das muss doch auch möglich sein das ganze in asm zu realisieren oder??hatte das ganze auch schon in c++ geschrieben aber ich möchte alles in asm einbinden



  • Klar ist das moeglich - je nach verwendetem Assembler eben auch mit solchen Macros, wie du sie da verwendest.
    Allerdings ist mir nicht ganz klar, wo genau eigentlich dann dein Problem liegt.
    Willst du deinen Code, den du gepostet hast, etwas stauchen...? Weil schneller als so, wie es da steht, wirst du das IMHO nicht mehr bekommen.



  • naja,es ging mir auch um den speicher....ich denk mal das es weniger speicherplatz braucht wenn ich doch eine schleife aufrufe...oder seh ich das falsch??



  • Jup, da laesst sich wahrscheinlich was rausholen. Ich gehe davon aus, dass du wenigstens noch einen gewissen Peil von Assembler hast, und im Grunde weisst, wie man Schleifen realisieren kann, was fuer Register es gibt, und einen Ueberblick ueber das Instruktionsset hast. Wenn nicht, rate ich dir, dir erst nochmal bei den Tutorials einen Ueberblick zu verschaffen.

    Wenn ich das richtig sehe, aendert sich bei den ganzen Aufrufen RegSetValueEx-Aufrufen nur der 2. Parameter. Also bist du wahrscheinlich auch schon zu dem Schluss gekommen, dass es sinn machen wuerde, die in eine Schleife zu packen.

    Wenn die ueber den 2. Parameter adressierten Daten alle gleich gross sind und direkt hintereinander im Speicher liegen, kannst du dafuer - wie auch immer - eine Pointer-variable einrichten. Entweder indem du ein Register - zB. esi - vor jedem invoke sicherst, nach jedem invoke wiederherstellst und dann als 2. Parameter uebergibst, oder direkt eine Variable im Speicher ablegst. Dann koenntest du auch mit der Adresse eines Labels, bzw. Datums, das direkt hinter dem letzten Wert liegt, die Abbruchbedingung der Schleife realisieren.
    Ansonsten brauchst du einen Zaehler. Entweder wie oben beschrieben mit einem Register oder ebenfalls mit einer Variable (kann auch im Stackframe liegen).

    Das waere, was mir grundsaetzlich dazu einfaellt. Jetzt bist du gefragt: Wie genau sieht die Sache aus, welche Implementierungsart bevorzugst du. Ueberlege dir auch, mit wieviel von meinen recht allgemeinen Ausfuehrungen du ueberhaupt noch etwas anfangen kannst, und ob du deine Schleife nicht doch besser in einer Hochsprache implementierst. 😉



  • das war doch mal ne antowrt:-)...hab schon ein bisschen ahunug...als die instruktionen sind mir schon bekannt und treiber wurden auch hin und wieder mal in asm geschrieben aber das ist schon ein paar jahre her wenn ich ehrlich bin...aber ich werd mich mal dahinter hängen und mal meine alten bücher rauskramen..ich werd die tage mal den code posten den ich vollbracht habe und dann sehen wir mal weiter..ich versuch mal mein bestes zu geben;-)


Anmelden zum Antworten