Assembler. С чего начать?

Rarog
Да. Дизассемблировать, изменить и собрать обратно - можно(врятли ч/з nasm, у него нет линковщика). Именно так крякуют почти всё коммерческое ПО.

nafanja
чего чего?
теоретически можно, а практически оно потом не соберется или работать не будет как исходный бинарник, дизасемблеры не настолько умны, это инструмент анализа!

vasek
Да и теоретически не возможно. Дизассемблер только для анализа, ну и редко теста.

Думаю вот это прояснит ситуацию
1. Крис Касперски. Секреты ассемблирования дизассемблерных листингов
2. Крис Касперски. Линковка дизассемблерных файлов
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb
http://rusrailsim.org
maisvendoo
Думаю вот это прояснит ситуацию
Ничего прояснять не нужно - и так все ясно. Все зависит от поставленной задачи.
В основном применятся два метода - ручками прямо в исполняемом файле, либо через патч ну еще можно добавить редко используемый способ - скрипт, когда все правится прямо на лету, в памяти.
PS......IDA Pro, конечно инструмент хороший, но для полного анализа и встраивания необходим и другой инструмент, а имеется и такой, который способен работать и в ring 0.
Ошибки не исчезают с опытом - они просто умнеют
akorop
Ну на сколько так можно ускорить вычисления? На 20%? Да гори они огнём. Если это офисная задача - подождут: пользователь, который готов секунду (минуту, час, день) ждать, подождёт и 1.2 секунды (минуты, часа, дня). А если это задача реального времени, надо просто мощнее процессор взять и не закладывать бомбу под будущее сопровождение.

Не нужно так категорично. Для какого-нибудь гугла или фейсбука сэкономить хотя бы 5% вычислительных мощностей - уже большая экономия. А для высокочастотных торгов милисекунды вообще стоят миллионы долларов.

Или более приближенная ситуация. Для какого-нибудь устройства выбрали микроконтроллер, спроектировали плату и отправили в производство. А потом выяснилось, что в некоторых ситуациях его мощности немного не хватает. И тут возникает вопрос: отправить партию в брак, взять другой микроконтроллер, который, возможно, потребует перепроектировки платы, или попробовать оптимизировать несколько функций на ассемблере?

vasek
Конечно, прогресс на месте не стоит — появляются другие процессоры, другие более приспособленные языки, но в их основе лежит тот же простой ассемблер

Не все так просто. Взять хотя бы интерпретируемые языки. Или языки с трансляцией в байт-код. Да, интерпретаторы или виртуальные машины таких языков работают "нативно". Но вот сами программы связаны с процессорными командами уже косвенно. Появляется дополнительный уровень абстракции.
farwayer
Не все так просто. Взять хотя бы интерпретируемые языки. Или языки с трансляцией в байт-код. Да, интерпретаторы или виртуальные машины таких языков работают "нативно". Но вот сами программы связаны с процессорными командами уже косвенно. Появляется дополнительный уровень абстракции.

Написал так много, аж не удобно - просто наболело, да и пришло письмо на мыло из-за бугра от спеца по этому делу — живет, как говорят, сыр в масле катается — а ему еще нет и 35. А потому лимит исчерпан и больше в этой теме ни слова.
Мне очень нравится фраза Ассемблер вечен.
Чем дальше и дальше идет прогресс, языки программирования становятся все более высокоуровневыми. Но не стоит забывать, что любой высокоуровневый язык программирования транслируется в низкоуровневые инструкции, без этого никуда — нужно же как то общаться с железным интелектом. Ассемблер наиболее приближен к машинному языку.
Ну, насчет вечности я, бы перефразировал так — пока живут и совершенствуются железные интелекты, будет жить и совершенствоваться Ассемблер.
farwayer Вы совершенно правы!!! - Ассемблер на месте не стоит и то же совершенствуется , в противном случае не будет никакого прогресса. И уже ведутся разработки объектно-ориентированного ассемблера (это я знаю точно). Ну а байт-код виртуальной машины я бы все-таки с ассемблером не связывал. Это немного другое.
И как вывод, без низкоуровневого программирования ни куда — это основа, а чтоб быть спецом низкоуровневого программирования нужно дополнительно разбираться в логическом устройстве процессора и памяти.
И последнее — на протяжении не одного десятка лет наиболее высоко ценятся, оплачиваются и переманиваются программисты двух категорий
- высокоуровневого языка Lisp - пока единственный язык, успешно применяющийся в создании искусственных интелектов и самообучающихся систем
- низкоуровневого программирования Assembler (да, да и не смейтесь)
UPD.....и советую тебе RAMZAY начать дополнительно осваивать пока обычный Lisp....(PS.....скобок не бойся - у него это основа)
pacman -Ss clisp …...........extra/clisp 2.49-4
ну а после ознакомления с Lisp переходи на Common Lisp
Ошибки не исчезают с опытом - они просто умнеют
читал я про lisp на лурке и вики,забавный язык. Но в качестве высокоуровнего языка я предпочитаю C++ ,испытываю я к нему некоторую любовь что ли,так же с детства я слышал о трёх атрибутах "хакеров":с++ , ассемблер,линукс. Собстно время шло,у меня была денди,пк,парочка лет на винде,потом был линух,дальше с++ и сейчас вот я приступил к изучению вершины моих грёз,чувствую себя на 7-ом небе от щастья что я нашел мою конфу(linux4all.conference.jabber.ru если кому интересно ),там мне посоветовали арч,а дальше я обрёл этот форум. К чему я это? А к тому что мечты сбываются в компании хороших людей,спасибо всем =)) Гляну Lisp потом,пусть он будет моей следущей ступенькой мечтания !
RAMZAY
Гляну Lisp потом,пусть он будет моей следущей ступенькой мечтания !
Если уж речь о планах на потом, то настоятельно советую глянуть ещё и Форт. Только на него не просто глядеть надо, а пару программ написать, и не очень простых, иначе не вставит. Желатально прочитать книгу Броуди "Способ мышления - ФОРТ" (Leo Brodie "Thinking FORTH").
Спроса на Форт-программеров давно уже нет, но въехать в Форт очень полезно для мозгов.
maisvendoo
Думаю вот это прояснит ситуацию
1. Крис Касперски. Секреты ассемблирования дизассемблерных листингов
Ну вот, опять к желтой прессе отсылают.. дело в том, что как уже говорили выше дизассемблер это исследовательский инструмент. И никакой разработчик никакого дизассемблера не делает его с расчетом на то, чтобы результат можно было прогнать через ассемблер. Дизассемблеры ошибаются. В 99% случаев для читающего листинг это неважно и он этого даже не заметит. Но результат не ассемблируется обратно. Ассемблеры оптимизируют код, и никто не проверял, как будут работать эти алгоритмы оптимизации с уже оптимизированным кодом. Относительные переходы, выравнивание по границам, всякие делэй слоты.. машинный код - живой, нельзя просто так бездумно сунуть регистры в стек и занятся своими делами. Даже если ваша правленая поделка соберется, где гарантия, что вы не поломали логику? Сколько времени понадобится, чтобы отладить результат? Когда очень уж надо (вирусы, кряки) правят сам бинарник, но не ассемблируют исправленные листинги дизассемблера.
vasek
И уже ведутся разработки объектно-ориентированного ассемблера (это я знаю точно).
Уже лет так, 15-20 тому назад у turbo assembler'a были возможности объектно-ориентированного программирования. Где-то недавно читал как людя делают объектно-ориентированным, Си, добавляя в структуры указатели на функции. Можно, но imho - жуткое извращение.
И сложно мне кажется будет TC'у с места в карьер. На amd64. Удачнее, мне кажется было бы начать с какого-нибудь простенького контроллера и научить людей пользоваться справочниками. Вспоминаю как меня учили ПЧММ: есть такой язык Си, на нем написали UNIX, есть про него хорошая книжка - K&R, на нем мы будем писать лабы; а теперь давайте говорить о том, для чего мы тут собрались - о математике.
P.S. Про Кнута вспомнил.. чем не первый ассемблер?
naszar
Но результат не ассемблируется обратно.
Я вот об этом и хотел сказать. Там об этом и написано - можно скопилировать путем глобальной обработки напильником, а результат всё равно не слинкуется, а если слинкуется, то не будет запускаться. Вывод процитированных статей что процесс компиляции - односторонний

naszar
Ну вот, опять к желтой прессе отсылают..
ну, зачем так радикально. У человека толковые статьи. Я бы допустим к GDB так и не подступился бы, если бы не прочел его статью. Хороший вводный обзор, после которого можно смотреть и документацию GNU.

naszar
Где-то недавно читал как людя делают объектно-ориентированным, Си, добавляя в структуры указатели на функции.
ахаха ), я тоже такой ерундой страдал ) Иногда бывает полезно, кстати, когда С++ использовать не получается
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb
http://rusrailsim.org
maisvendoo
Там об этом и написано
Прошу меня извинить, я вас неверно понял.. и в GDB, действительно, годное введение.
RAMZAY, наткнулся на электронный учебник, может в процессе учебы и пригодится
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.