In kernel32.dll schreiben?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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?
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

oder besser gleich komplett im binärcode schreiben... dann noch den fluxkompensator rekalibrieren ;)
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag 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 :D ... nur sonen gedanke...

mfg
125
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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?
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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 :roll:

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
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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...
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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
Antworten