eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Софт, инструменты —› Полноценный C/C++ компилятор
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 40.3 (посетитель)
Статус: Участник

Создано: 14 июня 2016 07:26 New!
Цитата · Личное сообщение · #1

Недавно продолжительное время возился с чужим проектом, написанном на сях, и неожиданно для себя увлёкся (сам закоренелый паскальщик). Решил более близко познакомиться с этим языком, но в процессе столкнулся с очень большой проблемой – отсутствием полноценного компилятора. Под полноценностью подразумевается наличие неурезанного встроенного ассемблера. Щупанью подверглись 3 продукта: мелкомягкий, интеловский и поделие от Digital Mars. Первые джва не знают о директиве DB/DW/DD (зато детище MS занимается самодеятельностью в асм-блоке), как следствие не дают возможности создать jump-table (самое смешное, что хаемый всеми багландский компилер не имеет таких ограничений). У последнего нет этого фатального недостатка, но к большому огорчению есть другой – деоптимизация кода левыми инструкциями (не для выравнивания). В общем вопрос такой: существует ли на свете C/C++ компилятор (или может какая-то из версий упомянутых), способный генерить качественный код и обладающий полнофункциональным inline-ассемблером? Я что-то не нашёл.


Ранг: 315.6 (мудрец)
Статус: Участник
born to be evil

Создано: 4 июля 2016 13:30 New!
Цитата · Личное сообщение · #2

тг/кг/ам...

Ранг: 40.3 (посетитель)
Статус: Участник

Создано: 13 июля 2016 01:07 · Поправил: 13 июля 2016 01:41 FalseMaster New!
Цитата · Личное сообщение · #3

Вот плохо, что уведомления на мыло не сделать, как всегда забыл о теме… Ну да ладно, она всё-равно себя исчерпала и отписывающиеся скатились в оффтоп. Я просто хотел немного поиграться с Си, но как видно так и помру проклятым паскальщиком К тому же оказалось, что я сильно отстал от жизни – начиная с версии XE в делфийском компилере появились директивы для выравнивания кода (и это ох**нно). Ещё бы реализовали это для данных, кодогенератор довели до ума, да препроцессор добавили, и тогда у сишного компилятора не останется никаких преимуществ.

dosprog

>> Вот те раз. А где ж там Паскаль?

Как это где? В начале проседуры:
Code:
  1. procedure Emu_Step;
  2. asm
, в конце:
Code:
  1. end;
– не вываливать же весь модуль для демонстрации синтаксиса на нескольких строках.

>> И вопрос - вот этот RET, он возврат куда? И откуда?

Очень странный вопрос. На следующую после "CALL" инструкцию вестимо.

>> - Это путь к созданию безнадёжно глючного софта.

Ты так говоришь, потому что привык, что компилятор генерит за тебя половину кода. Но это не труЪ, чувак

>> Кстати, это выглядело отталкивающе ещё в Turbo-Pascal'е - код вперемежку с данными.

Какой ужас. Ну береги тогда свой манямирок от дизассемблеров/дебаггеров, а не то как покажут тебе таблицу переходов, вкоряченную непосредственно (с выравниванием на DWORD) после "jmp dword [<addr> + r32*4]", в скомпиленном твоим любимым MSVC бинарнике.

Ранг: 382.5 (мудрец)
Статус: Участник

Создано: 13 июля 2016 01:16 · Поправил: 13 июля 2016 01:25 dosprog New!
Цитата · Личное сообщение · #4

FalseMaster пишет:
Очень странный вопрос. На следующую после "CALL" инструкцию вестимо.


Нормальный вопрос. Потому, что никак нет - возврат будет по тому адресу, который в стеке.
А что там в стеке будет при твоём подходе, это неизвестно никому.

FalseMaster пишет:
Ты так говоришь, потому что привык, что компилятор генерит за тебя половину кода.


Да, компилятор этим занимается, приходится это учитывать.


Ранг: 40.3 (посетитель)
Статус: Участник

Создано: 13 июля 2016 02:51 · Поправил: 13 июля 2016 02:51 FalseMaster New!
Цитата · Личное сообщение · #5

dosprog

>> А что там в стеке будет при твоём подходе, это неизвестно никому.

Почему неизвестно-то? Что запихали, то и будет, не? Или ты имеешь в виду порчу стёка при записи в память по кривому указателю? Так от этого компилятор не защитит даже если писать на Си/Паскале без асм-вставок. При таком уровне кодобоязни остаётся только на VB перейти или, ещё лучше, на HTML

>> Да, компилятор этим занимается, приходится это учитывать.

А при моём подходе ничего учитывать не надо (кроме пролога/эпилога). Что на входе, то и на выходе, ня!

Ранг: 382.5 (мудрец)
Статус: Участник

Создано: 13 июля 2016 05:01 New!
Цитата · Личное сообщение · #6

FalseMaster пишет:
А при моём подходе ничего учитывать не надо (кроме пролога/эпилога). Что на входе, то и на выходе, ня!

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

..
в общем, тема себя изжила


Ранг: 40.3 (посетитель)
Статус: Участник

Создано: 13 июля 2016 06:32 New!
Цитата · Личное сообщение · #7

dosprog

>> куда будет в приведеном примере ret, не учитывающий пролога.

Ох и дотошный же ты чел. Возврат будет куда следует, т.к. функция объявлена как register (тип вызова по умолчанию), локальные переменные отсутствуют, и компиляция производится с ключом {$W-} (аналог сишного Oy). Лучше бы в другой теме что-нибудь полезное предложил.
<< . 1 . 2 .
 eXeL@B —› Софт, инструменты —› Полноценный C/C++ компилятор

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS