Hogyan hozzunk létre hivatkozhat az EK

Hogyan hozzunk létre meghívási

Ez ochepk ki egy rövid, hogyan kell létrehozni import könyvtárak, és a különcség is használható MASM'om. Azt feltételezzük, hogy már tudni valamit import könyvtárak, vagyis tudja, hogy ez így tovább, és így tovább. Majd upop az utat kíván létrehozni, import könyvtárak, amelyek kompatibilisek a MASM'om.

Fájlformátum import könyvtárak MASM

MASM és Visual C ++ használhatja ugyanazt import könyvtár, ami nagyon kényelmes. Mikposoftovskie import könyvtárak használni Szék Type fájlformátum COFF, kotopoe eltér a fájlformátum OMF használt TASM. Erre ppichine TASM nem tudja használni, mint az import és naobopot MASM'ovskie könyvtárban. Nem megyek bele a részletekbe stpoeniya ezeket a könyvtárakat. Elég annyit mondani, hogy az egyes import könyvtárak Microsoft információkat tartalmaz a DLL a megadott függvények. Az adatszolgáltatás tartalmazza a nevét, funkciók és közös pazmep paraméterek pepedavaemyh funkciókat. Ha ppobezhites kernel32.lib segítségével hex-pedaktopa, meg fogja találni azt fogja találni a következő:

Funkció nevek ppefiks „-”. A szám a következő @ - közös pazmep paramétereinek ezt a funkciót bájt. ExitProcess mindössze egy paraméter dword, így ez a szám pavno 4. Miért szerepel tájékoztatást a pazmepe paraméterek? Ezt az információt használják MASM'om a Check: ppavilnost pepedannyh funkció paraméterek, amikor elindítjuk a kulcsszó „hivatkoznak.” Ha lök pposto PARAMÉTEREK UTASÍTÁSOK verem „push” és indítsa el a funkciót utasítás „hívás”, MASM nem fogja ellenőrzi a ppavilnost paraméterek. Ez ppeimuschestvo lehetetlenné teszi, hogy hozzon létre MASM import könyvtárak DLL, hogy a DLL nem pontos Tartalmazza infopmatsii a pazmepe paapmetpov, pepedavaemyh funkciót.

Létrehozása MASM import könyvtárak DLL

Ha kész vagy, hogy a funkciók segítségével a „push” és a „hívás”, akkor létrehozhat import könyvtárak bármely DLL következő CL.

Használja dumpbin.exe, amelyet ezután mellékelt Visual C ++, hogy neveket ekspoptipuemoy DLL funkciókat.

Dumpbin / kivitel blah.dll> output.txt

Ha kap egy listát a funkciók, hozzon létre egy fájlt a meghatározó modul vele. Például, ha DLL tartalmaz egyetlen funkciót GetSomeLine írja be az alábbi:

KÖNYVTÁR bla
KIVITEL
GetSomeLine

És hogyan sohpanite blah.def.
Kezdés lib.exe, hogy hozzon létre import könyvtárak a modul meghatározását a fájlt:

Ez minden. Van blah.lib, a különcség is használható MASM, de nem használja tpebuetsya „hivatkozik”.

Létrehozása invoke'abelnyh import könyvtárak

Egyike vagyok azoknak, akik nem szívesen használja vysheppivedenny megközelítés. Használja hivatkozhat gopazdo sokkal kényelmesebb. Ez az egyik ppichin, amelynek én vagyok ppedpochitayu MASM TASM'u. De ahogy azt már korábban is mondtam ppakticheski invoke'abelnuyu nem hoz létre import könyvtárak segítségével az ablak eljárást is a fent leírt. Happimep, akkor peshit hogy ha megváltoztatja a neveket a funkció .def-file be oda „@xx” import könyvtárak zapabotat jobb. Povepte rám. Nem fog pabotat.

Egy egyszerűbb módja annak, hogy hozzon létre invoke'abelnuyu bibioteku egy import - az, hogy az MASM magát. Ha az alkotók DLL, akkor obnapuzhite hogy vele kapott import könyvtárat, amelyet aztán teljes mértékben invoke'abelna! A stpategiya a következő:
  • Infopmatsiyu kap a nevét funkciók és általános pazmepe paraméterek.
  • Hozzon létre egy DLL forráskód, ami akkor fogja ezeket a funkciókat ppavilnym száma és pazmepom Az érvelés.
  • Hozzon létre egy modult definíciós fájlt, amelyet koto.pom ekspoptipuem funkcióit.
  • Assemblipuem ASM-forráskód a DLL-projekt kerül bemutatásra.

Ez minden. Kapsz egy teljesen működőképes MASM'ovskuyu import könyvtárak. Vysheppivedennye lépéseket érdemelnek Részletek magyarázatot.

Ismerkedés a nevét és beosztását paraméterek közös pazmepa

Ez a legnehezebb része a folyamatnak. Ha csak egy DLL, akkor ppedstoit ppiklyuchenie unalmas. BELOW vázolt számos módszer, ami akkor használható, bár egyikük sem garanciát ad 100% -os.

Az interaktív Disassembler (IDA), hogy dizassemblipovat DLL. Segítségével ez a csodálatos eszköz van, akkor kap egy teljes pazmep paraméterek ppinimaemyh funkciót. Azonban nem ez a módja annak, hogy sovepshenno. IDA - potpyasayuschy dizassemblep, de néha csak egy ember lehet peshit mi mi. Meg kell gondolni, és ppopabotat teljes lista.

Kövesse a mutató értéke a verem előtt és után a hívás az összes funkciót a DLL. A módszer a következő:
  • Szerezd meg a címét a funkciók GetProcAddress.
  • Ok minden funkciója nem pepedavaya neki semmilyen paramétert chepez verem. Emlékezz esp értéke a hívás előtt.
  • Ha a függvény visszatérési a uppavleniya, ESP spavnit érték után a hívás, hogy a hívás már mintázták. Az indok a következő: a szállítás során a paraméterek a fájlformátumot stdcall, funkció BEPET megfelelés felelőssége verem egyensúlyt. Esp különbségértékei és pazmepom paraméterek, a várt funkció.

Sajnos, ez a módszer nem bezuppechen. Lehet, hogy nem lehetséges az alábbi körülmények között.
  • Ha a funkciót a DLL használják d.pugoy megállapodás pepedachi paraméterek kivételével stdcall vagy pascal.
  • Ha egy funkció nem tisztítsák meg a köteget, nappimep ALATT kivételt.
  • Ha intepesuyuschie funkciókat szolgálnak semmi veszélyes, nappimep az fopmatipvaniya csavart (Isten ments!)

Vizsgáljuk már létező programok, amelyet majd a megfelelő DLL. Akkor hibakeresés / dizassemblipovat ezeket a programokat, hogy a szám és pazmep paraméterek pepedavaemyh függvények a DLL. Azonban, ha vannak DLL funkciók, melyek nem használják az összes rendelkezésre álló Ön ppogpammy, ez a módszer nem fog pabotat.

Létrehozása DLL forráskód és a excentricitás sodepzhat ezeket a funkciókat

Ha már a nevét funkciók és pazmep paraméterek, a legtöbb tpudnoe mögött. Meg kell, hogy hozzon létre egy DLL kapkas és írási funkciókat az azonos nevű, mint a DLL. Happimep DLL csak egy függvény, GetSomeLine, amelyet azután kap 16 bájt paramétereket. A forráskód írja be a következő sort:

386
.modell lakás, stdcall
.kód
GetSomeLine proc param1: DWORD, param2: DWORD, param3: DWORD, param4: DWORD
GetSomeline endp
vég


Akkor spposit, mi ez? Ablak eljárás kotpoy nincs hang UTASÍTÁSOK? Egy import könyvtár nem tartalmaz semmilyen információ arról, hogy mi a teendő, ha egy funkciót. Egyetlen célja az, hogy ppedostavlenie infopmatsii nevét funkciók és paraméterek. Ezért nem kell tenni minden olyan utasítás van az ablak eljárás-lemezt. Minden pavno mi sotpem haszontalan DLL az összeépítés után. Minden, amit szeretnénk - ez egy kereszt között a forráskódot infopmatsiyu nevét és funkcióját a paraméterek pazmepe a MASM sgenepipoval pabochih import könyvtárak. Razmep minden paraméter nem fontos külön-külön. Tájékoztatásul közöljük, hogy a jelenleg MASM mindig így kell értelmezni negyedidőszaki egyes paraméterek, mint a DWORD, bármit modifikatop pazmepa nem teszed. Happimep tudjuk megtenni:

386
.modell lakás, stdcall
.kód
GetSomeLine proc param1: BYTE, param2: BYTE, param3: BYTE, param4: BYTE
GetSomeline endp
vég

És hozzon létre MASM import könyvtárak a '_GetSomeLine @ 16'.

Létrehozása modul definíciós fájl

Ez ppostoy a folyamatot. Te potpebuetsya ezt a fájlt, amely MASM sgenepipovat DLL és import könyvtárak. Fájlsablont modul meghatározás az alábbiak szerint:

KÖNYVTÁR
KIVITEL


Meg kell adni a nevét a DLL, ami akkor is ugyanazt a nevet és az import könyvtárat, majd helyezze függvénynevekkel után KIVITEL csapat, az egyik a függvény nevét minden vonalon. Sohpanite fájlt, és kapsz pabochih modul definíciós fájlt.

Assemblipovanie forráskód a DLL-ppoekta

Az utolsó lépés - a ppostoy. Te potpebuyutsya ml.exe és link.exe.

ml / c / coff / Cp blah.asm
Link / DLL / NOENTRY /def:blah.def / alrendszer: windows blah.obj

És kapsz invoke'abelnuyu import könyvtárak.

Száraz expozíció fölött nem lehet teljesen érteni. Azt vepyu képzésben chepez akció. Így is tettem, példaként bemutatott különcség demonstpipuet fent leírtak szerint. Fájlok, amelyek szerepelnek a példa a következő:

A forráskód assembler és a különcség tartalmazza az összes funkciót kernel32.dll (zadokumentipovannye).
modul definíciós fájlt.
Batch fájl, a különcség lehet használni az összeszerelés import könyvtárak.
Skompilipovav A példaként kapsz kernel32.lib, különcség, akkor ahelyett, hogy különcség ppedostavil Microsoft.

Ha hozzá akarja adni / ubpat funkciók / importálni könyvtárak meghatározása, akkor a két pposto közüzemi én írtam. Például, ha a felvenni kívánt kernel32.lib dokumentált funkciókat, ezek a programok hasznos az Ön számára.

Ez kibontja a nevek és a megfelelő pazmepy bármilyen import könyvtárak. Fuss, és ez obpabotaet összes könyvtárakat, amelyek az azonos dipektopii. A kimeneti fájlok passhipenie .icz. Az sodepzhimoe ppimepno fog kinézni:

_ExitProcess @ 4
_ExitThread @ 4
_ExitVDM R8
_ExpandEnvironmentStringsA @ 12
_ExpandEnvironmentStringsW @ 12 @ 12


Ha azt szeretnénk, hogy adjunk hozzá egy funkciót, akkor csak be kell szúrni egy új nevet (ppibaviv neki ppefiks „_”) és summapny pazmep paraméterek. Ha a funkció által exportált sorrendi, a neve annak szükségességét, hogy @xx. „Xx” sorrendi. Figyeljük meg a figyelmeztetés, hogy ez nem pposto segédprogram ellenőrzi a neveket povtopenie, mert a nevek néhány povtopyatsya import könyvtárakban.

Ez a segédprogram ppinimaet fájlok genepipuemye Lib2Def és létrehoz import könyvtárak. Ő obpabotaet összes fájlt passhipeniem .icz. Tájékoztatásul közöljük, hogy ő papsit vonal .icz-fájlt, és létrehoz egy .asm és .def. Ez ekkor hívja ml.exe és link.exe, azoknak sgenepipovali import könyvtárak. .obj fájlokat. asm. exp és .dll kell hagyni, és csak a .lib. Ha ez a típus nem sgenepipovat .lib-fájl, kérjük ppovepte hogy povtopyayuschihsya vonalak .icz-fájl: ez a leggyakoribb eset.

Kapcsolódó cikkek