· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› tlink32 -> ml

. 1 . 2 . >>

Посл.отвђт Сообщен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

вот файл

450935542__ntdll.zip


Дата: Янв 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" - дабы линкер правильно разобрался с искажением имен

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.092