Seite 2 von 4
Verfasst: 07.07.2005 19:32
von Zaphod
@Deeem2031:
wenn du von der xp cd in der wiederherstellungskonsole startest, sollte es dir möglich sein die kernel dll zu ersetzen... aber mal im ernst, die kernel dll zu "optimieren", in dem du im disassembler dran rumpfuscht ist vollkommener unsinn. du könntest sie höchstens neuschreiben, aber zum einen wird das mit purebasic nicht funktionieren und zum anderen kannst du dir sicher sein dass msvc viel besser optimierten code erzeugt, damit würdest du die bestenfalls langsamer machen. es ist auch keine kleine aufgabe das mal eben neu zu schreiben, die reactos entwickler arbeiten seit jahren an ihrer kernel32.dll und sind noch weit davon entfernt fertig zu werden.
was genau stört dich denn an der windows kernell32.dll? was gibt es denn da deiner meinugn nach zu optimieren?
Verfasst: 07.07.2005 19:37
von remi_meier
@Deeem2031:
Hooke doch einfach ein paar API-Funktionen!
AFAIK müsstest du beim Verändern der DLL doch immer die Sprungadres-
sen anpassen, was fast unmöglich ist.
Verfasst: 07.07.2005 19:38
von DarkDragon
Vielleicht könnte man das ja disassemblieren und durch remi_meiers optimizer jagen, wird aber einen Tag dauern, so groß wie der source ist, glaube ich. Oder gleich nen Hex-Optimierer basteln.
@Remi: er will ja nich die Funktionen in der Laufzeit ersetzen.
Verfasst: 07.07.2005 19:40
von Zaphod
oder besser gleich komplett im binärcode schreiben... dann noch den fluxkompensator rekalibrieren

Verfasst: 07.07.2005 19:41
von 125
Hi,
er könnte auch einen Wrapper schreiben die die Funktionen Mit CallProcedureFast in der Kernel32_Old.dll aufruft, und die funcs die ihm zu langsam sind baut er neu mit dem Disassembleden Code den er hat

... nur sonen gedanke...
mfg
125
Verfasst: 07.07.2005 22:02
von Deeem2031
Warum beantwortet ihr nicht einfach meine Frage? Ich weiß doch was ich mache...
"ähh sorry, dann darfst du ja jedes mal neu anfangen, wenn du nen fehler baust. Und zwar ganz neu, d.h. Windows neu installieren."
...? Warum sollte ich Windows neu installieren? Ich kopier einfach das Backup der dll wieder zurück und schon funktioniert wieder alles...
"Welcher andere würde solch einem Programm seine kernel32.dll freiwillig hergeben? Ich denke du machst das NUR für dich."
Nein, wär das so würde ich nicht hier fragen, dann hät ich die Dll schon längst mit Linux oder DOS geändert.
"du könntest sie höchstens neuschreiben, aber zum einen wird das mit purebasic nicht funktionieren und zum anderen kannst du dir sicher sein dass msvc viel besser optimierten code erzeugt, damit würdest du die bestenfalls langsamer machen."
Wer hat denn gesagt, dass ich das mit Purebasic machen will? Ich würde höchstens das Programm was die DLL dann ändert in PB schreiben.
"was genau stört dich denn an der windows kernell32.dll? was gibt es denn da deiner meinugn nach zu optimieren?"
Viel zu viel..
"Hooke doch einfach ein paar API-Funktionen!"
Ich will das aber für jedes Programm haben.
"AFAIK müsstest du beim Verändern der DLL doch immer die Sprungadres
sen anpassen, was fast unmöglich ist."
Was soll am ändern von 4 bytes unmöglich sein?
Verfasst: 07.07.2005 22:24
von Zaphod
da kommt zwar ohnehin nichts bei raus, denn was du da vorhast ist totaler unsinn, aber eine möglichkeit währe eine bootfähige cd mit freedos und dem ntfs treiber für dos (ich weiß leider nichtmehr wo man den herbekommt) zu machen, die dann einfach die kernell32.dll mit deiner toll optimierten version der dll ersetzt. das ganze dann noch als iso, dann kann das jeder depp installieren. direkt während die kernell dll läuft geht es natürlich nicht.
mit hooks kann man übrigens auch anwendungendungen schreiben, die auswirkungen auf alle laufenden programme haben (ein schönes beispiel dafür ist windowblinds unter win 2k ) und ist definitiv die bessere lösung in allen szenarien.
Verfasst: 07.07.2005 22:30
von remi_meier
Naja, wenns wirklich so ist mit den Adressen, dann müsstest du eigentlich
einen kompletten Disassembler und einen kompletten Assembler basteln,
denn nicht jeder Befehl hat die gleiche Länge (-> Abspeichern) und wenn
du einen entfernst, musst du immer wieder die aktuelle Adresse neu er-
rechnen. Danach musst du noch überall die Adressbezüge finden und dort
updaten!
Mach ruhig
Meiner Meinung nach reicht die Geschwindigkeit von Windows, das Problem
sind eher die Bugs
Wichtiger für die Geschwindigkeit sind auch die Programme! Normalerweise
ist es nicht Windows, was alles ausbremst..
greetz
Remi
Verfasst: 07.07.2005 22:46
von Deeem2031
Ihr seit mir leider keine große Hilfe, weil man merkt das ihr kaum/keine Ahnung habt. Also muss ich doch selber rausfinden wie es geht...
Verfasst: 07.07.2005 22:53
von remi_meier
Naja, prinzipiell, habs aber noch nie gemacht (ich weiss, ich falle auf deine
provokative Frage rein

).
Also nach meinem Prinzip:
1.) Disassemblieren -> ASM-Code
Variablen und Labels sind dann als Adressen drin
2.) Die Start- und Stopadresse der Procedure finden
3.) Dazwischen den Code abändern und alle Adressen hinter dem abge-
änderten Code mit der Verschiebung updaten...
4.) Wieder Assemblieren
greetz
Remi