|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 2, 2004 02:23:57 Есть такая проблема. Долгое время программировал на tasm и он меня полне устраивал, но к сожалению последний наверное забыт Borland'om и практически не развивается и я столкнулся с проблемой, когда стал писать драйверы для NT, а именно с tlink32. Последний во-первых вместо контрольной суммы записывает нули, во-вторых формат даты создания (TimeDateStamp) у Borland'да не такой как у Microsoft, а в-третьих очень трудно добиться нужных атрибутов дла каждой секции в файле, но есть неоспоримое приимущество - отсутсвие зависимости от *.lib файлов - импорт функций в файле *.def, даже не зная числа и типа параметров передаваемых функции. Кроме того терпеть не могу invoke и proto, хоть режте (это уже не ассемблер а C++ какой-то получается), ну не позволяет она вольности со стеком, когда заранее сформировав стек можно вызывать несколько фунций за один раз. Есть ли какое решение, а то editbin от Microsoft (DDK) уже надоело пользоваться. Если у кого-нубудь есть примеры на asm, по этому поводу буду признателен. Да еще С Новым Годоь всех. |
|
|
Дата: Янв 2, 2004 02:33:13 ну не позволяет она вольности со стеком, когда заранее сформировав стек можно вызывать несколько фунций за один раз. А что мешает использовать call напрямую? |
|
|
Дата: Янв 2, 2004 02:46:08 Особых проблем не вижу. Мне тоже было трудно перейти на мл, а теперь на тасм и смотреть не хочется. Invoke и proto использовать вовсе не обязательно, ежели хочется сократить пару байт! Тогда нужно задавать аргументы как и в тасме, push'ем. Для получения нужных импортов, видимо, есть несколько способов, мне удобнее всего пользовать Inc2l.exe из пакета masm32. Смотри \masm32\INCLUDE\Bldlibs.bat, там все написано. |
|
|
Дата: Янв 2, 2004 02:50:20 Между прочим, масм как правило, прекрасно съедает программу, написанную для тасм. |
|
|
Дата: Янв 3, 2004 00:31:07 Хорошо - тогда такая ситуация: У Вас есть библиотека, название которой вы знаете, знаете имя нужной вам функции, но она находится на другом компьютере в сети, и скачать ее на ваш невозможно, Inc2l.exe сразу отпадает, а вот описать импорт в файле *.def в секции IMPORTS вполне можно, даже не зная числа и типа аргументов, к сожалению именно эту секцию Microsoft link.exe игнорирует, masm(ml) сдесь не причем, он работет исправно. Тогда нужно задавать аргументы как и в тасме, push'ем. Приведи пример пожалуйста, причем самое главное как потом этот файл из obj перевести в exe. |
|
|
Дата: Янв 3, 2004 00:56:08 · Поправил: Grenader PROFi Есть простой способ: "LIB.EXE /out:ntdll.lib /def:ntdll.def/machine:ix86 /subsystem:windows". - и на выходе полноценный мелкосовтский LIB, получаемый из произвольного DEF :) И все! правда, возникнет проблема с именами (искажение имен), но она решается указанием в прототипе функции языка. |
|
|
Дата: Янв 3, 2004 01:09:09 Grenader А какой должен быть ntdll.def Для tlink32 к примеру я использую: файл ntdrv.def ... IMPORTS 'ntoskrnl.exe'.DriverLoad ... И на выходе в exe - шнике функция DriverLoad импрортируется из ntoskrnl.exe (а не ntoskrnl.dll) А насчет Invoke и proto я уже сказал, что терпеть их не могу. Лучше extrn DriverLoad:PROC |
|
|
Дата: Янв 3, 2004 01:18:48 · Поправил: Grenader деф должен быть примерно таким: LIBRARY NTDLL.DLL EXPORTS CsrAllocateCaptureBuffer @10 можно использовать для его генерации борландовскую прогу IMPDEF.EXE. Я такжже приаттачил ntdll.lib - сделанный именно таким способом, глянь. И еще - может, проще будет перейти на FASM? |
|
|
Дата: Янв 3, 2004 01:21:41 |
|
|
Дата: Янв 3, 2004 01:27:21 · Поправил: PROFi Grenader А если ты не знаешь сколько параметров принимает функция, и библиотека набример kerberos.dll находится на сервере фирмы, и скачать ее не возможно. CsrAllocateCaptureBuffer @10 <- т.е. @10 я не знаю, может быть это и @4, а может и @20 |
|
|
Дата: Янв 3, 2004 01:30:32 PROFi а какая разница-то? ты же все равно invoke не используешь! по этой либе будет сгенерирована валидная секция импорта - то, что тебе и нужно. |
|
|
Дата: Янв 3, 2004 01:36:21 Grenader Все спасибо, понял, т.е. формируем свой lib. А как должны выглядеть имена функций в файле asm, если использовать extrn или public ? |
|
|
Дата: Янв 3, 2004 01:40:11 PROFi вот пример кода - это просто пример: .486 .model flat, stdcall option casemap:none includelib kernel32.lib includelib ntdll.lib ExitProcess proto C :dword NtOpenSection proto C :dword, :dword, :dword public TTT .code _start: invoke NtOpenSection, 0, 0, 0 invoke ExitProcess, 0 end _start |
|
|
Дата: Янв 3, 2004 01:51:48 Grenader А если надо: push offset NextCode push 0 push offset ExitProcess push 0 push 0 push 0 jmp NtOpenSection ... NextCode: ... ну сюда не попадем - только для примера Как мне описать функции ExitProcess и NtOpenSection extrn ExitProcess:PROC или extrn ExitProcess@4:PROC |
|
|
Дата: Янв 3, 2004 02:01:26 это уже несколько не по теме - я просто не знаю всех извратов масма... попробуй и так, и сяк. важно написать "... PROC C" - дабы линкер правильно разобрался с искажением имен |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.092 |