PDA

Просмотр полной версии : Assembler (Помогите)


Adio
17.07.2005, 02:32
Всем привет.
Помогите разобраться с Ассамблером вот нашел кучи
документации то сё.. и все равно не пойму как оно работает )) т.е как исполняеться код и в какой Винде

Вот как например в С++ пишешь слова типа
cout << "Hello word\n";

ну вообщем сдесь понятно .
А в Ассамблере Черт знает шо и де его писать?
как исполнить программу ? и как посмотреть результат своей программы... ну вообще я полНЫЙ НОЛЬ. В Ассамблере.. такого еще не видел..)) Но интересно очень. Подскажите как пользоваться и маленький примерчик Hello World сделать )).
И если не трудно обьясните как это работает
Эти Цифры буквы...(

Всем спасибо за ранее.

KEZ
17.07.2005, 02:58
Ну чтоже, давай с тобой разбираться что такое ассемблер. Ну раз ты про это заговорил - это уже большой шаг.
Многие его считают обычным "крутым языком" для "хакеров". Это не только ошибочное но и педаристически-тупое мнение, обычный стереотип, шаблон и т д.
Ассемблер я вообще не считаю полноценным языком, т.к. делаю на нем только вставки в C - код. Сам из себя синтаксис асма ничего страшного не представляет. Компидяторов много и сделать реальную Win32-прогу непросто.
Разумеется, ты ни разу не писал чтото на асме, поэтому задал вопрос, как сделать Hello world. Давай подумает сначала, откуда берется хело ворд. В винде в окошке? Или ты имел ввиду в консоли cmd.exe ? Или где? Понимаешь ли, Ассемблер - это почти представлений команд, в бинарном видео лежащих в EXE,COM и т д файлах.
А современные компиляторы переводят один вызов (причем с разными связями и т д) на много асм-команд для процессора. Например вызов MessageBox( 0, "Fuck this world", "MessageTitle", MB_ERROR ); примерно эквивалентен

push MB_ERROR (точнее вместо MB_ERROR нужно поставить значение)
push offset MessageTitle (можно push [MessageTitle])
push offset FuckThisWorld
oush 0
call [user32.MessageBoxA]

кстати, рекомендую прочитать мою статью http://antichat.ru/txt/stack.
Так что например вывести Helo world не так просто. Мы начинаем думать не тупыми
cout << "Hello word\n"; не задумываясь как все это работает на низком уровне, а САМИ программируем в низком уровне... Не сказал бы что делать прогу на asm-хорошая идея. Разве что размер кода... Всеравно, компилятор добавит в EXE некоторые свои вещи, некоторые из которых не поддаются управлению с исходника (во как сказал))

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


mov приемник источник например mov eax,ebx
переслать данные из источника в приемник

xor приемник источник например xor eax,ebx
мат. операция XOR (иск. ИЛИ) с источником. релультат в приемнике.

cmp пар1 пар2 например cmp eax,1
сравнение пар1 и пар2. (вычитанием) если равны, флаг нуля устан. в 1 (Z flag)

jz, jnz, je, jne, jmp, jbe и т д например jnz 0x00401020
переходы (скачки), jmp=безусл. переход, выполняется всегда. остальное - переход с учетом флагов. например, переход jnz будет выполнен если Z флаг НЕ В 0 (jump if not zero) этим можно заменять конструкции if, while, for...

call например call MessageBoxA
это не jmp, т.к. jmp просто переводит EIP на новое место, а call сохраняет адрес след. команды в стеке, чтобы потом вернуться (после вызова ф-ии)

retn например retn =))
возврат из процедуры, востанав. сохраненного значения EIP командой CALL

leave делает некоторые операции с ebp и eip, для удобвства

and, or, not - мат. операции. надеюсь сам поймешь

push, pop сохранение и извлечение из стека. например push 5; pop eax. (eax=5)

xlat... нафиг

int [номер] например int 13
емулирование прерывания номер [номер] - врядли надо будет

ну и все остальное


Добавлю, что EIP - это адрес след. команды для выполнения.
EBP - используется для указ. кадра стека внутри него и по другому тоже, ESP указывает на вершину стека, EAX, EBX, ECX, EDX - просто регистры.

Также, чтобы получить доступ к памяти по адресу address, можно

mov eax, [address] (иногда в отладчиках mov eax, [dword ds:address])

теперь eax=значению dword (eax имеет тип dword-4 байта) по адресу address

Если есть вопросы (есть. я знаю) задавай смело.

--------------------------
Мне кажется все это настолько просто...

Morph
17.07.2005, 07:16
Круто задвинул =)
Хехе на винт сохранюка я эту пагу =)

tester2005
17.07.2005, 08:47
Kez, тебе надо мануалы по асму писать ))))

nerezus
17.07.2005, 09:30
Самый примитивный пример:

.586
.model flat, stdcall
option casemap :none

include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib

.data
text db "Фдибаг, жывотнайе",0
capt db "ПГ/ЗМ",0

.code

start:

invoke MessageBox,0, addr text, addr capt, MB_OK
invoke ExitProcess,0
end start

Adio
17.07.2005, 10:34
KEZ а как программы выполняеться ?
т.е

1)освободить память
2)залить туда АСМ код
3)Конец файла
4)Закрыть ?

Это я так написал как представляю... может это все и не правильно но я думаю ты понял что обьяснить нужно последовательность выполнение.. (Может его и нет))
Но думаю есть как в С ( с int main) ну я думаю понял))
Большое спасибо.

KEZ
17.07.2005, 14:58
нет, WinMain как и main тут уже конечно же нет.
есть точка входа в программу, она определяется компилятором либо тобой.
почти всегда первая команда - push ebp
Причем точка входа может располагаться как в середине так и в конце. Причем чаще всего даже в конце.

Zadoxlik
17.07.2005, 15:12
http://kalashnikoff.ru/ - там есть оч. доступный пониманию учебник

KEZ
17.07.2005, 15:36
# установку и настройку Web-сервера IIS (Internet Information Services);
# установку и настройку ActivePerl-5.6.1.631-MSWin32-x86 под Windows;
# установку и настройку MySQLadmin 1.3;
# тестирование скриптов локально с использованием приведенных выше программ.


Калашников изначально у меня вызывал недоверие и подозрение.
Врядли я выбрал бы IIS как свой сервер.

Zadoxlik
17.07.2005, 15:57
невтему однако

Adio
17.07.2005, 16:14
Kez а для чего АСМ используют чаще всего ?

KEZ
17.07.2005, 16:18
- Для вставки в код высокоуровневых языков, имхо.
- Для изучения ошибок в программах, крякинга и вообще исследования.
- Или для написания троянов и вирусов (не особо актуально, нынешние "хакеры" пишут трояны и вирусы на делфи, хахаха).

nerezus
17.07.2005, 18:07
>Врядли я выбрал бы IIS как свой сервер.

однако прикольно, когда апач 1.3 на фряхе/линухе орет "Microsoft IIS 5.0 on Solaris" =)

KEZ
17.07.2005, 18:46
однако прикольно, когда апач 1.3 на фряхе/линухе орет "Microsoft IIS 5.0 on Solaris" =)


не это ещё фигня. прикольнее когда ты залазаешь на сервак и видишь

Powered by Denver on Windows ME

Adio
18.07.2005, 20:23
А как выполнять Asm файлы ну к примеру у меня есть код (asm) как его выполнить ?

tester2005
18.07.2005, 22:20
А как выполнять Asm файлы ну к примеру у меня есть код (asm) как его выполнить ?

компилятор

Adio
18.07.2005, 23:53
А как его Всталять в С++ Примерчик в студию если можно только такой шоб раздуплиться ))) тыж Можешь !!! Я знаю ! ))
Пасибо !

Adio
18.07.2005, 23:55
Tester2005 А как Откомпилить ? тама я знаю как то вроде через командную строку ?
но не так как в с++ вроде..

KEZ
19.07.2005, 00:05
Ну теперь давай думать как его исполнять.
Известно, что готовый Asm исходник (именно чистый асм-исходник) можно успешно скомпилировать компилятором. Всего компиляторов (точнее разновидностей асм) много:
например

NASM - непомню
TASM - Turbo Assembler, Borland
MASM - Macro Assembler
Microsoft Assembler - именно, его сделала компания микрософт...

И разновидности кажого. Чем же они отличаются?
NASM - компактный и быстрый (так считается), хотя сам не использовал, но он у меня имеется
TASM - обычный ассемблер. дистр. включает много хидеров (в асме они тоже есть)
MASM - отличается тем что тут есть макросы. Macros, чем то схожие с процедурами и ф-иями. Кусок кода, который получает параметры и чтото делает.
Microsoft Assembler - как нестранно, он почему - то работает как и обычный ассемблер (только в него добавлены обновления глюков)

Если ты поимел (гыы батхед, он сказал поимел - прим. Бивис) (задолбали вы писать свои педаристические примечания - прим. Кез) а че дальше писать? я уже сбился...
Так вот, если ты имел опыт компиляции C исходников bcc32.exe или чем то (например gcc никсах), ты сразу же скомпилишь и сорец асма.
Компиляторы очень похожы. Часто бывает достаточно запустить
компилятор и параметром файл, который ты компилишь - появится OBJ файл. потом линкер с параметром имени появившегося OBJ. Получится EXE.


По умолчанию
А как его Всталять в С++ Примерчик в студию если можно только такой шоб раздуплиться ))) тыж Можешь !!! Я знаю ! ))

Что такое "раздуплиться" я так и непонял, но пример приведу.
Вставка в C/C++ код (обычно) (должны быть доступны inline asm instructions)

void mail( void )
{
blablabla...

__asm
{
xor eax,eax
cmp eax,0
jnz ... и т д
}

blablabla...
}

Вот.
На паскале

procedure Fuck;
begin
asm
.....
end;
end;

или

procedure Fuck;assembler;
...
end; - тут вся процедура написана на ассемблере

Ну вот...

Кстати по ТНТ идет класный развратный фильм.

nerezus
19.07.2005, 08:29
void main( void )

эт правильно?

компилятор говорит, что ошибкa
причем правильно говорит ;)

`main' must return `int'

KEZ
19.07.2005, 14:28
компилятор говорит, что ошибкa
причем правильно говорит

Нерезус, достал, я имею ввиду ПРОСТО ПРИМЕР main() - ты че будешь к каждому слову придераться? ))

Adio
19.07.2005, 20:44
Короче беса вы гоните сдесь )))) Раздуплиться Это обозначает Понять ))))))))))
Все я раздуплился !!! УРа )))))

KEZ
19.07.2005, 20:55
че чтото понял? ))

Adio
19.07.2005, 23:02
Да много че понял что я в нэте накапал ))) А тут так ))) По скрипту как говориться ))))))

Adio
19.07.2005, 23:09
Да вот просто пошутить решил и взломал БД КРУПНОГО САЙТА ЗНАКОМСТВ ну естественно скачал около 2000 тыс Юзверей их емайлы пороли от сайта ))) короче
Вся дребедень . вот теперь сижу и думаю что с ним можно придумать ? ))) Малких троянов порассылать ? по всем майлам )) так нада прогу качать для рассылки..
Перебором пойти ?* по почте ?* ну короче сами решайти ))))) буду рад любым предложениям я не собираюсь не кого учить или возвышать себя.. просто буду рад выслушать ваши предложение на счет этого проишествие.
P.s 40 000 Кбит в сек-Мой нэт вот на днях хачу 7 мег поставить ))) Ото радость будет полные штаны )))))

niggerilo
19.07.2005, 23:12
`main' must return `int'
а по моему как объявишь так и будет

KEZ
19.07.2005, 23:25
Если у тебя больше нет вопросов по Ассемблеру, тогда тему я закрываю, т.к. база данных с сайта знакомств тут не при чем. Просто сохрани все в список email:pass и перебери WWWHACKом

nerezus
20.07.2005, 08:09
niggerilo, в с89, с99 и с++ так нельзя писать, вроде только в вижл си прокатит =)

Adio
20.07.2005, 09:50
ГГГ )))) Ну КеЗ ты прям телепат на счет WWWHacko;m ))) Пасибо =)
Закрывай )) только свет остать включенным ))))))))))

KEZ
20.07.2005, 17:34
закрыто но жалко