LINUX.ORG.RU

Ответ на: комментарий от VadimAlexeev

Ну если результат будет положительным, то да, несомненно

comp00 ★★★★
()

дизассемблирование

зачем?

splinter ★★★★★
()

Просто вычеркни из списка ассемблер и изучай С параллельно с ядром.

Kindly_Cat
()

Ассемблер нужен практически только для всякой эмбедщины, для которой ещё компилятор C не написали. И то лучше учить Форт. Ядро линух слишком высокоуровнево для этого.

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

Miguel ★★★★★
()
Ответ на: комментарий от VadimAlexeev

По опыту могу сказать - просто так, для удовольствия, ничего изучать не получится. Надо поставить себе конкретную цель, для достижения которой тебе понадобятся эти знания. И идти к ней. Тогда будет толк.

Zhbert ★★★★★
()
Ответ на: комментарий от VadimAlexeev

где можно применять ассемблер

Например, я его использовал для небольших быстрых кусков кода при программировании микроконтроллеров, там, где нужна именно скорость.

Zhbert ★★★★★
()
Ответ на: комментарий от VadimAlexeev

Лично мне в своё время помогли простые упражнения типа напишите привычные С-функции strlen(), strcat(), упакуйте числа BCD,... на ассемблере лучше понять C (после паскаля), а именно: ну зачем там всё на указателях. Если самому написать эти функции, то начинаешь «уважать» паскаль, понимая, что C - это такой себе супер-макро ассемблер. Хотя, всё входит в привычку.

Дизассемблирование «на практике» вряд ли реально для начинающих. Ведь на практике, компилируют с -O2/3, а то и обрабатывают ещё какм-нибудь запутывателеми кода. А в учебных целях, можно на своих небольших прогах тренироваться.

gag ★★★★★
()

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

ilovewindows ★★★★★
()

Изучать ассемблер, дизассемблирование параллельно с С и структурой ядра Линукс будет удачно?

Это лучший путь, который только можно придумать. Через полгода-год сможешь что-нибудь полезное слать в LKML.

Однако, я бы советовал не особо сильно упирать на ассемблер. То есть, уделять ему, ну скажем, десятую часть внимания, если не меньше. Ровно столько ассемблер и нужен в ядре Linux.

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

hexdump01010101
()

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

Но можно взять эмулятор Спектрума и пописать под него демки :) В знании ассемблера важно знание хоть какого-нибудь ассемблера, т.е. иметь мозг, умеющий программировать на самом низком уровне.

mv ★★★★★
()
Ответ на: комментарий от hexdump01010101

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

Дизассемблировать код, сгенерированный машиной, скучно и малоинформативно.

mv ★★★★★
()
Ответ на: комментарий от mv

Я вовсе не предлагал ТСу дизассемблировать vmlinux и читать его на ночь. :-) Конечно просто так читать код скучно. Но я говорил о том, что если он будет как-то разбираться с архитектуро-зависимыми участками, то ассемблер сам собой выучится, хотя бы на уровне чтения-понимания. Поэтому как-то его специально учить ассемблер я смысла большого так же не вижу.

hexdump01010101
()
Ответ на: комментарий от VadimAlexeev

В практике, где можно применять ассемблер и

в написании вирусов.

дизассемблирование?

влом программ. Взлом security by obscurity.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Кто тебе сказал что мне так нужно взламывать программы!? Я хочу разобраться в дизассемблировании, лишь из-за сильного желания изучить структуру некоторых программ, возможно научиться их немного изменять.

Слишком уж Вы высокомерны.

VadimAlexeev
() автор топика
Ответ на: комментарий от gag

Спасибо за хороший совет. Я понимаю, что ассемблер начинающему программисту мало чем поможет, но меня это заинтерисовало.

VadimAlexeev
() автор топика
Ответ на: комментарий от hexdump01010101

Спасибо! Я так собственно и хочу - ассемблеру меньшее внимание.

VadimAlexeev
() автор топика
Ответ на: комментарий от mv

Сейчас мне это кажется не будет скучно. Видно это первое, ложное впечатление. В любом случае, лишним не будет.

VadimAlexeev
() автор топика
Ответ на: комментарий от VadimAlexeev

Кто тебе сказал что мне так нужно взламывать программы!?

в этом ничего плохого нет.

Я хочу разобраться в дизассемблировании, лишь из-за сильного желания изучить структуру некоторых программ, возможно научиться их немного изменять.

в дизассемблировании разбираться нефиг. Этим занимаются отдельные программы. Например IDA Disassembler. ну а чтобы научиться понимать дизассемблированный код достаточно самому написать несколько простеньких программ на асме. Например «библиотеку» для связанных списков.

dikiy ★★☆☆☆
()
Ответ на: комментарий от VadimAlexeev

я б на твоем месте для начала скачал nasm и попробовал написать простенькую программу на нем.

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

dikiy ★★☆☆☆
()

Удачно наверное. Ещё можно добавить C++ с его виртуальными таблицами, вопросы загрузчика, потоки... И будет из тебя драйверописатель за 6 килобаксов в месяц (в России) (-;

kiverattes ★☆
()

Да, отличный выбор. Ассемблер знать вообще обязан каждый.

anonymous
()
Ответ на: комментарий от cdshines

Это сарказм? Или вам действительно интересно?

VadimAlexeev
() автор топика
Ответ на: комментарий от anonymous

Мсье, вы уже доказали, что вы ламер.

Ути-пути :-]

dikiy ★★☆☆☆
()

Чарльз Петцольд «Код»

начинай с него. изучать нужно устройство компьютеров, в том числе и процессоры разных типов.

dimon555 ★★★★★
()
Ответ на: комментарий от helios

Загрузчики нынче модно на С писать?

а на чем их еще писать если не на С ? асма там кот наплакал да и то это все шаблонный код который можно просто копипастить.

Для ТС - приступай к ассемблеру только по необходимости, в большинстве случаев будет достаточно таблички с описанием команд и как уже правильно сказали - достаточно освоиться с одним процессором, лучше какой-нибуть risc-процессор (наиболее интересен/доступен/перспективен в финансовом плане - arm).

bakugan
()

Это не трудно. Но вот потом, когда начнешь заниматься настоящим программированием, станет затруднительно избавиться от привкуса го*на во рту.

anonymous
()
Ответ на: комментарий от anonymous

станет затруднительно избавиться от привкуса го*на во рту.

Да ладно. Я в своё время изрядно с DECовским ассемблером поковырялся, но когда, наконец, избавился от него, никакого особого привкуса не было. Некоторое время (недолгое) рад был, а потом просто перестал думать об этом.

PS: Тем не менее, некоторые вещи в Си я стал понимать немного лучше.

DeVliegendeHollander ★★
()
Ответ на: комментарий от VadimAlexeev

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

anonymous
()
Ответ на: комментарий от anonymous

Этот бог нихрена толком ничего не сказал. Или скилл у меня плохой. Тебе дать ссылку на неучей? Ты еще не видел их, они хуже.

VadimAlexeev
() автор топика
Ответ на: комментарий от dikiy

я б на твоем месте для начала скачал nasm

Ну вот зачем глупости советовать? Зачем nasm, если 99% того, с чем надо будет иметь дело это at&t? nasm ничем не легче и не лучше, он просто другой.

ТС, не надо никаких IDE, IDA, nasm, и прочее. У тебя уже все есть.

Вот тебе что-нибудь, с чего можно начать:

$ cat <<EOF > c.c
#include <stdio.h>
int main(int argc, char *argv[])
{
printf(«hello world\n»);
return 0;
}
EOF

$ gcc -S c.c
$ gcc c.s
$ ./a.out
hello world

Собственно, вот твой ассемблер код:
$ less c.s

Вот дизассемблер:
$ objdump -d a.out

Попробуй изменить код на С, засунув printf в цикл, повтори шаги выше и узнаешь как делать циклы в asm. Ну и т.д. Разберись с прологом и эпилогом функций (то бишь как работать со стэком), напиши 'c.s' с нуля сам, и можешь считать, что большую часть ты познал.

hexdump01010101
()
Ответ на: комментарий от hexdump01010101

Попробуй изменить код на С, засунув printf в цикл, повтори шаги выше и узнаешь как делать циклы в asm. Ну и т.д. Разберись с прологом и эпилогом функций (то бишь как работать со стэком), напиши 'c.s' с нуля сам, и можешь считать, что большую часть ты познал.

Забыли напугать ещё разными call convention функций: порядок впихивания аргументов стэк, передача аргументов через регистры, обяз зачистки стэка и прочего геморроя.

FeyFre ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.