Article View: pl.comp.lang.delphi
Article #334667Re: Przejęcie odwołania funkcji obsługi plików w DLL
From: dziobu
Date: Tue, 10 Jan 2012 23:07
Date: Tue, 10 Jan 2012 23:07
96 lines
4645 bytes
4645 bytes
Dnia 1/10/2012 11:43 PM, Użytkownik xbary napisał: > > a jak wpisałem > \\.\pipe\0.bmp > w uruchom systemowe to się obudziła ale i tak nic nie przekazuje i > przeglądarka grafiki pokazuje błąd nagłówka itd... Sprawdź dokładniej, bo to kulturalny sposób na ten problem. > > Będę chyba zmuszony zrobić odbicie kernel32.dll na np. wernel.dll , > zmienić odwołanie w bibliotece na otwrcie wernel.dll iii przejąć > funkcje dyskowe i tam załatwić wczytywanie z z czego się chce. Jest > problem bo musiałbym praktycznie wszystkie definicje kernel32 napisać > od nowa, tzn przejąć je itd a tego jest raczej dużo i bez kodu > źródłowego szablonowej biblioteki raczej nie będę się zabierał nawet > za to w tej chwili. Jakimkolwike disassemblerem otwierasz kernel32.dll (zależy na jakim systemie to ma działać, bo każdy ma swój różny; choć to zależy tak naprawde od tego czego używać będzie biblioteka z której korzystasz) i eksportujesz listę funkcji. Parametry Cie nie interesują. Potem troche obróbki tekstu (makro) i w kilkanascie sekund masz taką liste importów: procedure xxx__hread; external kernel32 name '_hread'; procedure xxx__hwrite; external kernel32 name '_hwrite'; procedure xxx__lclose; external kernel32 name '_lclose'; procedure xxx__lcreat; external kernel32 name '_lcreat'; procedure xxx__llseek; external kernel32 name '_llseek'; procedure xxx__lopen; external kernel32 name '_lopen'; procedure xxx__lread; external kernel32 name '_lread'; procedure xxx__lwrite; external kernel32 name '_lwrite'; procedure xxx_AcquireSRWLockExclusive; external kernel32 name 'AcquireSRWLockExclusive'; procedure xxx_AcquireSRWLockShared; external kernel32 name 'AcquireSRWLockShared'; ... Kolejnym etapem jest wyeksportowanie wszystkiego: exports xxx__hread name '_hread', xxx__hwrite name '_hwrite', xxx__lclose name '_lclose', xxx__lcreat name '_lcreat', xxx__llseek name '_llseek', xxx__lopen name '_lopen', xxx__lread name '_lread', xxx__lwrite name '_lwrite', xxx_AcquireSRWLockExclusive name 'AcquireSRWLockExclusive', xxx_AcquireSRWLockShared name 'AcquireSRWLockShared', ... Kwestię przejrzystości masz już załatwioną. Tylko że teraz to pusty element pomiędzy biblioteką a kernel32.dll. W związku z tym piszesz swoje funkcje które chcesz nadpisać i potem je eksportujesz w miejscę tych oryginalnych: exports ... // xxx_CreateFileA name 'CreateFileA', My_CreateFileA name 'CreateFileA', ... i gdzieś dalej: function My_CreateFileA(lpFileName: PAnsiChar; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; stdcall; ... Myślę że z ewentualną obsługą otwierania innych plików przez tą biblioteke (nie znam jej) sobie poradzisz. Mało to kulturalne rozwiązanie, ale działa. Jeśli biblioteka będzie importowała funkcje dynamicznie, to masz szanse napisać jedną która by działała na każdym systemie. Ale ja sie już w to nie bawiłem. -- Pozdrawiam dziobu xyzyk.pl
Technical Details
Message-ID:
<jeigba$a46$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<75934d7e-dc45-4c01-a2ac-36a9e13814b9@i6g2000vbk.googlegroups.com> <4f0c8e2c$0$1465$65785112@news.neostrada.pl> <507a36b4-a163-4bf5-9044-c366f1e9efea@h13g2000vbn.googlegroups.com> <4f0c9bc5$0$1230$65785112@news.neostrada.pl> <aeeff612-d8a5-4248-aee6-9951277f5f03@z1g2000vbx.googlegroups.com> <4f0ca44b$0$1208$65785112@news.neostrada.pl> <6615b546-461c-4d82-97ed-5d3bdbdc8fb6@k5g2000vba.googlegroups.com> <4f0caeb4$0$1448$65785112@news.neostrada.pl> <7f0b7d34-90fa-44d2-a7d4-760bf5e6ac0f@j9g2000vby.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: dziobu <dziobu@gazeta.pl> Newsgroups: pl.comp.lang.delphi Subject: Re: Przejęcie odwołania funkcji obsługi plików w DLL Date: Wed, 11 Jan 2012 00:07:37 +0100 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 96 Message-ID: <jeigba$a46$1@inews.gazeta.pl> References: <75934d7e-dc45-4c01-a2ac-36a9e13814b9@i6g2000vbk.googlegroups.com> <4f0c8e2c$0$1465$65785112@news.neostrada.pl> <507a36b4-a163-4bf5-9044-c366f1e9efea@h13g2000vbn.googlegroups.com> <4f0c9bc5$0$1230$65785112@news.neostrada.pl> <aeeff612-d8a5-4248-aee6-9951277f5f03@z1g2000vbx.googlegroups.com> <4f0ca44b$0$1208$65785112@news.neostrada.pl> <6615b546-461c-4d82-97ed-5d3bdbdc8fb6@k5g2000vba.googlegroups.com> <4f0caeb4$0$1448$65785112@news.neostrada.pl> <7f0b7d34-90fa-44d2-a7d4-760bf5e6ac0f@j9g2000vby.googlegroups.com> NNTP-Posting-Host: abip208.neoplus.adsl.tpnet.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1326236842 10374 83.7.131.208 (10 Jan 2012 23:07:22 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Tue, 10 Jan 2012 23:07:22 +0000 (UTC) X-User: dziobu In-Reply-To: <7f0b7d34-90fa-44d2-a7d4-760bf5e6ac0f@j9g2000vby.googlegroups.com> User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit