Сейчас на форуме: Alf, Adler, Rio, vsv1, site-pro (+8 невидимых)

 eXeL@B —› Софт, инструменты —› WAsm и структуры
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 12 июля 2016 23:58
· Личное сообщение · #1

Задавал этот вопрос на WASM.RU, но там глухо, так что попытаю счастья здесь. Если кто юзал ваткомовский ассемблер, подскажите, способен ли он работать со структурами или только одна видимость? Объясняю ситуацию. Компилю нижеследующий тестовый код:
Code:
  1. .386
  2. .MODEL FLAT
  3. IDEAL
  4.  
  5. STRUC MyType
  6.          Field1 dd ?
  7.          Field2 db ?
  8. ENDS
  9.  
  10. SEGMENT _DATA DWORD
  11.  
  12. MyVar MyType <1,1>
  13.  
  14. ENDS
  15.  
  16. SEGMENT CODE PARA
  17.  
  18. PROC TestProc
  19.          movzx   eax, [MyVar.Field2]
  20.          ret
  21. ENDP
  22.  
  23. ENDS
  24.  
  25. PUBLIC TestProc
  26.  
  27. END
, подключаю изготовленный объектник к проекту на Делфи… и получаю шиш с маслом: после генерации экзешника в map-файле переменная отсутствует, а дизасм показывает, что она находится по адресу 00000004, т.е. смещение поля в структуре транслятор обработал правильно, а саму переменную почему-то забыл. При компиляции этого же кода TAsm'ом, адрес получается валидным. Если же написать просто "MyType <1,1>" или "MyType {}", то вообще происходит выход с зксцепшном по AV. Может есть какой-нибудь нюанс, очень уж мне понравился этот транслятор – в режиме эмуляции 'Ideal', синтаксис действительно идеальный в отличие от самого TAsm'а. Очень будет обидно, если фичи фейковые, а о копании в потрохах TAsm'а я даже думать боюсь.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 13 июля 2016 01:05 · Поправил: dosprog
· Личное сообщение · #2

Про WASM не скажу ничего, ни плохого, ни хорошего.
Если имеется в виду Watcom Assembler, то популярность он приобрёл во времена DOS-расширителей, которые сейчас канули.

А вот о TASM'е самые хорошие отзывы. Хотя и не пользовался никогда тем режимом IDEAL, из эстетических соображений совместимости с MASM'ом, которые себя вполне оправдали.

В описываемом случае - так TASM самое то, что надо, это ж одна фирма Борланд.
Это так же естественно, как и MASM с MSVC.

В общем, я бы TASM'а не пугался. Это было любимое детище Борланда, и основа всех его основ.
Действительно, программа классная. Только вот сейчас некоторые вещи всёже удобней делать в MASM'е, так получилось.
Большие были претензии к борландовскому линкеру для WIN32..





Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 13 июля 2016 01:29
· Личное сообщение · #3

>> Если имеется в виду Watcom Assembler

Он самый.

>> В общем, я бы TASM'а не пугался.

Да я не TAsm'а пугаюсь (потихоньку перегоняю на него некоторые подпрограммки с встроенного в делфи асма), а ковыряния в его бинарнике. Дело в том, что по непонятным причинам (контора-то одна) его синтаксис не полностью совместим со встроенным вариантом – он ругается на форму обращения к памяти "byte/word/dword [<expression>]" и требует, чтобы модификатор размера операнда находился внутри скобок, но это ушлёпно и алогично.

>> Действительно, программа классная.

По текущим впечатлениям согласен, но всё портит вышеописанный момент.



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 13 июля 2016 09:45
· Личное сообщение · #4

А не пробовали случайно смотреть в сторону jwasm - это продолжатель wasm. Возможно с ним у Вас всё получится. Попробовал собрать Ваш семпл сверху и что-то скомпилировалось:

Code:
  1. .386
  2. .MODEL FLAT
  3. MyType STRUC
  4. Field1 dd ?
  5. Field2 db ?
  6. MyType ENDS
  7.  
  8. .DATA
  9. MyVar MyType <1,1>
  10. .CODE
  11. TestProc PROC
  12. movzx   eax, [MyVar.Field2]
  13. ret
  14. TestProc ENDP
  15. PUBLIC TestProc
  16. END


-----
все багрепорты - в личные сообщения





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 13 июля 2016 10:32 · Поправил: mak
· Личное сообщение · #5

Linking Assembly Language with Delphi Part I --> Link <--
How to use Assembly Language with Delphi 32-bit and 64-bit --> Link <--
Linking Assembly Language with Delphi Part II --> Link <--

Примеры с реальным рабочим кодом. Зачем использовать старые ассемблеры? Для сегодняшних нужд в сторону масм компатибельности есть обновленный masm32, с поддержкой новых инструкций и от ваткома продолжение проекта JWASM, где исправлены ошибки, проведены тесты на оптимизацию, сделаны дополнительные макросы и ещё множество плюшек в том числе полная поддерджка 64 битных макро инструкций идентичного masm ...
Сайт HJWasm ассемблера - --> Link <--
гитхуб - --> Link <--

Со структурами здесь всё работает отлично.

П.С. Проект с делфи надо было выложить ...

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube


| Сообщение посчитали полезным: elch, plutos, HandMill

Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 13 июля 2016 17:12
· Личное сообщение · #6

HandMill

>> А не пробовали случайно смотреть в сторону jwasm

"Отвернулся", когда прочитал в описании, что синтаксис MASM'овый.

mak

По всем трём ссылкам я уже бывал, ничего нового там не увидел – пособие для блондинок и не более того. Меня очень смущает, что проблема с WAsm'ом только у меня одного. Ещё больше удивляет, что на целом одноимённом сайте все молчат как рыбы.

>> в сторону масм компатибельности есть обновленный masm32

Мне напротив нужна инкомпатибельность с MASM'ом. Кстати, MASM32 – это не транслятор, а сборник, в который входит старый MASM, POASM, куча утилит и нклюдов. Всё это бесполезное барахло давным давно валяется у меня на диске.

>> П.С. Проект с делфи надо было выложить…

Там нечего выкладывать. Обёртка над "printf", принимающая результат функции из прилинкованного объектника, да "ExitProcess". DCC тут ни при чём, т.к. ошибка возникает на этапе компиляции. Может я что-то неправильно делаю, только вот посмотреть негде – мануала по WAsm'у похоже не существует в природе.

Я тут решил NAsm погонять с этой же задачей и тут тоже засада именно со структурами: ладно бы просто через жопу сделали, так оно ещё и не работает… ну как не работает, компилится-то нормально, а вот при линковке DCC ругается на 16-битный сегмент, который NAsm на кой-то хер добавляет в объектник. Похоже, что придётся остановиться на TAsm'е, и смириться с нелепой формой обращения к памяти – поковырял экзешник, нихрена не понял, как там всё устроено… А ведь его вроде кто-то патчил в своё время на предмет добавления новых инструкций.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 13 июля 2016 18:20 · Поправил: dosprog
· Личное сообщение · #7

А какие именно новые инструкции добавлялись в тот патченный TASM?

Пока последнее, что было по TASM'у - слыхал о версии 5.3, 2000-го года, официальная версия.
Наверное, это она и имелась в виду.



Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 13 июля 2016 19:41 · Поправил: FalseMaster
· Личное сообщение · #8

dosprog

>> Наверное, это она и имелась в виду.

Похоже на то. А команды, судя по всему, MMX – --> Link <--



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 13 июля 2016 21:12 · Поправил: dosprog
· Личное сообщение · #9

Про директиву PUBLIC доводилось слыхать? - Пример: 39f3_13.07.2016_EXELAB.rU.tgz - MyVar.rar

Там на самом деле есть другой серьёзный изъян - глобальность имён членов структур.





Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 15 июля 2016 02:36 · Поправил: FalseMaster
· Личное сообщение · #10

dosprog, что-то я тебя не пойму – ты сам злонамеренно объявляешь идентификаторы как "PUBLIC", а потом удивляешься делу рук СВОИХ. По хорошему конечно компилер должен бы посылать в таком случае, но смею предположить, что сей "пофигизм" обусловлен стремлением (вполне обоснованным) разрабов увеличить скорость компиляции.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 15 июля 2016 02:53 · Поправил: dosprog
· Личное сообщение · #11

FalseMaster пишет:
dosprog, что-то я тебя не пойму – ты сам злонамеренно объявляешь идентификаторы как "PUBLIC", а потом удивляешься делу рук СВОИХ.


) Я тоже тебя не пойму.
Где это я удивлялся? - Всё сделано в строгом соответствии (почему это "злонамеренно"?..) , и результат ожидаемый.


В общем, мы не понимаем, о чём речь


--Добавлено--
.. желаем расшарить адрес структуры - в PUBLIC её.
Хотим расшарить смещения в ней её членов - то же самое.
Всё нормально

За исключением вышесказанного в предыдущем посте. Издержки.

Так это работает





Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 30 июля 2016 04:41
· Личное сообщение · #12

>> желаем расшарить адрес структуры
>> Хотим расшарить смещения в ней её членов
>> Всё нормально

Может оно конечно и нормально (нормы-то у всех свои), но совершенно необъяснимо. На кой чёрт расшаривать константы, рассчитываемые во время компиляции (смещения), а тем паче круглый ноль (адреса структур)? По мне так это какая-то редкая девиация. Ну да ладно, как говорится, каждый дрочит как хочет. Ты вот, если такой любитель TAsm'а, подскажи лучше, можно ли как-нибудь расшаривать функции/переменные/метки под другим именем? То же касается и директивы EXTRN. Это требуется в случае, когда внешнее или видимое извне имя содержит недопустимые символы или является зарезервированным словом. У меня имеется мануал по TAsm'у, но я там что-то ничего не нашёл по этому вопросу, может плохо искал – в PDF неудобно.



Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 26 марта 2017 04:26
· Личное сообщение · #13

dosprog, если ты ещё живой, отзовись, дело к тебе есть.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 26 марта 2017 10:07 · Поправил: dosprog
· Личное сообщение · #14

Та пока живой типа



Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 27 марта 2017 02:45 · Поправил: FalseMaster
· Личное сообщение · #15

Я вот чего хотел-то. Ты в прошлый раз обмолвился, что юзаешь TAsm и мне советовал (аргументированно) на нём остановиться, что я и сделал. И мало помалу проникся к сему продукту; несмотря на древность, глючность и говнокод есть в нём какая-то необъяснимая ламповость. Теперь о недостатках. Их обнаружилось два и оба для меня неприемлемые. Об одном я уже упоминал – извратная форма обращения к операндам в памяти, а второй – слияние одноимённых сегментов (но надо сказать, этим грешны все известные мне трансляторы (с MASM'ом отдельная история)). И поскольку альтернативы я не видел, а смириться с таким положением дел не мог по причине зашкаливающей привиредливости, то переборов неуверенность в своих силах, рискнул запилить в многострадального необходимые мне фичи. Но вот как-то сразу не заладилось – два раза выбирал неверную стратегию окостыливания, да и в самом коде допускал много ошибок, что проявлялось по мере пользования. Собственно просьба моя заключается в том, чтобы занятый кованием железа народ всё бросил и переключился на пристрастное тестирование моей поделки (получается именно так, чего уж тут скрывать), а поскольку ты сам назвался груздем, то стал первым и пока единственным кандидатом на полезание в короб. Мне не влом тестить самому, но для выявления всех нежданчиков требуются проекты более сложные, нежели состоящие из нескольких SEGMENT/ENDS и PROC/ENDP с FLAT моделью памяти. У меня таких нет, да и знаний недостаточно – я ведь использую TAsm лишь в кач-ве подспорья, а основной компиль дельфовый. В коденье под DOS я вообще полный нуб – за всю жизнь только раз бездумно скомпилил несколько строк чужого кода. В общем, если время позволяет, окажи любезность. Кое-что я уже и сам выявил… ну как выявил, это было сразу ясно: из-за принудительной раздельной сегментации директивы ASSUME, GROUP и SIZE перестали принимать имена сегментов (кроме встроенных), т.к. перед разбором строки производится переименование, но осталась лазейка в виде макроса @curseg. Вот ссыль на костыль.
UPD: Ах да, забыл сказать, фичи работают только в режиме IDEAL.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 27 марта 2017 08:40 · Поправил: dosprog
· Личное сообщение · #16

А есть оригинальный непопорченный файл TASM32.EXE v.5.4?
И желательно к нему также tLink32.EXE и iLink32.exe.

Были две версии TASM 5.4
---------------------------------------------------------------------
TASM 5.4 © 1988, 2009 CodeGear
tasm32.exe 188,416 bytes (184k) / md5=78c9a9bfa1203745b08c0129e07053db / date=1/14/2009 12:03pm (from C++Builder RAD Studio 2009)

TASM 5.4 © 1988, 2010 Embarcadero Technologies, Inc.
tasm32.exe 194,936 bytes (190k) / md5=4ffa43fb80e81c962cee8521c6fe715a / date=12/7/2013 4:55pm (from C++Builder RAD Studio12 XE5)
---------------------------------------------------------------------

В архиве я увидел файл размером 187'392 от 23-Jan-2013, 2:55:00.


Или сперва нужно отмотать правки по файлу !patch.txt для отмены инжекта библиотеки, а потом реверснуть библиотеку Tasm32.bin, чтобы глянуть, какие правки делались в Tasm'e при загрузке той библиотеки? Там только правки, и никакого функционала.
Отмотать-то можно, но при этом не удастся полностью адекватно восстановить исходный файл.

Почему было не сделать это по-человечески?
Обычно есть хорошая DOS-команда "C>FC /b", с помощью которой можно получать листинг правок.

По врезанию загрузок всяких приблудных библиотек -
Там есть стаб, который ты не заметил - загружает 32rtm.EXE при запуске в реальной DOS.
А приблудная DLL имеет такой стаб? - И как оно должно работать, по-твоему?

Это что, типа квест такой? - На всякий случай - в квестах я не участник.

Дальше.
Если возникают вопросы, то уместны были бы файлы с текстами программ, на которых эти вопросы возникли.

У меня имеется TASM32 v.5.2 с TLINK32 2.0.68, которые поправлены в нужных мне местах, и они меня устраивают.
Ни к форме адресации, ни к политике слияния одноимённых сегментов у меня вопросов кагбы никогда не возникало.





Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 27 марта 2017 13:07 · Поправил: FalseMaster
· Личное сообщение · #17

>А есть…
>И желательно…
Не понимаю, зачем они тебе, но если уж так надо, держи, не жалко --> Link <-- (всё что есть).

>В архиве я увидел…
Это из XE3, но с почиканной на всякий пожарный security table.

>…реверснуть библиотеку Tasm32.bin, чтобы глянуть, какие правки делались в Tasm'e при загрузке той библиотеки?
Нафига такие сложные ходы сферическим конём? Я тебе исходник могу дать, только опять же зачем?

>…можно получать листинг правок.
Файл !Patch.txt я для себя чиркнул, не обращай на него внимания.

>И как оно должно работать, по-твоему?
Мне как-то не пришло в голову кодить в 2017 году под чистым DOS'ом, хотя их есть у меня (на случай неожиданного вендекапца). Щас запустил в DOS Box'e – не пашет: говорит, что не может найти точку входа в одну из функций, импортируемых из Kernel32.dll, но и с оригинальной версией та же байда.

>уместны были бы файлы с текстами программ
Так вот я как раз и расчитывал, что ты или кто другой погоняет окостыленный мною TAsm на проектах, где используются все его возможности, дабы выявить побочные эффекты, недоработки и баги моего патча.

>…поправлены в нужных мне местах, и они меня устраивают.
>Ни к форме адресации, ни к политике слияния одноимённых сегментов у меня вопросов кагбы никогда не возникало.
Интересно рассуждаешь. Т.е. тебе можно корёжить софт под себя, а другим нельзя что ли?

| Сообщение посчитали полезным: dosprog

Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 27 марта 2017 13:42 · Поправил: dosprog
· Личное сообщение · #18

Ну, более/менее прояснилась ситуация.
1)
Оверлей с цифровой подписью отрезан - верно.
2)
Чексумма обнулена - верно.
3)
Присобачена подгрузка библиотеки, которая патчит код при запуске - не верно.
Такие вещи нужно делать обычным статическим патчением.
Кстати, в чистой DOS такое уже не работает, хотя в оригинальном виде работает нормально,
только, дейставительно, ругается на одну отсутствующую импортную функцию.
4)
Не совсем понял, откуда в патченной версии взялись хинты импортных функций, если в оригинальном файле их не было, - ну то такое. (Или они в оригинале были?? Тогда "оригинальный" файл тоже был поковырянный).

Дальше посмотрю, как только будет время.

Апдейты TASM 5.4 - Спасибо, то, что надо. (Хотя чексуммы и не совпадают с теми, что указаны в прошлом посте. Файлы ковыряли).
Они этот RAD закрутили так, что без полной его установки оттуда ничего не вытащить,
не хотелось связываться с эти головняком.



--Добавлено--

Интересно было бы увидеть комментарии по вот этим патчам (ORIGINAL.CRK) -
Например, патч .0042192B: выглядит явно стрёмным.
Остальное надо смотреть.
То, что не указано в файле ORIGINAL.CRK, более/менее понятно.

Файл ORIGINAL.CRK:
Code:
  1. TASM 5.4
  2. Size 194'424 bytes
  3.  
  4. Some fixings
  5. tasm32.exe
  6. .004038CA: E3 92 
  7. .004038CB: 02 D7 
  8. .004038CC: 00 FE 
  9. .004038CD: 00 FF 
  10. tasm32.exe
  11. .00404012: 20 40 
  12. tasm32.exe
  13. .0040712F: C8 0C 
  14. .00407130: 48 21 
  15. .00407131: 42 3F 
  16. tasm32.exe
  17. .00409B17: 66 E8 
  18. .00409B18: FF 24 
  19. .00409B19: 0D 75 
  20. .00409B1A: C2 FE 
  21. .00409B1B: A7 FF 
  22. .00409B1C: 42 66 
  23. .00409B1D: 00 90 
  24. tasm32.exe
  25. .00409B99: 66 E8 
  26. .00409B9A: FF A2 
  27. .00409B9B: 0D 74 
  28. .00409B9C: C2 FE 
  29. .00409B9D: A7 FF 
  30. .00409B9E: 42 66 
  31. .00409B9F: 00 90 
  32. tasm32.exe
  33. .00409BEC: 66 E8 
  34. .00409BED: FF 4F 
  35. .00409BEE: 0D 74 
  36. .00409BEF: C2 FE 
  37. .00409BF0: A7 FF 
  38. .00409BF1: 42 66 
  39. .00409BF2: 00 90 
  40. tasm32.exe
  41. .0040CE3A: 11 E2 
  42. .0040CE3B: 12 47 
  43. .0040CE3C: 00 FE 
  44. .0040CE3D: 00 FF 
  45. tasm32.exe
  46. .0040D221: 2A 2B 
  47. .0040D222: 0E 44 
  48. .0040D223: 00 FE 
  49. .0040D224: 00 FF 
  50. tasm32.exe
  51. .004108A7: 87 66 
  52. .004108AE: DB 90 
  53. tasm32.exe
  54. .0042192B: 00 80    ;; ??? ASCII=0A7 char ;??Russian 'г'???
  55.  




Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 27 марта 2017 15:10 · Поправил: FalseMaster
· Личное сообщение · #19

>Такие вещи нужно делать обычным статическим патчением.
Не вижу логики. В моём решении библа подрубается и в нескольких местах сплайсит код, вставляя прыжки на мои обработчики, сорцы которых скомпиленны одним нажатием клавиши. Всё легко и просто. Ты же предлагаешь добавлять в патчимый бинарь две секции (код/данные), копировать в них содержимое TAsm.bin и лапками править смещения. Причём делать это придётся многократно… хотя нет, после нескольких таких экшенов поедет крыша, возможно даже навсегда.

>в чистой DOS такое уже не работает, хотя в оригинальном виде работает нормально, только, дейставительно, ругается на одну отсутствующую импортную функцию.
Работает до тех пор, пока эта отсутствующая функция не будет вызвана, ибо в соответствующем чанке IAT у нас адрес специально предусмотренной для такого случая заглушки.

>откуда в патченной версии взялись хинты импортных функций
Отсюда.

>Файлы ковыряли
Нет же. У тебя TAsm'ы из D2009 и XE5, а те что в моём архиве – из XE и XE3. Само собой, что контрольные суммы отличаются.

>Они этот RAD закрутили так, что без полной его установки оттуда ничего не вытащить
Ох, не напоминай. Аж поплохело, как вспомнил тот кошмарный день (день генеральной уборки в реестре и на харде).

UPD:
>Например, патч .0042192B: выглядит явно стрёмным.
Этот патч разрешает использование в идентификаторах символа '§' (UPD: изменено в следующих версиях), служащего разделителем имени сегмента и присобаченного индекса для того чтобы отсекать этот самый индекс при записи имени в буфер с полуфабрикатом создаваемого объектника. Не вижу ничего стрёмного.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 27 марта 2017 15:10 · Поправил: dosprog
· Личное сообщение · #20

FalseMaster пишет:
что ты или кто другой погоняет окостыленный мною TAsm на проектах, где используются все его возможности, дабы выявить побочные эффекты, недоработки и баги моего патча.

Посмотрю, как будет время.
Пока, на паре проектов, - вроде, работает.
Но у меня нет проектов с режимом "IDEAL", всё только "MASM".
Писал об этом раньше, специально не использовал никогда этот IDEAL,
и оно себя позже оправдало в полной мере.
Сейчас практически нет проблем с использованием ML.EXE (MASM).

FalseMaster пишет:
Не вижу логики.


Ok. Понятно.

В общем, если бы было более толковое описание того, чем занимается подгружаемая библиотека, было бы легче.

Кстати, а как поведёт себя это всё при ASLR? имеются в виду патчения, которые выполняет подгружаемая библиотека.


--------------------------------
Что касается "восстановления хинтов", [удалено]





Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 27 марта 2017 15:58 · Поправил: FalseMaster
· Личное сообщение · #21

>Пока, на паре проектов, - вроде, работает. Но у меня нет проектов с режимом "IDEAL", всё только "MASM".
Ну так само собой, что в MASM-режиме всё работает, т.к. управление костылём возложено на ключевые слова IDEAL и MASM. Если найдёшь время, переделай какой-нибудь не самый большой, но насыщенный всяческими директивами проект – не так уж и много переписывать: слова местами поменять да "ptr " заменить на "" сразу во всём тексте. Ну или тестовый забацай с переподвыподвертами.

>В общем, если бы было более толковое описание…
Так я же сразу и описал, только в виде жалоб. И в файлике TAsm+.txt про все три нововведения сказано.
1. Раздельная сегментация, то бишь сегменты с одинаковыми именами не сливаются в один.
2. Возможность обращаться к памяти вот таким макаром: mov byte/word/dword [address], imm8/16/32.
3. Допустимость использования ключевых слов, экранированных символом '&', в качестве идентификаторов (как в Делфях).

UPD:

>Кстати, а как поведёт себя это всё при ASLR?
По идее всё должно быть нормуль, но я не имею возможности проверить, ибо прожжённый олдфаг и сижу на 2k3.

>Хинты имеют смысл только в том случае, если нет имён функций…
Ты путаешь хинты с ординалами. Подсказки позволяют ускорить настройку адресов импорта (естественно это будет заметно только если приложение импортирует 9000 библиотек со 100500 функций в каждой, а я так просто для красоты поправил – делов-то на 5 сек.).



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 27 марта 2017 17:39 · Поправил: dosprog
· Личное сообщение · #22

Слишком всё громоздко. Хотя и, безусловно, круто.

И главное - зачем вообще нужен этот паскаль?
Чтобы принять и разобрать аргументы?
Чтобы вывести на консоль форматированные сообщения?
Вот, похоже, и всё. А какая куча головняка.
(Кстати, в утилите Hint_fixer вывод на консоль отсутствует. Тупо работает втихую).

На примере утилитки Hint_fixer, могу сказать, что проще изначально всё делать на MASM'е,
чем иметь такие сложности, ещё и с кастомным траслятором вдобавок.

Просто надо брать и делать такие вещи целиком на ASM'е, оно кажется трудно только в первый раз.
И TASM лучше уже оставить в покое, сейчас MASM актуален. Плохо это или хорошо

Помимо всего прочего, борландовский линкер работает паршиво - файлы выходят неоптимальными, иногда, довольно часто, начинаются какие-то загадочные глюки.
TASM был вне конкуренции во времена слабых компьютеров и программирования в DOS - там да.
А сейчас уже MASM.

Окончательно отошёл от TASM'а, когда возился с утилитой, частью которой являлся отдельно оттранслированный модуль [и не один], включаемый потом в основную программу в виде "included db".
Так вот tlink32 лепил в конец того файла сотню байтов оверлея из нолей,
которые приходилось обрезать руками, после чего транслировать главный модуль со включёнными этими "db".
И в результирующем файле тоже оказывался ненужный оверлей, его тоже приходилось отрезать перед окончательной упаковкой готовой программы.
Как только перетащил проект в MASM32, все эти странности мигом пропали, и файл перед запаковкой был на треть меньше по размеру, чем после TASM/TLINK. За счёт отсутствия непонятных пустот.

Это объективно. А так-то я сам ретроград.
Старые вещи, сделанные для TASM'а, обычно не трогаю, да и там в основном были вещи для DOS'а.
То, что для WINды - тут TASM уже отдыхает.





Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 27 марта 2017 19:53 · Поправил: FalseMaster
· Личное сообщение · #23

>Слишком всё громоздко.
Это только со стороны и с непривычки так кажется. Для меня мало что поменялось от задействования TAsm'a в паскалевых проектах. Ну добавляю в батник пару-тройку пунктов для "Choice", вот собственно и всё.

>И главное - зачем вообще нужен этот паскаль?
Не зачем, а почему. Потому что компиляция быстрая, а если сорцы на RAM-диске, то вообще молниеносная. Для меня это основной критерий. Я не зарабатываю кодингом, меня попросту прёт от байто**ства, будто вставился, но очучения более тонкие. А когда компиляция происходит в темпе тягания кота за хвост, возникает диаметрально противоположная реакция – раздражение. Как говорится, почувствуй разницу.

>Чтобы принять и разобрать аргументы?
>Чтобы вывести на консоль форматированные сообщения?
Если говорить не конкретно о Паскале, а о ЯВУ вообще, то как ни крути высокоуровневая семантика имеет свои неоспоримые преимущества, как то контроль передаваемых в функции параметров (особенно актуально для вызовов API'шек), большая удобочитаемость исходников etc, что ведёт к сокращению труднообнаружимых ошибок, объёмов писанины и усталости от повышенного внимания.

>проще изначально всё делать на MASM'е
Кому как, это чисто индивидуально. Для меня, например, слишком утомительно х**рить весь проект на голом асме. А в некоторых случаях это ещё и совершенно неоптимально. Для примера, у меня есть проект Portabler, назначение которого в том, чтобы проги хранили свои настройки в INI-файле вместо реестра. Основная часть проекта универсальна, а для каждой конкретной софтины меняется только инклюд, содержащий как правило несколько вызовов стандартизованных функций для загрузки и записи ключей. Большинство инкюдов делаются посредством копирования наиболее подходящего из уже имеющихся и внесения в него небольших корректировок, а то и без оного. Представь, насколько я усложнил бы себе жизнь, заменив эти маленькие удобоваримые инклюды асмовыми портянками.

>целиком на ASM'е, оно кажется трудно только в первый раз.
Ну я как бы не первый день за пекой и свои возможности знаю.

>Так вот tlink32 лепил в конец того файла сотню байтов оверлея из нолей
Ну мне-то попроще будет, т.к. круг решаемых TAsm'ом задач у меня довольно узок: использую его токмо в связке с DCC и никак более.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 27 марта 2017 20:40
· Личное сообщение · #24

)) Не понял. Этот самый Portabler это что - реестр должен использоваться как временное хранилище настроек, только на время запуска программы?



Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 27 марта 2017 21:24 · Поправил: FalseMaster
· Личное сообщение · #25

>реестр должен использоваться как временное хранилище настроек
Ну да, только есть маленькая хитрость, а именно захукивается NtCreateKey с целью добавления флага REG_OPTION_VOLATILE.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 27 марта 2017 21:41 · Поправил: dosprog
· Личное сообщение · #26

Такая идея выглядит вполне привлекательно.
Только вот составлять список всех ключей это тяжело, а для некоторых программ так и просто нереально.
Есть такие программы, которые в реестре пакостят очень обильно.

FalseMaster пишет:
только есть маленькая хитрость

А почему нельзя просто их удалять по окончании работы программы?
Всё равно ведь лаунчер будет их содержимое записывать в .INI файл?



Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 27 марта 2017 22:06 · Поправил: FalseMaster
· Личное сообщение · #27

>Только вот составлять список всех ключей это тяжело
>Есть такие программы, которые в реестре пакостят очень обильно.
Так да не так. В подавляющем большинстве случаев прога срёт в ветку HKEY_CURRENT_USER\Software\<проганейм>, а вот подключей действительно может быть много, но до нереальности далеко, десяток-другой – это ерунда. Но даже если подключей будет овердохуа и при этом они сами не будут иметь подключей, вся ветка загрузится/запишется одним вызовом функции. Попадаются конечно "тяжёлые" случаи с большим кол-вом подключей и вложенностью в несколько уровней, но это редкость.

UPD:

>А почему нельзя просто их удалять по окончании работы программы?
Тут всё тоньшее и глубжее. Если ключ создаётся с флагом REG_OPTION_VOLATILE, то он располагается в отдельной области памяти, а не в промапленном файле реестра и запись в него не сопровождается записью в лог реестра (ntuser.dat.log, software.log етц), соответственно накопитель не удрачивается даже если созданная нижними конечностями программулина интенсивно пишет в реестр (актуально для SSD). К тому же где гарантия, что приложение завершится корректно? Ну и кода меньше.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 27 марта 2017 23:46
· Личное сообщение · #28

Да, идея годная.
Надеюсь увидеть в действии.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 28 марта 2017 02:14
· Личное сообщение · #29

Всё годное пилится на масме. Фасм же стал популярен из за сего компиля --> Link <--

Масм весьма глючен, но это олдскульный компиль, именно на нём кодить хорошо и правильно(выбор из всяких тасм фасм етц).

-----
vx




Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 02 апреля 2017 05:56
· Личное сообщение · #30

Я уж грешным делом подумал, что ресурсу настал безвременный кабздец (что было бы весьма прискорбно), ан нет, жив курилка.

dosprog

>Надеюсь увидеть в действии.
В каком смысле: привить чистоплотность некой прожке или сорцы позырить?

Кстати, по поводу обильной срачи в реестр. Чаще всего гадит не столько сам продукт, сколько его инсталлятор. Руки бы пообрывать обмудкам, засовывающим софт во всякие Inno Setup'ы, NullSoft Installer'ы и прочую гадость.

difexacaw

>именно на нём кодить хорошо и правильно
Для меня более приоритетно удобство, нежели канонiчность и трушность.


. 1 . 2 . >>
 eXeL@B —› Софт, инструменты —› WAsm и структуры
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати