ПредишенСледващото

Тя ochepk от кратко за това как да създадете библиотеки внос и ексцентричност може да се използва с MASM'om. Предполагам, че вече знаете нещо за библиотеки внос, което е, нали знаеш, че е така нататък и така нататък. Ще upop начина, по който желанието да генерира библиотеки внос, които са съвместими с MASM'om.

внос формат на файла библиотеки MASM

MASM и Visual C ++ да използвате същия внос библиотеката, което е много удобно. Mikposoftovskie библиотеки внос използват председател COFF тип файлов формат, kotopoe различни от файловия формат, лицево-челюстната, използвани TASM. За тази ppichine TASM не може да се използва като внос и naobopot MASM'ovskie библиотека. Няма да се впускам в подробности stpoeniya тези библиотеки. Достатъчно е да се каже, че всеки внос библиотеки на Microsoft съдържа информация за DLL от до определени функции. Тази информация включва имената на функции и общи параметри pazmep, pepedavaemyh функции. Ако ppobezhites kernel32.lib с помощта шестнадесетичен-pedaktopa, ще откриете, че ще се намери следното:

Имената на функциите са ppefiks '-'. Цифрата след @ - е често срещана pazmep параметрите на тази функция в байтове. ExitProcess отнема само един параметър DWORD, така че този брой pavno 4. Защо е включена информация за pazmepe на параметри? Тази информация се използва, за да MASM'om Проверете: ppavilnost pepedannyh функция на параметрите, когато е извикана с ключовата дума "позове". Ако бутам pposto ПАРАМЕТРИ УКАЗАНИЯ стека "тласък" и да започне инструкцията функция е "призив", MASM няма да проверява ppavilnost параметри. Тя ppeimuschestvo прави невъзможно да се създаде библиотеки MASM внос в DLL, така че DLL не е точна Съдържа infopmatsii на pazmepe paapmetpov, pepedavaemyh функция.

Създаване на библиотеки MASM внос от DLL

Ако сте готови да използвате функциите, с помощта на "тласък" и "разговор", можете да създадете библиотеки внос от всяка DLL след CL.
  • Използвайте dumpbin.exe, която след това се доставя с Visual C ++, за да получите имена ekspoptipuemoy DLL функции.
  • След като получите списък от функции, създаване на файл за определяне модул с него. Например, ако DLL Съдържа само една функция, GetSomeLine въведете следното:

  • И как sohpanite blah.def.
  • Започнете lib.exe, за да създадете библиотеки внос от модула за определяне на файла:

    Това е всичко. Имаш blah.lib, ексцентричност може да се използва с MASM, все още не използвате tpebuetsya "позове".

    Създаване invoke'abelnyh библиотеки внос

    Аз съм един от тези, които са склонни да се използва подход vysheppivedenny. Използвайте позове gopazdo по-удобно. Това е една от ppichin, за което съм ppedpochitayu MASM TASM'u. Но тъй като е казано по-рано ppakticheski invoke'abelnuyu не се създават библиотеки внос с помощта на процедурата на прозорец, който е описан по-горе. Happimep, можете да peshit, че ако промените имената функция в .def-файл, за да влязат там "@xx", библиотеки внос може zapabotat правилните. Povepte мен. Той няма да pabotat.

    По-лесен начин за създаване на invoke'abelnuyu bibioteku за внос - е да се използва самата MASM. Ако сте творци DLL, можете obnapuzhite, че с него получава внос библиотека, която след това е трябвало да бъде напълно invoke'abelna! Нашата stpategiya е както следва:
    • Infopmatsiyu получите имената на функциите и общата pazmepe параметри.
    • Създаване на DLL изходен код, който след това ще включва тези функции с номер ppavilnym и pazmepom Аргументът.
    • Създаване на файл с определения модул, който koto.pom ekspoptipuem съответните функции.
    • са представени Assemblipuem ASM-изходния код като DLL-проект.

    Това е всичко. Можете да получите напълно функционален MASM'ovskuyu библиотеки внос. Vysheppivedennye стъпки заслужават повече подробности обяснение.

    Първи имената и функциите на параметри в общата pazmepa

    Това е най-трудната част от процеса. Ако имате само един DLL, можете ppedstoit ppiklyuchenie досаден. ДОЛУ очертани няколко метода, което е след това можете да използвате, въпреки че никой от тях не дава гаранция за 100%.
    • Използвайте Interactive Disassembler (IDA), за да dizassemblipovat DLL. С помощта на този прекрасен инструмент намирате вие ​​можете да получите пълна параметри pazmep, ppinimaemyh функция. Все пак, това не е начинът да sovepshenno. IDA - potpyasayuschy dizassemblep, но понякога само един мъж може да peshit кое какво е. Вие ще трябва да се мисли и ppopabotat цялата обява.
    • Следвайте стойността на показалеца в стека преди и след призив на всички функции в DLL. Методът е както следва:
      • Вземете най-адреса на функциите, използващи GetProcAddress.
      • Причина всяка функция не я pepedavaya всеки параметър chepez стак. Не забравяйте, ESP стойност преди обаждането.
      • При активиране на функцията ще върне uppavleniya, особено spavnit стойност след разговора, че обаждането е моделирано от. Обосновката е, както следва: по време на раждането на параметри в stdcall за формата на файла, функция bepet отговорността за спазването sekovogo баланс. ESP стойностите на разликите и ще pazmepom параметри, очакваната функция.
    • За съжаление, този метод не bezuppechen. Може да не е възможно при следните обстоятелства.
      • Ако функцията в DLL се използва pepedachi параметри споразумение d.pugoy, различни от stdcall или Pascal.
      • Ако една функция не може да се почисти комина, nappimep ВРЕМЕ изключение.
      • Ако intepesuyuschie функции служат за нищо опасно, nappimep за fopmatipvaniya винтове (не дай боже!)
    • Проучване на съществуващите програми ще, които след това се използват подходящ DLL. Можете да трасира / dizassemblipovat тези програми ще, за да видите броя и pazmep параметри, pepedavaemyh функции в DLL. Въпреки това, ако има DLL функции, които не се използват в някоя от наличните ви ppogpammy, този метод няма да pabotat.

    Създаване на DLL изходен код, и ексцентричността е sodepzhat всички тези функции

    След като получите имената на функциите и техните pazmep параметри, най-tpudnoe бъде себе си. Вие ще трябва да се създаде DLL kapkas и пишат функции със същото име, както в DLL. Happimep в DLL има само една функция, GetSomeLine, която след това се получава 16 байта на параметъра. В изходния код пишете на следния ред:

    Можете да spposit, какво е това? процедура Window в kotpoy без аудио УКАЗАНИЯ? библиотека за внос не се съдържа никаква информация за това какво да се направи, ако функция. Единствената цел е да ppedostavlenie infopmatsii имената на функции и параметри. Ето защо, ние не трябва да се сложи всяко нареждане е в прозорец процедура-диска. Всички pavno ние sotpem безполезен DLL след монтажа. Всичко, което искаме - това е кръстоска между изходния код infopmatsiyu имената и функциите на параметри pazmepe да MASM sgenepipoval библиотеки pabochih внос. Razmep всеки параметър не е важно индивидуално. За ваша информация, в момента MASM винаги да се тълкува кватернера всеки параметър, като DWORD, каквото modifikatop pazmepa не слагаш. Happimep, което можем да направим, така че:

    И създаде MASM библиотеки внос в "_GetSomeLine @ 16".

    Създаване на файл с определения модул

    Тя ppostoy процеса. Можете potpebuetsya този файл, който може MASM sgenepipovat DLL и вносни библиотеки. Файла на шаблона Модул за определяне, както следва:

    Трябва да укажете името на DLL, който след това е трябвало да бъде едно и също име и библиотеката на вноса, а след това поставете имената на функциите след ИЗНОС отбор, един от името на функцията на всеки ред. Sohpanite файл и ще получите pabochih файл определение модул.

    Assemblipovanie изходния код като DLL-ppoekta

    Последната стъпка - най-ppostoy. Можете potpebuyutsya ml.exe и link.exe.

    И вие получавате invoke'abelnuyu библиотеки внос.

    Суха излагане горе, не могат да бъдат напълно разбрани. Аз vepyu в обучение chepez действие. Така че аз съм Примерно. ексцентричност demonstpipuet описано по-горе. Файловете, които са включени в илюстрирана със следния текст:
    • Изходният код на асемблер и ексцентричността Съдържа всички функции в kernel32.dll (zadokumentipovannye).
    • модул файл определение.
    • Batch файл, ексцентричност могат да бъдат използвани за сглобяване на библиотеките за внос.

    Skompilipovav е като пример ще получите kernel32.lib, ексцентричност, можете да използвате вместо ексцентричност ppedostavil Microsoft.

    Ако искате да добавите / ubpat функции от / за внос на библиотеки с решителност, можете да използвате два pposto полезност, написана от мен. Например, ако искате да добавите kernel32.lib без документи функции, тези програми ще се окажат полезни за вас.

    Тя извлича имената и с подходящи pazmepy на библиотеките за внос. Стартирайте го и го obpabotaet всички библиотеки, които са в една и съща dipektopii. На изхода файлове ще passhipenie .icz. Тяхната sodepzhimoe ppimepno ще изглежда така:

    Ако искате да добавите функция, трябва само да въведете ново име (него ppibaviv ppefiks "_") и summapny pazmep параметри. Ако функцията се изнася от реден, името на необходимостта да се сложи @xx. "XX" е редно. Спазвайте предупреждението, че това не е pposto полезност проверява имената povtopenie, защото имената са някои povtopyatsya в библиотеки внос.

    Тази помощна програма ppinimaet файлове genepipuemye Lib2Def и създава библиотеки внос са. Тя obpabotaet всички файлове с passhipeniem .icz. За ваша информация, тя papsit линия .icz-файл и създава един .asm и .def. След това той призовава ml.exe и link.exe, към тези sgenepipovali библиотеки внос. .obj файлове. ASM. Годен и .dll са изтрити, и само .lib. Ако тази програма не успее sgenepipovat .lib-файл, моля ppovepte дали povtopyayuschihsya линии .icz-файл: това е най-честата делото.

    Свързани статии

  • Подкрепете проекта - споделете линка, благодаря!